[学习笔记] MyBatis-Plus之条件构造与代码生成器

# 学习 # · 2021-05-12

条件构造器Wrapper

1、条件构造器(Wrapper):用于构造查询条件以实现复杂SQL语句。

2、条件构造器的常见使用方法:https://mp.baomidou.com/guide/wrapper.html#abstractwrapper

3、列表查询法:查询ID为1,姓名为张三的User。

@Test
void selectByMap() {
    Map<String, Object> map = new HashMap<>();
    map.put("id", 1);
    map.put("name", "张三");
    List<User> users = userMapper.selectByMap(map);
    System.out.println(users);
}

3、条件构造器查询:

// 查询王姓,年龄大于20岁的User
@Test
public void selectWrapper() {
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.likeRight("name", "王");
    queryWrapper.gt("age", 20);
    List list = userMapper.selectList(queryWrapper);
    System.out.println(list);
}

// 查询王姓,年龄20-40岁,email不为空的User
@Test
public void selectWrapper01() {
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.likeRight("name", "王");
    queryWrapper.between("age", 20, 40);
    queryWrapper.isNotNull("email");
    List list = userMapper.selectList(queryWrapper);
    System.out.println(list);
}


// 查询王姓或年龄大于30的User并按照年龄降序排列
@Test
public void selectWrapper02() {
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.likeRight("name", "王");
    queryWrapper.or();
    queryWrapper.ge("age", 30);
    queryWrapper.orderByDesc("age");
    queryWrapper.orderByAsc("id");
    List list = userMapper.selectList(queryWrapper);
    System.out.println(list);
}

5、Wrapper传入实体参数:

// 修改User实体类,设置name前后模糊
@TableField(condition = SqlCondition.LIKE)
private String name;

// 测试类
@Test
public void selectWrapper12() {
    User user = new User();
    user.setName("王");
    user.setAge(21);
    QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
    List<User> users = userMapper.selectList(queryWrapper);
    System.out.println(list);
}

代码自动生成器

1、AutoGenerator是MyBatis-Plus的代码生成器,通过AutoGenerator可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率。

2、代码自动生成器的使用:

(1)添加代码自动生成器依赖。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

(2)编写代码:

/**
 * @Package: com.example.demo
 * @Description: 代码自动生成器
 * @Author 多仔
 */
public class MyCodeAutoGenerator {
    public static void main(String[] args) {

        /**
         * 构建代码自动生成器对象
         **/
        AutoGenerator mpg = new AutoGenerator();

        /**
         * 全局策略配置
         **/
        GlobalConfig globalConfig = new GlobalConfig();
        // 设置生成目录
        String projectPath = System.getProperty("user.dir");
        globalConfig.setOutputDir(projectPath+"/src/main/java");
        // 设置author
        globalConfig.setAuthor("多仔");
        globalConfig.setOpen(false);
        // 是否覆盖文件
        globalConfig.setFileOverride(false);
        // 去除Service的I前缀
        globalConfig.setServiceName("%sService");
        // 主键生成策略
        globalConfig.setIdType(IdType.AUTO);
        // 配置Swagger
        globalConfig.setSwagger2(true);
        mpg.setGlobalConfig(globalConfig);

        /**
         * 数据源配置
         */
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatisplus_demo?serverTimezone=UTC");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("123456");
        dataSourceConfig.setDbType(DbType.MYSQL);
        mpg.setDataSource(dataSourceConfig);

        /**
         * 配置生成包
         **/
        PackageConfig packageConfig = new PackageConfig();
        // 模块名称
        packageConfig.setModuleName("demo");
        // 包名
        packageConfig.setParent("com.example");
        // 设置包
        packageConfig.setEntity("pojo");
        packageConfig.setMapper("mapper");
        packageConfig.setService("service");
        packageConfig.setController("packageConfig");
        mpg.setPackageInfo(packageConfig);

        /**
         * 生成策略配置
         **/
        StrategyConfig strategy = new StrategyConfig();
        // 设置要映射的表名
        strategy.setInclude("user");
        // 自动驼峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 自动lombok
        strategy.setEntityLombokModel(true);
        // 逻辑删除字段
        strategy.setLogicDeleteFieldName("deleted");
        // 自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate);
        tableFills.add(gmtModified);
        strategy.setTableFillList(tableFills);

        /**
         * 执行操作
         **/
        mpg.execute();
    }
}
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/301/

评论