欢迎光临散文网 会员登陆 & 注册

Oracle:Mybatis,JDBC数据库连接,增删改查,提交事务,解决端口号报错【诗书画唱】

2021-03-09 19:53 作者:诗书画唱  | 我要投稿




概括:

持久层框架的特点和创建Mybatis工程

PPT文本

示例(用mybatis框架像数据库中插入一条数据)

解决因为端口号为1522或1521引发的IO错误,查看端口号

sqlserver,mysql ,oracle各自默认的不同的端口号

关于使用修改语句等时未提交事务后JDBC无法再修改这条数据这件事

sqlserver,mysql ,oracle各自默认的不同的端口号

关于mybatis.xml配置文件的注意事项

Mybatis框架建表示例



因为mybatis框架,这些被我注释的代码都可以不用写了,所以还是很好用的。






解决因为端口号为1522或1521引发的IO错误,查看端口号 START



这个是有时eclipse的控制台中会报出的错误:

这个是有时会报出的错误








https://blog.csdn.net/Hellowenpan/article/details/79645173



当然了我就没这篇文章写得那么麻烦了,




D:\oracle\product\10.2.0\db_1\network\ADMIN


解决因为端口号为1522或1521引发的IO错误,查看端口号 END





示例(用mybatis框架像数据库中插入一条数据)START

abatis

n.鹿砦,拒木,障碍物;

这里有条数据是我用jdbc插入的





Mybatis框架建表示例 START


                    

create table Userinfo(

    id number primary key,

    act varchar2(30) not null,

   pwd varchar2(30) not null,

   birth date

);


--drop sequence seq_Userinfo

create sequence seq_Userinfo

start with 1       --起始值是1

increment by 1     --增长的值   

maxvalue 999999999 --序列号的最大值

minvalue 1         --序列号的最小值

nocycle            --是否循环

cache 10;          --预存



insert into Userinfo values(seq_Userinfo.nextval,'黑黑','pwd1',to_date('2020-06-06','yyyy-mm-dd'));

insert into Userinfo values(seq_Userinfo.nextval,'红红','pwd2',to_date('2020-06-07','yyyy-mm-dd'));

insert into Userinfo values(seq_Userinfo.nextval,'蓝蓝','pwd3',to_date('2020-06-08','yyyy-mm-dd'));


--select * from Userinfo


Mybatis框架建表示例 END


未插入数据时

import java.io.IOException;

import java.io.Reader;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;


import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import com.jy.bean.Userinfo;



