SpringBoot(一) ---- SpringBoot集成MybatisPlus
一、创建SpringBoot项目
1.访问https://start.spring.io/创建SpringBoot项目
2.创建时依赖SpringWeb
3.resources目录下创建application.yml文件,配置基本参数
server: port: 8080 spring: profiles.include: dev
4.创建application-dev.yml文件
二、集成Mybatis
1.添加Mybatis的Starter依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
2.application-dev.yml文件下配置数据源等参数
spring:
datasource:
url: jdbc:postgresql://rds.amazonaws.com:5432/bank
username: postgres
password: password
mybatis:
mapper-locations: classpath:com/bank/mapper/xml/*.xml
configuration:
map-underscore-to-camel-case: true
logging:
level:
root: info
com:
bank:
mapper: DEBUG
3.启动类加入Mapper类扫描注解
@MapperScan("com.bank.mapper")
三、集成MybatisPlus
1.添加MybatisPlus依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>
四、使用MybatisPlus
1.代码生成
创建如下代码生成类,运行后生成代码
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import org.apache.commons.lang3.StringUtils; import java.util.Scanner; /** * @Author neikou * @Date 2021/04/27 **/ public class CodeGenerator { public static void main(String[] args) { // 1、创建代码生成器 AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor(scanner("author")); gc.setOpen(false); //生成后是否打开资源管理器 gc.setFileOverride(true); //重新生成时文件是否覆盖 gc.setServiceName("%sService"); //去掉Service接口的首字母I gc.setIdType(IdType.AUTO); //主键策略 gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型 gc.setSwagger2(false);//开启Swagger2模式 mpg.setGlobalConfig(gc); // 3、数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:postgresql://rds.amazonaws.com:5432/bank"); dsc.setDriverName("org.postgresql.Driver"); dsc.setUsername("postgres"); dsc.setPassword("password"); dsc.setDbType(DbType.POSTGRE_SQL); mpg.setDataSource(dsc); // 4、包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName(null); //模块名 pc.setParent("com.toa.toabank"); pc.setController("controller"); pc.setEntity("entity"); pc.setService("service"); pc.setMapper("mapper"); mpg.setPackageInfo(pc); // 5、策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude(scanner("tableName"));//对一张表生成代码 strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 strategy.setTablePrefix("PTP_"); //生成实体时去掉表前缀 strategy.setEntityTableFieldAnnotationEnable(true);//生成字段注解 strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略 strategy.setEntityLombokModel(false); // lombok 模型 @Accessors(chain = true) setter链式操作 strategy.setChainModel(true); strategy.setRestControllerStyle(true); //restful api风格控制器 strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符 strategy.setVersionFieldName("version");
mpg.setStrategy(strategy); // mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } /** * <p> * 读取控制台内容 * </p> */ public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotBlank(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } }
2.乐观锁
2.1在实体中为版本锁字段加入@Version注解(代码生成时可以在Strategy配置中使用setVersionFieldName设置自动生成);
2.2在配置类中托管拦截器
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author neikou * @Date 2021/04/28 **/ @Configuration public class MybatisPlusInterceptorConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } }
注:
支持的数据类型:int,Integer,long,Long,Date,Timestamp,LocalDateTime
仅支持 updateById(id)
与 update(entity, wrapper)
方法
3.分页
3.1在配置类中托管拦截器
/** * @Author neikou * @Date 2021/04/28 **/ @Configuration public class MybatisPlusInterceptorConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));//分页 return interceptor; } }
3.2在sqlSessionFactory中添加拦截器插件
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); ... sessionFactory.setPlugins(mybatisPlusInterceptor());
3.3使用batisplus自带的page方法进行分页,或现在自定义的mapper方法中加入Page<?> page参数,batisplus将自动分页
public interface UserMapper {//可以继承或者不继承BaseMapper /** * 查询 : 根据state状态查询用户列表,分页显示 * * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(可以继承Page实现自己的分页对象) * @param state 状态 * @return 分页对象 */ IPage<User> selectPageVo(Page<?> page, Integer state); }