入门
这一节描述如何创建一个最简单的Mybatis程序
添加依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
设置 xml 核心配置文件
xml 配置文件包含了对 Mybatis 的核心设置,其中最关键的部分包括数据源、事务管理器、映射器等
<?xml version="1.0" encoding="UTF-8" ?>
<!--头部声明,用于验证xml文件正确性-->
<!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">
<!--设置jdbc为事务管理器-->
<transactionManager type="JDBC"/>
<!--连接池设置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_study?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--注册映射器-->
<mappers>
<mapper resource="com/kk/mapper/UserMapper.xml"/>
</mappers>
</configuration>
MyBatis 也提供了配置类,因此也可以通过 Java 代码来设置配置,但是一般都使用 xml 文件
设置 xml 映射文件
xml 映射文件包含了 SQL 代码等信息,通过它,MyBatis 就可以实现 sql 操作,每一个映射文件都应该在核心配置文件中注册
<?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="com.kk.mapper.UserMapper">
<select id="selectById" resultType="com.kk.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
这是一个最简单的映射文件,它包含头部声明,然后在命名空间"com.kk.mapper.UserMapper"
中定义了一个 id 为 "selectById"
的映射语句,这样就能在后续通过全限定名(命名空间加 id )调用它,需要注意的是 xml 映射文件中的命名空间其实不必一定和它的全限定名相同,比如说 上面这个例子中的命名空间不一定是"com.kk.mapper.UserMapper"
,写成"UserMapper"
或者"UserDao"
之类的名字也是可以的,只需要保证在调用它们时使用正确的命名空间即可。但是为了代码的可读性,一般都采用这种写法
获取 SqlSession 对象
SqlSession 是 MyBatis 的核心,我们需要通过它来调用 sql 方法,它需要通过 SqlSessionFactory 获取,而 SqlSessionFactory 通过 SqlSessionFactoryBuilder 构建,SqlSessionFactoryBuilder 就是通过上面提到的 xml 核心配置文件来获得 SqlSessionFactory 实例
String resource = "mybatis-config.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
SqlSession sqlSession= sqlSessionFactory.openSession();
然后就可以通过 sqlSession 调用映射文件来操作 sql 了,在使用完毕后要关闭连接:
sqlSession.close();
这种连接的操作十分频繁,因此可以编写一个工具类用来实现:
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
第一条查询语句
SqlSession sqlSession = MyBatisUtils.getSqlSession();
System.out.println(sqlSession.selectOne("com.kk.mapper.UserMapper.selectById", 1));
sqlSession.close();
SqlSession 提供了大量的方法例如 selectOne
,使用这些方法并传入相应的映射语句的全限定名以及参数就可以进行相应的 sql 操作。但这种方法已经不被推荐,更好的方法是使用一个全限定名以及参数和返回值都与映射语句相同的接口方法来调用
接口映射
编写一个全限定名(完整路径)与命名空间相同的接口 UserMapper :
import com.kk.pojo.User;
public interface UserMapper {
User selectById(int id);
}
这样这个 UserMapper 就和 UserMapper.xml 绑定了,然后就可以通过 SqlSession 获得这个类实例,并通过它的方法调用映射语句
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
System.out.println(mapper.selectById(2));