public class Test {


public static void main(String[] args) {

// TODO Auto-generated method stub

//        String drivername = "oracle.jdbc.driver.OracleDriver";

//        //oracle数据库的默认端口号1521

//        //连接的数据库名字是orcl数据库

//        String url = "jdbc:oracle:thin:@localhost:1521:orcl";

//        String username = "j190802";

//        String pwd = "orcl";

//        

//        Connection conn = null;

//        PreparedStatement pstm = null;

//        ResultSet rs = null;

//        

//        try {

//        Class.forName(drivername);

// conn = DriverManager.getConnection(url,username,pwd);

// pstm = conn.prepareStatement("select * from userinfo where id = ?");

// pstm.setInt(1, 8);

// rs = pstm.executeQuery();

// List<Userinfo>rmUserinfo = new ArrayList<Userinfo>();

// while(rs.next()) {

// Userinfo u = new Userinfo();

// //ID是userinfo表的主键

// u.setId(rs.getInt("ID"));

// u.setAct(rs.getString("ACT"));

// System.out.println(rs.getString("ACT"));

// u.setPwd(rs.getString("PWD"));

// u.setBirth(rs.getString("BIRTH"));

// rmUserinfo.add(u);

// }

//

// String sql = "insert into userinfo values(?,?,?,to_date(?,'yyyy-mm-dd'))";

// pstm = conn.prepareStatement(sql);

// Userinfo u = new Userinfo();

// u.setId(11);

// u.setAct("haha");

// u.setPwd("09876");

// u.setBirth("2000-7-3");

// pstm.setInt(1, u.getId());

// pstm.setString(2, u.getAct());

// pstm.setString(3, u.getPwd());

// pstm.setString(4, u.getBirth());

// int count = pstm.executeUpdate();

// System.out.println(count);

// } catch (Exception e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// } finally {

// try {

// if(rs != null) {

// rs.close();

// }

// if(pstm != null) {

// pstm.close();

// }

// if(conn != null) {

// conn.close();

// }

// } catch(Exception e) {

// e.printStackTrace();

// }

// }


//获取主配置文件的路径

String path = "mybatis.xml";

//读取mybatis.xml中的配置信息,就是读取四大连接字符串的内容

Reader config;

try {

config = Resources.getResourceAsReader(path);

SqlSessionFactory factory = 

new SqlSessionFactoryBuilder().build(config);

//数据库的操作对象session

SqlSession session = factory.openSession();

//调用selectAll

//执行路径就是映射文件的namespace属性+'.'+id

String exePath = null;

// exePath = "com.jy.dao.UserinfoDao.selectAll";

// List<Userinfo>list = session.selectList(exePath);

// for(Userinfo u : list) {

// System.out.println(u.getAct());

// }


// exePath = "com.jy.dao.UserinfoDao.selectById";

// Userinfo u = session.selectOne(exePath,8);

// System.out.println(u.getAct());


exePath = "com.jy.dao.UserinfoDao.add";

Userinfo u = new Userinfo();

u.setId(13);

u.setAct("帅哥");

u.setPwd("666666");

u.setBirth("2000-6-06");

Integer count = session.insert(exePath,u);

//新增修改和删除一定记得提交事务

session.commit();

System.out.println(count);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}


package com.jy.bean;


public class Userinfo {

    private Integer id;

    private String act;

    private String pwd;

    private String birth;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getAct() {

return act;

}

public void setAct(String act) {

this.act = act;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public String getBirth() {

return birth;

}

public void setBirth(String birth) {

this.birth = birth;

}

}

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace就是空间名,它必须在整个项目中都是唯一的 -->

<mapper namespace="com.jy.dao.UserinfoDao">

    <!-- id必须是唯一的 -->

    <!-- 创建一个List<Userinfo>集合,变量名叫rmUserinfo -->

    <resultMap type="com.jy.bean.Userinfo" id="rmUserinfo">

        <!-- userinfo表的主键是id -->

        <!-- property指的是Userinfo类的属性名,

             column指的是userinfo表的列名 -->

        <!-- u.setId(rs.getInt("ID")) -->

        <id property="id" column="ID" />

        <!-- u.setAct(rs.getInt("ACT")) -->

    <result property="act" column="ACT"/>

    <result property="pwd" column="PWD"/>

    <result property="birth" column="BIRTH"/>

    </resultMap>

    <!-- public List<Userinfo>selectAll() -->

    <select id="selectAll" resultMap="rmUserinfo">

        select * from userinfo

    </select>

    

    <!-- public Userinfo selectById(Integer id) -->

    <!-- mybatis框架中,占位符?使用#{}来代替 -->

    <select id="selectById" resultMap="rmUserinfo">

        select * from userinfo where id = #{id}

    </select>

    

    <!-- public Integer add(Userinfo u) -->

    <!-- 因为参数的类型是Userinfo,所以占位符中的字符串就必须是对应的属性名

         (属性名区分大小写) -->

    <insert id="add" parameterType="com.jy.bean.Userinfo">

        insert into userinfo values(#{id},#{act},#{pwd},to_date(#{birth},'yyyy-mm-dd'))

    </insert>

</mapper>




<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>   

    <environments default="oracleConf">                 

        <!-- oracle配置 --> 

        <environment id="oracleConf">  

            <transactionManager type="JDBC"> 

                <property name="closeConnection" value="false"/>

            </transactionManager> 

            <!-- 配置数据源 -->       

            <dataSource type="POOLED">

                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>   

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> 

                <property name="username" value="X"/> 

                <property name="password" value="sshcPwd"/>  

            </dataSource>    

        </environment>

    </environments> 

    <!-- 实体映射文件集合 --> 

    <mappers>

        <mapper resource="com/jy/bean/UserinfoSqlMap.xml"/>

    </mappers>

</configuration>





示例(用mybatis框架像数据库中插入一条数据)END

关于mybatis.xml配置文件的注意事项 START

关于mybatis.xml配置文件的注意事项 END


教你找下载Oracle后就自带的jdbc包 START

D:\oracle\product\10.2.0\db_1\jdbc\lib





教你找下载Oracle后就自带的jdbc包 END



持久层框架的特点和创建Mybatis工程 START



PPT文本:

什么是MyBatis:

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

    像这种支持SQL查询的框架叫持久层框架,与之类似功能的还有Hibernate框架


持久层框架的特点:

Hibernate和Mybatis等都具备一些共同点:

从配置文件(通常是XML配置文件中)得到 sessionfactory。

由sessionfactory产生 session。

在session中完成对数据的增删改查和事务提交等。

在用完之后关闭session 。 

在java对象和数据库表之间有做映射的配置文件,通常是xml 文件。


使用MyBatis:

jar包下载地址为:http://mvnrepository.com/artifact/org.mybatis/mybatis

一个简单的Mybatis示例:


在数据库中创建表stuinfo。

在工程中导入MyBatis框架包和数据库驱动包。

创建MyBatis框架的配置文件mybatis.xml。

创建stuinfo的javabean类和映射文件stuinfoMap.xml。(映射文件也在src目录下,最好和它所映射的javabean类在一起方便管理。)

创建测试类,在main方法中进行测试。

导入MyBatis框架包和数据库驱动包:

Mybatis框架支持一个框架中使用多种不同的数据库,即在框架中同时使用两种以上的数据库,原则是需要用哪个数据库,就导入哪种数据库的jar包。

请在项目中导入Mybatis框架包和数据库驱动包。


创建MyBatis框架的配置文件mybatis.xml:

为了简单起见,我们暂时将Mybatis的配置文件放在src目录下。

注意:当进行框架整合以后,这个文件可能会被删除掉。该文件名没有特殊要求。以下代码片段是框架对数据库连接字符串进行处理。

创建javabean:

根据stuinfo表的字段创建一个javabean,该javabean的类名为Stuinfo,即表名首字母大写,驼峰式命名。


创建javabean的映射文件:

在前面创建的Stuinfo类所在的包中,继续创建映射文件,注意该文件的名字最好遵守项目团队制定的规范,例如规定该文件名是以被映射的java类名拼接上SqlMap.xml而成的。


添加映射文件到mybatis.xml中:

对于映射文件,如果你不通过代码告诉Mybatis框架它在哪里,是没有办法读取到的,所以,我们还需要通过修改mybatis.xml文件告诉框架该如何找到映射文件。

打开mybatis.xml,添加如下的代码:


检查:

工程的文件层次结构如下:


测试:

创建一个带有main方法的测试类,在方法中添加如下的代码:



总结:

比较我们以前写的JDBC代码和使用mybatis框架的代码,说说他们的差别。


作业:



搭建一个Mybatis框架项目,通过Mybatis框架查询出被连接数据库中某个表的所有数据。(使用oracle或者sqlserver试试)


持久层框架的特点和创建Mybatis工程 END



主配置文件和加载properties配置文件 START

Mybatis框架中有三种配置文件:

主配置文件(mybatis.xml)

数据库配置文件(db.properties)

映射文件(SqlMap.xml)

注意:在框架中,除了使用xml文件进行配置以外,还有一种配置文件也使用得很广泛,那就是properties文件。


在MyBatis中可以通过配置environment元素的子元素transactionManage来指定事务管理器类型:

1、JDBC:直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。

2、MANAGED:几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。




environment元素的子元素dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。通过它的type属性来指定内建的数据源类型,type属性包含三种配置:

UNPOOLED:实现每次被请求时简单打开和关闭连接。

POOLED:JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。当前Web应用程序用来快速响应请求很流行的方法。

JNDI:实现为了使用如Spring或应用服务器这类的容器,容器可以集 中或在外部配置数据源,然后放置一个JNDI上下文的引用。




主配置文件和加载properties配置文件 END

讲义 START



Struts2:升级servlet为action。

Mybatis:持久层框架,数据库框架。减少jdbc样板代码的编写。


jdbc连接ORACLE数据库:

"1、数据库驱动包(安装oracle数据库时就有了

【安装目录】\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar)"

"2、四大连接字符串

drivername=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:orcl

username=j190802

password=orcl"

3、编写代码


搭建Mybatis框架步骤:

1、导入框架包:mybatis-3.3.0.jar

2、将主配置文件mybatis.xml文件放到src目录下(主配置文件名不要改)

针对于每个表进行操作:

3、创建对应表的bean类

4、创建表的映射文件

5、在主配置文件中注册映射文件







讲义 END

sqlserver,mysql ,oracle各自默认的不同的端口号 START

 sqlserver默认端口号为:1433

URL:"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname"

DRIVERNAME:"com.microsoft.jdbc.sqlserver.SQLServerDriver";



mysql 默认端口号为:3306

URL:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk

DRIVERNAME:"com.mysql.jdbc.Driver";



oracle 默认端口号为:1521

URL:"jdbc:oracle:thin:@localhost :1521:orcl";

DRIVERNAME:"oracle.jdbc.driver.OracleDriver";


sqlserver,mysql ,oracle各自默认的不同的端口号 END



关于使用修改语句等时未提交事务后JDBC无法再修改这条数据这件事 START




关于使用修改语句等时未提交事务后JDBC无法再修改这条数据这件事 END


Oracle:Mybatis,JDBC数据库连接,增删改查,提交事务,解决端口号报错【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律