本文最后更新于:June 2, 2022 pm
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
目录
MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html
使用代理的要求
使用dao的代理要求:
- mapper文件中的
namespace
必须是dao接口的全限定名称。
- mapper文件中的标签的
id
必须是和dao接口中的方法名称一样。
mapper模板设置
| <?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="dao接口的全限定名称,如:com.tothefor.Study1.dao.PersonDao"> <select id="dao接口中的方法名称,如:selectBlog" resultType="需要返回的类型的全限定名称,如:com.tothefor.Study1.entity.Person"> select * from Blog where id = #{id} </select> </mapper>
|
主配置文件模板设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?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> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <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/link?useSSL=false & serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="loong461"/> </dataSource> </environment> </environments> <mappers> <mapper resource="其他mapper文件位置,如:com/tothefor/Study1/dao/PersonDao.xml"/> </mappers> </configuration>
|
加载mapper的方式
<mapper resource="" />
加载普通的xml文件,传入xml的相对路径(相对于类路径)。如:
| <mappers> <mapper resource="com/tothefor/dao/StudentMapper.xml"/> </mappers>
|
<mapper class="" />
使用mapper接口的全限定名来加载,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一个目录。
| <mappers> <mapper class="com.yogurt.mapper.PureStudentMapper"/> </mappers>
|
<package name="" />
扫描指定包下的所有mapper,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一目录。
| <mappers> <package name="com.yogurt.mapper"/> </mappers>
|
📢注意: 用后两种方式加载mapper接口和mapper.xml映射文件时,可能会报错。
那么,仔细检查一下,mapper接口文件和xml映射文件是否放在了同一个目录下,而且文件名是否一致,xml映射文件的namespace也和mapper接口的全限定名是否对的上。
如果上述均没有问题,那么最大的问题就是maven打包时并没有将xml文件进行打包。即在target中缺少文件。解决办法见最后
工具类
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 30 31 32 33 34 35 36
| package com.tothefor.utils;
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException; import java.io.InputStream;
public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory = null; static { String resource = "myBatis.xml"; try { InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ SqlSession session = null; if(sqlSessionFactory!=null){ session = sqlSessionFactory.openSession(); } return session; }
}
|