1.Mybatis简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2.第一个Mybatis项目
Maven导包
导入mysql连接包和mybatis包:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency>
新建Mybatis配置文件
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)
resources目录下新建mybatis-config.xml文件,初始配置内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <!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🧇
<?xml version="1.0" encoding="UTF-8" ?> <!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工具类
每个基于 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架构已经完成!
3.探究已映射的 SQL 语句
现在你可能很想知道 SqlSession 和 Mapper 到底具体执行了些什么操作,但 SQL 语句映射是个相当广泛的话题
首先像以往的Javaweb项目一样,我们新建一个UserDao的接口:
public interface UserMapper { List<User> getUserList(); }
一个语句既可以通过 XML 定义,也可以通过注解定义。我们先看看 XML 定义语句的方式:
注意:这里的mapper - namespace要写对应的UserDao接口类,select - id要写接口待实现的方法,resultType要写返回的结果类型🙌
<?xml version="1.0" encoding="UTF-8" ?> <!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(); } } }