博文说明:
此博客主要是记录Mybatis中一些新的写法特性。无论是使用xml写法还是Annotation方式书写SQL都是不是很方便,特别是Annotation的方式操作复杂SQL的时候,整个文本占用的空间特别庞大,同时也影响阅读和维护,还不如使用xml直观,但xml性能还是稍差点,所以尝试用类加载的方式也不失为一种好的选择。
1.SpringBoot2.X整合Mybatis的配置
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
注意:这里需指定mybatis版本号,否则会报错!
2.application.yml配置文件
spring:
datasource:
url: jdbc:mysql://1.1.1.1:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: com.xx.xx.mapper.*
type-aliases-package: com.xx.xx.entity.*
logging:
level:
com.xx.xx.mapper: debug
注意:
2.1 MySQL8.0之后引入了com.mysql.cj.jdbc.Driver
,旧的com.mysql.jdbc.Driver
不再适用
2.2 如果想在测试的时候控制台中打印SQL,引入使用日志的必须指定mapper包全路径com.xx.xx.mapper: debug
3.使用类加载方式自定义SQL
public class MemberSql implements ProviderMethodResolver {
public static String getMemberInfoById(final String name) {
return new SQL() {{
SELECT("*");
FROM("member");
WHERE("name like #{name} || '%'");
}}.toString();
}
}
@Mapper
public interface MemberMapper{
@SelectProvider(type = MemberSql.class)
public Member getMemberInfoById(@Param("name") String name);
}
注意:
3.1. 必须实现接口ProviderMethodResolver
,该接口主要是扫描自定义MemberSql
下的所有方法做映射;
3.2. MemberSql
中的函数名必须和MemberMapper
中的函数名相同,这就是为什么需要有第一点的要求;
3.3. name like #{name} || '%'
此处基于Oracle写法。