一个mybatis的构建需要六部分:依赖包的导入,创建pojo,配置核心配置文件,配置映射文件,创建mybatis的工具类,测试
1.首先在myeclipse中创建一个maven项目,然后导入依赖包
<dependencies> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!-- jdbc的包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency> <!-- 查看日志文件的log4j包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <!-- 测试用的依赖包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies>
2.创建一个Student的pojo
注意:如果数据表字段是int类型的数据,建议pojo中使用Integer来修饰,因为int的默认值是0,不是null,可能在进行sql操作时出错,
private Integer id; private String sname; private String address; private String sex; private Integer tid; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname == null ? null : sname.trim(); } public String getAddress() { return address; } public void setAddress(String address) { this.address = address == null ? null : address.trim(); } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex == null ? null : sex.trim(); } public Integer getTid() { return tid; } public void setTid(Integer tid) { this.tid = tid; } @Override public String toString() { return "Student [id=" + id + ", sname=" + sname + ", address=" + address + ", sex=" + sex + ", tid=" + tid + "]"; }
3.创建mybatis的核心配置文件
mybatis的核心配置文件并不像hibernate一样必须使用特定的名称,这里我创建的是mybatis.xml
在对jdbc的连接配置时,可以通过properties文件,也可以不使用,如果使用的话,需要在标签的最上面使用<properties resource="db.properties"></properties>来引入自己配置的properties文件,并在下面通过${}来引用properties中的属性名
<?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> <properties resource="db.properties"></properties> <!-- 接收数据库的数据源(元数据) default默认读取以下的配置 --> <environments default="mysql"> <!-- 针对不同的数据库来配置元数据 id:区分元数据 --> <!-- 配置MySQL --> <environment id="mysql"> <!-- 事务的管理交给jdbc管理 --> <transactionManager type="jdbc" /> <!-- 不使用properties手动配置 <dataSource type="pooled"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> --> <!-- 使用properties加载properties中的属性 --> <dataSource type="pooled"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> <!-- 配置Oracle --> <environment id="oracle"> <!-- 事务的管理交给odbc管理 --> <transactionManager type="jdbc" /> <dataSource type="pooled"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521/test" /> <property name="username" value="scott" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="StudentMapper.xml" /> </mappers> </configuration>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
4.创建映射文件
<?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命名必须是唯一的,前期可以直接以所映射的pojo类的唯一路径来命名 --> <mapper namespace="com.oracle.pojo.Student"> <!-- mybaits通过自己手动写sql语句来对数据库进行操作,select就是查询操作 同样有update,delete,insert id:标识符,测试时调用的标识符来调用sql语句,相当于方法名 resultType:返回值类型 parameterType:传入的参数类型 如果是引用数据类型的话,需要传入完整的路径.如:java.lang.String以及对象com.oralc.pojo.Student 在下方的条件需要以#{}来占位,如果传入类型是对象型,需要与对象的属性名一致 --> <select id="findStudentById" resultType="com.oracle.pojo.Student" parameterType="int"> select * from student where id=#{id} </select> <select id="findAll" resultType="com.oracle.pojo.Student"> select * from student </select> </mapper>
5.创建mybatis的工具类
这里使用ThreadLocal类,用来绑定线程,当程序执行时作为一个线程,无论执行到dao层或是其他层,从该线程中获取的session都是同一个session。
public class MybatisUtil { private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); private static SqlSessionFactory sqlSessionFactory; static { try { // 读取mybatis核心配置文件 Reader reader = Resources.getResourceAsReader("mybatis.xml"); // 创建会话工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static SqlSession getSession() { // 获取会话 SqlSession sqlSession = threadLocal.get(); if (sqlSession == null) { // 从会话工厂获取session sqlSession = sqlSessionFactory.openSession(); // 绑定会话工厂 threadLocal.set(sqlSession); } return sqlSession; } public static void close() { SqlSession sqlSession = threadLocal.get(); if (sqlSession != null) { sqlSession.close(); } } }
6.测试
public class Test { private SqlSession session = null; @Before public void before() { //获取会话 session = MybatisUtil.getSession(); } @org.junit.Test public void add() { /** * 从会话中调用映射文件中的sql语句,为了防止不同的映射文件标识符重复,通过namespace.标识符来调用 * 如果后面有参数的话,在后面添加参数 */ Student student = session.selectOne("com.oracle.pojo.Student.findStudentById",1); System.out.println(student); List<Student> studentList = session.selectList("com.oracle.pojo.Student.findAll"); for (Student student2 : studentList) { System.out.println(student2); } } @After public void after() { session.commit(); MybatisUtil.close(); } }
测试结果