1:通用Mapper结合JPA 注解通过反射拼接出xml形式的动态的sql去执行,省去了原来配置的大量xml类型的sql文件。
2:它就是个辅助mybatis极简单表开发的组件。它不是为了替代mybatis,而是让mybatis的开发更方便。
springboot配置的通用mapper的形式
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--mapper增强mybatis不是替代-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.1.4</version>
</dependency>
非springboot项目应用的方式
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.0</version>
</dependency>
修改配置
注意这里使用 tk.mybatis.spring.mapper.MapperScannerConfigure
替换原来
Mybatis的 org.mybatis.spring.mapper.MapperScannerConfigurer
springboot形式的修改方式 1
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@EnableTransactionManagement
@ComponentScan
@MapperScan(basePackages="com.sinog2c.dao",markerInterface= MyMapper.class)
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
springboot形式的修改方式 2
package com.zhuma.demo.config.mybatis;
import com.zhuma.demo.comm.mapper.CrudMapper;
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;
import java.util.Properties;
@Configuration
@AutoConfigureAfter(MybatisAutoConfiguration.class)
public class MyBatisConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
mapperScannerConfigurer.setBasePackage("com.zhuma.demo.mapper");
Properties properties = new Properties();
properties.setProperty("mappers", CrudMapper.class.getName());
properties.setProperty("notEmpty", "false");
properties.setProperty("IDENTITY", "MYSQL");
properties.setProperty("ORDER","BEFORE");
mapperScannerConfigurer.setProperties(properties);
return mapperScannerConfigurer;
}
}
非springboot形式的修改 1
<?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>
<plugins>
<!-- 如何有分页插件,一定要放在通用mapper的上面 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
<property name="reasonable" value="true"/>
</plugin>
<!--这里插件的作用就是替换MapperScannerConfigurer-->
<plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
<!--================================================-->
<!--可配置参数说明(一般无需修改)-->
<!--================================================-->
<!--UUID生成策略-->
<!--配置UUID生成策略需要使用OGNL表达式-->
<!--默认值32位长度:@java.util.UUID@randomUUID().toString().replace("-", "")-->
<!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/>-->
<!--主键自增回写方法,默认值MYSQL,详细说明请看文档-->
<property name="IDENTITY" value="MYSQL"/>
<!--序列的获取规则,使用{num}格式化参数,默认值为{0}.nextval,针对Oracle-->
<!--可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName,PropertyName-->
<property name="seqFormat" value="{0}.nextval"/>
<!--主键自增回写方法执行顺序,默认AFTER,可选值为(BEFORE|AFTER)-->
<!--<property name="ORDER" value="AFTER"/>-->
<!--通用Mapper接口,多个通用接口用逗号隔开-->
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
</plugins>
</configuration>
非springboot形式的修改 2
<!-- 通用 Mapper -->
<beanclass="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<propertyname="basePackage"value="cn.com.bluemoon.bd.service.spider.dao"/>
<propertyname="properties">
<value>
mappers=tk.mybatis.mapper.common.Mapper
</value>
</property>
</bean>
总结
通用mapper的配置就是替换原来mybatis的MapperScannerConfigurer类。
UserMapper接口继承通用Mapper
package com.myx.demo.mapper;
import com.myx.demo.pojo.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserMapper extends Mapper<User>{
}
配置User实体类,里面用到的jpa注解都是通用Mapper依赖自带的,无需引入其他包,且只对通用Mapper的sql语句生效。
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
// 用户名
private String userName;
// 密码 于表中的字段没有对应关系的时候,使用Transient进行忽略。
@Transient
private String password;
}