3.2、编写MyMetaObjectHandler
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) {//编写自动填充条件. Object password = getFieldValByName("password", metaObject); if(password==null){//如果字段为空,则进行自动填充 setFieldValByName("password", "123456", metaObject); } } @Override public void updateFill(MetaObject metaObject) { } }
4.逻辑删除
开发系统时,有时候在实现功能时,删除操作需要实现逻辑删除,所谓逻辑删除就是将数据标记为删除,而并非真正的物理删除(非DELETE操作),查询时需要携带状态条件,确保被标记的数据不被查询到。这样做的目的就是避免数据被真正的删除。
4.1、修改表结构
为tb_user表增加deleted字段,用于表示数据是否被删除,1代表删除,0代表未删除。
同时,也修改User实体,增加deleted属性并且添加@TableLogic注解:
@TableLogic private Integer deleted;
4.2、配置
mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: com.rg.boot.bean global-config: db-config: logic-delete-value: 1 #删除状态的值 1 logic-not-delete-value: 0 #未删除状态的值 0
4.3测试
@Test public void testDelete(){ // UPDATE tb_user SET deleted=1 WHERE id=? AND deleted=0 int result = userMapper.deleteById(2L); System.out.println("result==>"+result); } @Test public void SELECT id,user_name,password,name,age,email,version,deleted FROM tb_user WHERE id=? AND deleted=0(){ //SELECT id,user_name,password,name,age,email,version,deleted FROM tb_user WHERE id=? AND deleted=0 User user = userMapper.selectById(2L); System.out.println(user); }
5.通用枚举
解决了繁琐的配置,让 mybatis 优雅的使用枚举属性!
5.1、修改表结构
为表增加sex列,默认值为1
5.2、定义枚举
public enum SexEnum implements IEnum<Integer> { MAN(1,"男"), WOMAN(2,"女"); private int value; private String desc; @Override public Integer getValue() { return this.value; } SexEnum(int value,String desc){ this.value=value; this.desc=desc; } @Override public String toString() { return this.desc; } }
5.3、配置
mybatis-plus: type-enums-package: com.rg.boot.enums #枚举包扫描
5.4、修改实体
private SexEnum sex;
5.5、测试
@Test public void testAR_Insert(){ User user = new User(); user.setName("小乔"); user.setAge(21); user.setPassword("123465"); user.setUserName("xiaoqiao"); user.setEmail("xiaoqiao@qq.com"); user.setVersion(1); user.setSex(SexEnum.WOMAN); // INSERT INTO tb_user ( user_name, password, name, age, email, version, sex ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) boolean res = user.insert(); //结果数据库该条数据,sex属性值为2 System.out.println("result==>"+res); } ######################################测试查询########################################### @Test public void testAR_selectById(){ User user = new User(); user.setId(3L); User user1 = user.selectById(); //User(id=3, userName=wangwu, password=123456, name=王五, age=28, email=test3@itcast.cn, version=1, deleted=0, sex=男) System.out.println(user1); }
6.代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper
XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
测试代码:
public class generator { /** * <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 + "!"); } /** * RUN THIS */ 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("rg1910"); gc.setOpen(false); // 实体属性 Swagger2 注解 //gc.setSwagger2(true); mpg.setGlobalConfig(gc); // 3.数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("186259"); mpg.setDataSource(dsc); // 4.包配置 PackageConfig pc = new PackageConfig(); pc.setController("controller") .setEntity("bean") .setMapper("mapper") .setService("service") .setModuleName("") .setServiceImpl("service.impl") .setXml("mapper.xml"); pc.setModuleName(scanner("模块名")); pc.setParent("com.rg.boot.generator"); //生成代码的位置 mpg.setPackageInfo(pc); // 5.自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; List <FileOutConfig> focList = new ArrayList <>(); focList.add(new FileOutConfig() { @Override public String outputFile(TableInfo tableInfo) { //自定义文件名称(自定义模块的resources的位置.) return projectPath + "/mybatis-plus-springboot-simple/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); mpg.setTemplate(new TemplateConfig().setXml(null)); // 6.策略配置 StrategyConfig strategy = new StrategyConfig(); // 数据库表映射到实体的命名策略 strategy.setNaming(NamingStrategy.underline_to_camel); // 数据库表字段映射到实体的命名策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 开启lombok 模型 strategy.setEntityLombokModel(true); // restful api风格控制器 strategy.setRestControllerStyle(true); // strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController"); strategy.setInclude(scanner("表名")); strategy.setSuperEntityColumns("id"); // url中驼峰转连字符 strategy.setControllerMappingHyphenStyle(true); 生成实体时去掉表前缀 strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); // 添加模板引擎 //mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } }
执行结果:
7.MybatisX 快速开发插件
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。
功能: