Mybatis-Plus学习day02(下)

简介: Mybatis-Plus学习day02

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

ffe8d28143634519b811e048ab51aabe.png

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();
    }
}

执行结果:

b04c16e892504398b6aeb00ab76ff9b8.png

31d7ab2c4b4c459998310e43e2fa2796.png

7.MybatisX 快速开发插件

MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。

安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。

功能:

相关文章
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
80 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
47 5
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
6月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
5月前
|
Java 数据库连接 Maven
Mybatis学习
Mybatis学习
28 0