如何使用MyBatis,首先就是xml或java代码生成SqlSessionFactory,MyBatis给我们提供了SqlSessionFactoryBuilder(构造器),org.apache.ibatis.session.Configuration这个类作为引导,使用的是Builder模式。
在MyBatis中有两种形式生成SqlSessionFactory,一种是XML,一种是java代码实现。这里小编推荐使用XML的形式,也是大多数企业开发的选择。配置XML或java代码后,MyBatis会读取配置文件,通过Configuration类对象构建MyBatis的上下文。
需要提醒大家的是SqlSessionFactory是一个接口,而它的实现类为SqlSessionManager和DefaultSqlSessionFactory两个类。
一般用DefaultSqlSessionFactory,DefaultSqlSessionFactory在多线程中,而它的具体实现依靠DefaultSqlSessionFactory。
主要分为两类:一类是基础配置文件,通常只有一个,主要配置最基础的上下文参数和运行环境:另一类为映射文件,主要配置映射关系、SQL、参数等。
基础配置文件:一般命名为mybatis-config.xml,放在工程类路径下,下面看一个实例:
//mybatis的配置文件
String resource = "mybatis-config.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream inputStream = Test1.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
//Reader reader = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
//SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
/*
* 映射sql的标识字符串,
* com.feiyu.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
* getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
String statement = "com.feiyu.mapping.userMapper.getUser";//映射sql的标识字符串
//执行查询返回一个唯一user对象的sql
User user = session.selectOne(statement, 1);
System.out.println(user);
读取mybatis-config.xml,然后通过SqlSessionFactoryBuilder的Builber方法创建SqlSessionFactory。
作用相当于一个JDBC中的Connection对象,代表一个连接资源的启用。有以下三个作用:
SqlSession sqlSession = SqlSessionFactory.openSession();
下面我们来看看SqlSession在操作事务时的伪代码:
//定义SqlSession
SqlSession sqlSession = null;
try{
//打开SqlSession会话
sqlSession = SqlSessionFactory.openSession();
sqlSession.commit();//提交事务
}catch (Exception ex) {
sqlSession.rollback();//回滚事务
}finally {
//在finally语句中确保资源被顺利关闭
if (sqlSession != null) {
sqlSession.close();
}
}
使用commit方法提交事务,和使用rollback方法回滚事务。
注意:数据库的连接资源使用后要及时的关闭它,如果不及时关闭,数据库的连接资源就会很快被消耗光,整个系统将陷入瘫痪状态,所以这里使用finally语句使其顺利关闭。
在MyBatis中,映射器尤为的重要,也是最复杂的组件,它是由一个接口和对应的XML文件(或@注解)构成。
有以下4个作用:
本文只实现XML文件形式映射器方式,也是大多数开发的选择,下面首先定义一个POJO:
package com.feiyu.POJO;
/**
* @author gacl
* users表所对应的实体类
*/
public class User {
//实体类的属性和表的字段名称一一对应
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
映射器接口
package com.feiyu.mapping;
import com.feiyu.POJO.User;
public interface UserMapper {
public User getUser(int id);
}
引入XML文件
resultType="com.feiyu.POJO.User">表明返回的是一个user类型的返回值。
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUser(1);
目前使用Mapper接口编程已成主流,在spring中更为常见