
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
导入mysql连接包和mybatis包:
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.31version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.9version>
dependency>
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)
resources目录下新建mybatis-config.xml文件,初始配置内容如下:
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
environments>
<mappers>
<mapper resource="top/imustctf/dao/UserMapper.xml"/>
mappers>
configuration>
需要用户自己修改dataSource中的内容,例如:
注意:对于每一个Mapper.xml,都要Mybatis配置文件中注册对应的
mapper - resource🦭
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="top/imustctf/dao/UserMapper.xml"/>
mappers>
configuration>
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
说白了,就是构建一个生产SqlSession的工厂类,SqlSession用于执行具体的SQL业务:
private static SqlSessionFactory sqlSessionFactory;
// 初始化SqlSession工厂
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
throw new RuntimeException(e);
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句:
/**
* 获取SqlSession实例,用于操作数据库
* @return SqlSession实例
*/
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
此时,基本的Mybatis架构已经完成!
现在你可能很想知道 SqlSession 和 Mapper 到底具体执行了些什么操作,但 SQL 语句映射是个相当广泛的话题
首先像以往的Javaweb项目一样,我们新建一个UserDao的接口:
public interface UserMapper {
List<User> getUserList();
}
一个语句既可以通过 XML 定义,也可以通过注解定义。我们先看看 XML 定义语句的方式:
注意:这里的
mapper - namespace要写对应的UserDao接口类,select - id要写接口待实现的方法,resultType要写返回的结果类型🐳
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.imustctf.dao.UserMapper">
<select id="getUserList" resultType="top.imustctf.pojo.User">
select * from mybatis.user
select>
mapper>
万事俱备,只欠东风,现在让我们来测试一下吧:
public class UserMapperTest{
@Test
public void test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
sqlSession.close();
}
}
}