MyBatis学习-(四)MyBatis配置文件模板设置及其工具类

本文最后更新于: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的代理要求:

    1. mapper文件中的namespace必须是dao接口的全限定名称。
    1. mapper文件中的标签的id必须是和dao接口中的方法名称一样。

mapper模板设置

1
2
3
4
5
6
7
8
9
<?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 &amp; 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的相对路径(相对于类路径)。如:

1
2
3
<mappers>
<mapper resource="com/tothefor/dao/StudentMapper.xml"/>
</mappers>

<mapper class="" />

使用mapper接口的全限定名来加载,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一个目录。

1
2
3
4
<!-- 在mapper接口中使用注解 -->
<mappers>
<mapper class="com.yogurt.mapper.PureStudentMapper"/>
</mappers>

<package name="" />

扫描指定包下的所有mapper,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一目录。

1
2
3
<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;

/**
* @Author DragonOne
* @Date 2022/1/20 23:07
* @墨水记忆 www.tothefor.com
*/
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(); //加入true则为自动提交事务,不写或为false则为手动提交事务
}
return session;
}

}


本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/129347db.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!