MyBatis 配置详解

安装

  • 将MyBatis-X.X.X.jar 文件置于classpath。

  • 使用Maven构建dependency代码如下:

1
2
3
4
5
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>

构建SqlSessionFactory

  • 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,在构建SqlSessionFactory时,可以使用两种构建方式,分别是xml配置文件构建和Java代码构建。

xml构建:

  • xml配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
  • 注入xml配置文件:
1
2
3
4
5
String resource = "mybatis-config.xml";
//Resources中的getResourceAsStream方法使用ClassLoader中的getResourceAsStream
InputStream inputStream = Resources.getResourceAsStream(resource);
//InputStream inputStream = {classname}.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

Java构建:

  • Java配置代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//注入属性值
Properties properties = new Properties();
properties.setProperty("driver","com.mysql.jdbc.Driver"); properties.setProperty("url","jdbc:mysql://localhost:3306/mybatis");
properties.setProperty("username","root");
properties.setProperty("password","${password}");
//创建pooled连接池
PooledDataSourceFactory pooledDataSourceFactory = new PooledDataSourceFactory();
pooledDataSourceFactory.setProperties(properties);
DataSource dataSource = pooledDataSourceFactory.getDataSource();
//注入事务管理
TransactionFactory transactionFactory = new JdbcTransactionFactory();
//创建mybatis加载环境类
Environment environment = new Environment("development",transactionFactory,dataSource);
//创建全局构造类
Configuration configuration = new Configuration(environment);
  • 注入Java配置代码:
1
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

  注:xml构建方法和Java构建方法的结果是完全一致的,并且xml中节点代表的意义也与代码中各种类型代表的意义一致,只不过是两种不同的方法而已。对于不希望使用xml文件的人来说,可以使用Java代码配置。同时在这里我们可以发现,使用xml文件来配置MyBatis的Configuration,在一定程度上比使用Java代码更加简洁,因此更推荐使用xml文件配置Configuration。

定义表所对应的实体类

  数据表的结构如下:

1
2
3
4
5
CREATE TABLE user(
id INT(10) PRIMARY KEY,
name VARCHAR(22),
age INT(10)
)

  定义与之对应的实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;
}
}

从SqlSessionFactory中获取SqlSession

  • 顾名思义,有了SqlSessionFactory,我们就可以从中获取SqlSession。
1
SqlSession session = sqlSessionFactory.openSession();
  • SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
  • 可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

构建映射器Mapper

xml配置:

  • 直接在mybatis-config.xml文件configuration节点内添加mapper节点:
1
2
3
4
5
6
7
<mappers>
<!--resource指向mapper映射器配置文件-->
<mapper resource="mapper.xml"/>
<!-- 也可以指向映射器的接口类型,或者其url -->
<mapper class="com.mapping.UserMapper"/>
<mapper url="file://mapper.xml"/>
</mappers>
  • 随后新建mapper.xml作为mapper的映射文件,并在mapper中写入数据库操作语句。
1
2
3
4
5
6
7
8
<?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">
<!-- 指定命名空间 -->
<mapper namespace="domain.userMapper">
<select id="getUser" parameterType="int" resultType="domain.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
  • 也可以新建一个接口文件做为mapper的接口,如下所示:
1
2
3
4
5
6
7
8
9
10
package mapping;

import domain.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
//在注解中写入数据库操作语句
@Select(value = "SELECT * FROM user WHERE id = #{id} ")
User findById(int id);
}

Java配置:

  • 通过自己创建configuration来配置:
1
2
3
4
5
6
//添加映射器,这里与xml配置不同的是,在配置SqlSessionFactory时便已经将映射器的接口文件添加进去
configuration.addMapper(UserMapper.class);
//或者添加这个接口的包名
configuration.addMapper("com.mapping");
//建立SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

  在这里我们可以发现,使用xml配置映射器方式更多,且java代码配置无法添加xml文件做为映射器,比较下来有一定的局限性。

使用已经映射的SQL语句

  我们利用SqlSession来使用已经在映射器中映射的SQL语句。

1
2
3
4
//指定XML配置中mapper配置文件中的命名空间和id
String statement = "domain.userMapper.getUser";

User user = session.selectOne(statement,1);

或者

1
2
3
//加载Java配置中已配置的UserMapper接口
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findById(1);

  最后使用映射器中的方法进行数据库的操作。