MyBatis-Plus 用起来真的很舒服( 五 )


MyBatis-Plus 用起来真的很舒服

文章插图
 
直接在QueryWrapper对象上链式调用即可,需要什么条件就加什么条件 。
再看selectList方法,提出一个需求,查询性别为男,名字中带有字母j或者邮箱中带有字母b的员工信息,实现如下:
@Testvoid contextLoads() {    QueryWrapper<Employee> wrapper = new QueryWrapper<Employee>()        .eq("gender", 1)        .like("last_name", "j")        .or()        .like("email", "b");    List<Employee> emps = employeeMapper.selectList(wrapper);    for (Employee emp : emps) {        System.out.println(emp);    }}
MyBatis-Plus 用起来真的很舒服

文章插图
 
或关系只需要调用or()方法即可实现,执行结果:
==>  Preparing: SELECT id,last_name,email,gender,age FROM tbl_employee WHERE (gender = ? AND last_name LIKE ? OR email LIKE ?) ==> Parameters: 1(Integer), %j%(String), %b%(String)<==    Columns: id, last_name, email, gender, age<==        Row: 2, jack, jack@qq.com, 1, 21<==        Row: 5, bbb, bbb@qq.com, 1, 30<==      Total: 2Employee(id=2, lastName=jack, email=jack@qq.com, gender=1, age=21, salary=null)Employee(id=5, lastName=bbb, email=bbb@qq.com, gender=1, age=30, salary=null)
MyBatis-Plus 用起来真的很舒服

文章插图
 
既然有QueryWrapper提供查询,那么就应该有UpdateWrapper用于更新,比如修改名字中带字母j并且年龄为21岁的员工信息,将其年龄修改为30岁,实现如下:
@Testvoid contextLoads() {    Employee employee = new Employee();    employee.setAge(30);    UpdateWrapper<Employee> wrapper = new UpdateWrapper<Employee>()        .like("last_name", "j")        .eq("age", 21);    employeeMapper.update(employee, wrapper);}
MyBatis-Plus 用起来真的很舒服

文章插图
 
对于删除操作,我们仍然使用QueryWrapper来完成条件的限定,比如删除名字中带字母b并且年龄为30岁的男性员工信息,实现如下:
@Testvoid contextLoads() {    QueryWrapper<Employee> wrapper = new QueryWrapper<Employee>()        .like("last_name", "b")        .eq("age", 30)        .eq("gender", 1);    employeeMapper.delete(wrapper);}
MyBatis-Plus 用起来真的很舒服

文章插图
 
条件构造器的功能远不止于此,具体细节可以参照官方文档:
https://mybatis.plus/guide/wrapper.html
代码生成器与MyBatis一样,MyBatisPlus同样提供了代码生成器,而且是基于Java代码进行生成的,相比于MyBatis,也更具有扩展性 。
引入依赖:
<dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-generator</artifactId>  <version>3.4.1</version></dependency><dependency>  <groupId>org.apache.velocity</groupId>  <artifactId>velocity-engine-core</artifactId>  <version>2.2</version></dependency>
MyBatis-Plus 用起来真的很舒服

文章插图
 
然后编写生成代码:
@Testvoid contextLoads() {    // 全局配置    GlobalConfig globalConfig = new GlobalConfig();    globalConfig.setAuthor("wwj") // 作者        .setOutputDir("C:/Users/Administrator/Desktop/ideaworkspace/mybatisplus-demo/src/main/java") // 生成路径        .setFileOverride(true)  // 若多次生成,则文件覆盖        .setIdType(IdType.AUTO) // 主键策略        .setServiceName("%sService") // 设置生成的service接口名不携带首字母I --> IEmployeeService        .setBaseResultMap(true)        .setBaseColumnList(true);    // 生成sql片段    // 数据源配置    DataSourceConfig dataSourceConfig = new DataSourceConfig();    dataSourceConfig.setDbType(DbType.MYSQL)    // 设置数据库类型        .setDriverName("com.mysql.cj.jdbc.Driver")        .setUrl("jdbc:mysql:///mybatisplus?serverTimezone=UTC")        .setUsername("root")        .setPassword("123456");    // 策略配置    StrategyConfig strategyConfig = new StrategyConfig();    strategyConfig.setCapitalMode(true) // 开启全局大写命名        .setColumnNaming(NamingStrategy.underline_to_camel) // 设置字段名与属性的驼峰命名映射        .setTablePrefix("tbl_") // 设置表名前缀        .setInclude("tbl_employee"); // 作用于哪张表    // 包名配置    PackageConfig packageConfig = new PackageConfig();    packageConfig.setParent("com.wwj.mybatisplusdemo") // 设置父包名        .setMapper("mapper") // 设置Mapper接口生成的位置        .setService("service") // 设置Service生成的位置        .setController("controller") // 设置Controller生成的位置        .setEntity("bean") // 设置实体类生成的位置        .setXml("mapper"); // 设置Mapper映射文件生成的位置    // 整合配置    AutoGenerator autoGenerator = new AutoGenerator();    autoGenerator.setGlobalConfig(globalConfig)        .setDataSource(dataSourceConfig)        .setStrategy(strategyConfig)        .setPackageInfo(packageConfig);    // 执行    autoGenerator.execute();}


推荐阅读