Mybatis-plus集成到spring-boot项目
1、pom.xml引入mybatis-plus依赖
com.baomidou mybatis-plus-boot-starter 3.4.1 com.baomidou mybatis-plus-generator 3.4.1
2、application.yml引入MyBatis Plus配置
# MyBatis Plus配置
mybatis-plus:# 搜索指定包别名typeAliasesPackage: com.new3s.**.domain# 配置mapper的扫描,找到所有的mapper.xml映射文件mapperLocations: classpath*:mapper/**/*Mapper.xml# 加载全局的配置文件configLocation: classpath:mybatis/mybatis-config.xml
3、使用代码生成器,自动生成***Entity.java、***Controller.java、I***Service.java、***ServiceImp.java、***Mapper.java、***Mapper.xml文件。
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;/*** mybatis-plus代码生成器** @author kally* @date 2023/5/29*/
public class CodeGenerator {/*** 测试方法** @param args*/public static void main(String[] args) {// 需要构建一个 代码自动生成器 对象AutoGenerator mpg = new AutoGenerator();// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://192.168.***.***:3306/***DB?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("***");dsc.setPassword("******");dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");projectPath = projectPath.concat("/windPvElecIntg-modules/new3s-windinspection");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("kally");gc.setOpen(false);gc.setFileOverride(true);gc.setBaseResultMap(true);gc.setBaseColumnList(true);gc.setIdType(IdType.AUTO);gc.setActiveRecord(true);gc.setEntityName("%sEntity");gc.setMapperName("%sMapper");gc.setServiceName("I%sService");gc.setServiceImplName("%sServiceImpl");gc.setControllerName("%sController");gc.setSwagger2(true);mpg.setGlobalConfig(gc);// 包配置PackageConfig packageConfig = new PackageConfig();packageConfig.setModuleName("projectname");packageConfig.setParent("com.companyname");packageConfig.setEntity("domain");packageConfig.setMapper("mapper");packageConfig.setXml("mapper");packageConfig.setService("service");packageConfig.setServiceImpl("service.impl");packageConfig.setController("controller");mpg.setPackageInfo(packageConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();// 对那一张表生成代码strategy.setInclude("wind_defect_config");// 数据库表映射到实体的命名策略strategy.setNaming(NamingStrategy.underline_to_camel);// 生成实体时去掉表前缀
// strategy.setTablePrefix("wind_", "pv_", "sys_");// 数据库表字段映射到实体的命名策略strategy.setColumnNaming(NamingStrategy.underline_to_camel);// lombok 模型 @Accessors(chain = true) setter链式操作strategy.setEntityLombokModel(true);// restful api风格控制器strategy.setRestControllerStyle(true);// url中驼峰转连字符strategy.setControllerMappingHyphenStyle(true);// 唯一标识strategy.setEntitySerialVersionUID(true);// 设置超类strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper");strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService");strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl");mpg.setStrategy(strategy);// 模板配置TemplateConfig templateConfig = new TemplateConfig();// 代码生成器mpg.setGlobalConfig(gc);mpg.setPackageInfo(packageConfig);mpg.setStrategy(strategy);mpg.setTemplate(templateConfig);mpg.execute();}}
4、注意:mybatis-plus框架会自动处理表的create***和update***字段。
如:create_time、update_time
解决方案:添加mp元数据注入处理器,针对不是数据库字段加排除处理
给mybtais-plus 注入处理器
package com.new3s.common.framework.mybatis;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.new3s.common.core.baseweb.domain.BaseEntity;
import com.new3s.common.core.constant.HttpStatus;
import com.new3s.common.core.exception.ServiceException;
import com.new3s.common.core.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;import java.util.Date;/*** @Description mybtais-plus 注入处理器* @Date 2023-05-31* @Author kally*/
@Slf4j
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {try {if (StringUtils.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();Date current = StringUtils.isNotNull(baseEntity.getCreateTime())? baseEntity.getCreateTime() : new Date();baseEntity.setCreateTime(current);baseEntity.setUpdateTime(current);}} catch (Exception e) {throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.UNAUTHORIZED);}}@Overridepublic void updateFill(MetaObject metaObject) {try {if (StringUtils.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();Date current = new Date();// 更新时间填充(不管为不为空)baseEntity.setUpdateTime(current);}} catch (Exception e) {throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.UNAUTHORIZED);}}}
/*** Mybatis Plus 配置** @author kally*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class MybatisPlusConfig {/*** 元对象字段填充控制器*/@Beanpublic MetaObjectHandler metaObjectHandler() {return new CreateAndUpdateMetaObjectHandler();}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
