第一种:mapper接口纯注解
(mapper层即为dao层)
第一步:application.yml文件配置DataSource,注解开发可以不用配置mybatis。(以User.java为例)
1 |
#application.yml文件内容如下 # datasource spring: datasource: url: jdbc:mysql:///springboot?serverTimezone=UTC #注意添加时区,标准时区为“UTC” username: root password: 20011205 driver-class-name: com.mysql.cj.jdbc.Driver |
下面是url和driverclassname注解形式:
1 |
driverClassName: com.mysql.jdbc.Driver # mysql-connector-java 5.x及之前版本中的 driverClassName: com.mysql.cj.jdbc.Driver # mysql-connector-java 6.x及后续版本中的 |
1 |
参数名称 参数说明 user 数据库用户名(用于连接数据库) password 用户密码(用于连接数据库) useUnicode 是否使用Unicode字符集 characterEncoding 指定字符编码 autoReconnect 当数据库连接异常中断时,是否自动重新连接 autoReconnectForPools 是否使用针对数据库连接池的重连策略 failOverReadOnly 自动重连成功后,连接是否设置为只读 maxReconnects autoReconnect设置为true时,重试连接的次数 initialTimeout autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 connectTimeout 和数据库服务器建立socket连接时的超时时间,单位:毫秒。 0表示永不超时,适用于JDK socketTimeout socket操作(读写)超时时间,单位:毫秒。 0表示永不超时 useSSL 是否进行SSL连接 serverTimezone 数据库时区设置,mysql8.x的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。 |
1 |
# Kaven是你需要连接的具体数据库名 url:jdbc:mysql://localhost:3306/Kaven # 使用Unicode字符集,并且指定UTF-8字符编码 url:jdbc:mysql://localhost:3306/Kaven?useUnicode=true&characterEncoding=UTF-8 # 当数据库连接异常中断时,自动重新连接 url:jdbc:mysql://localhost:3306/Kaven?autoReconnect=true # 不进行SSL连接 url:jdbc:mysql://localhost:3306/Kaven?useSSL=false # 不进行SSL连接,并且设置数据库时区为亚洲上海 url:jdbc:mysql://localhost:3306/Kaven?useSSL=false&serverTimezone=Asia/Shanghai |
第二步:创建UserMapper接口。mapper.UserMapper(mapper包下)
1 |
#mapper包下的UserMapper.java接口 package com.ithc.springbootmybatis.mapper; import com.ithc.springbootmybatis.domain.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserMapper { @Select("select * from t_user") public List<User> findAll(); } |
第三步:在测试类中注入对应的mapper
注意一下注解:@RunWith 是类级别的注解, 它提供了一种更改测试运行程序的默认行为的机制。简单理解,@RunWith注解就是一个运行器,其接受一个类的签名来指定是使用什么类、在什么环境下运行。需要注意的是,该注解的参数必须是Runner类的子类。
@SpringBootTest注解是一个Spring Boot提供的注解,通过这个注解可以使JUnit单元测试跑在Spring Boot的运行环境中。我们可以通过classes参数来指定Spring Boot的启动类。
1 |
import... @SpringBootTest class SpringbootMybatisApplicationTests { @Autowired private UserMapper userMapper; #注入mapper @Test public void testFindAll() { List<User> list = userMapper.findAll(); #测试类操作,查找所有用户,存到list集合中 System.out.println(list); #打印list } } |
第四步:测试,控制台成功打印所需信息。
第二种:Xml配置
第一步:创建UserXmlMapper接口
1 |
#UserXmlMapper接口文件内容 package com.ithc.springbootmybatis.mapper; import com.ithc.springbootmybatis.domain.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserXmlMapper { public List<User> findAll(); } |
(没有添加注解,所以需要配置文件和findAll方法进行映射)
第二步:配置文件,写在resources目录下,创建directory类型文件mapper,mapper下UserMapper.xml文件进行配置,内容是对mapper的约束头。
1 |
#xml文件原始内容,不完整,对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> 内容 </mapper>
可见是有各种操作的
1 |
#UserMapper.xml最终内容,查询操作 <?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.ithc.springbootmybatis.mapper.UserXmlMapper"> #指定namespace让其和UserXmlMapper有映射关系,值为其全路径名。copy reference复制路径名 <select id="findAll" resultType="user"> #id和接口中方法名相同,finaAll;resultType和domain中类名相同,User,也可以用别名 select * from t_user #SQL语句 </select> </mapper> |
第三步:写好了UserMapper.xml配置文件后,需要在application.yml文件中配置mybatis
1 |
# mybatis mybatis: mapper-locations: classpath:mapper/*Mapper.xml #mapper映射文件路径 type-aliases-package: com.ithc.springbootmybatis.domain #包扫描,因为前面的配置文件中使用了别名,所以需要把别名配置进去,值为User.java所在包的包名 #config-location: 指定mybatis的核心配置文件 |
第四步:配置完毕,在测试类中注入。注入完毕测试得到同样结果。
1 |
#在测试类中注入,内容格式与纯注解方法相同 @SpringBootTest class SpringbootMybatisApplicationTests { @Autowired private UserXmlMapper userXmlMapper; @Test public void testFindAll2() { List<User> list = userXmlMapper.findAll(); System.out.println(list); } } |