MyBatis-plus进阶,如何用条件构造器构建疑问?

摘要:MyBatis-plus进阶 映射 自动映射规则 表名和实体类名映射-》 表名user 实体类名User 字段名和实体类属性名映射-》字段名name 实体类属性名name 这里需要注意:User类里的 private String name
MyBatis-plus进阶 映射 自动映射规则 表名和实体类名映射-》 表名user 实体类名User 字段名和实体类属性名映射-》字段名name 实体类属性名name 这里需要注意:User类里的 private String name; 这个name不是属性名,而是变量名。 那么什么是属性名呢? 类里面的属性对应的get方法,其方法名去掉“get”然后首字母小写对应的就是属性名,比如: // 属性名是name 映射到数据库的字段是name public String getName() { return name; } // 属性名是testName 映射到数据库的字段是testName public String getTestName() { return name; } 字段名下划线命名方式和实体类属性小驼峰命名方式映射-》 字段名 user_email 实体类属性名 userEmail MyBatis-plus支持这种映射规则,可以通过配置来设置: mybatis-plus: configuration: # 开启下划线到驼峰命名的映射 map-underscore-to-camel-case: true 表映射@TableName注解 Pojo类通过@TableName注解指定映射的数据库表名,就会完成表名的映射。 @TableName注解主要应用在类名和数据库表名不一致的情况。 // 表示User类映射到t_user表 @TableName("t_user") public class User { private Long id; public String getName() { return name; } private String name; private Integer age; private String email; } 那如果数据库表特别多的情况下,这样每个类都指定具体表名会很麻烦,此时就可以开启表映射的全局配置。 表映射的全局配置: mybatis-plus: global-config: db-config: # 全局配置表名的前缀,这样会自动将Pojo类名的首字母小,并且加上前缀t_ # 这样就不用使用@TableName来指定表名 table-prefix: t_ 字段映射 当数据库字段和表实体类的属性不一致时,可以使用@TableField注解改变字段和属性的映射,让注解中的名称和表字段保持一致。 @TableField("user_email") private String email; 此时的sql是:select id,user_email as email from user 有一个问题场景:当数据库表中的某个字段设置为desc时,注意:desc为数据库的关键字,此时查询的sql语句就是: select id,name,desc from user 很明显,这样的sql执行时会报错。那么怎么解决呢? 给关键字加上分隔符就能执行成功:select id,name,`desc` from user 在Java中 给desc这个属性加上注解@TableField("`desc`") 也就是字段名加上分隔符就可以了。 字段失效 当数据库中有字段不想被查询时,可以使用@TableField(select= false)来隐藏这个字段。在拼接sql语句的时候就不会拼接这个字段 // 查询时不会查出Email这个字段 @TableField(select = false) private String email; 视图属性 实际开发中,有些字段不需要数据库存储,但需要展示,像这种实体类中存在但是数据库中不存在的字段,叫做视图字段。 这种字段可以通过@TableField(exist = false)注解来去掉这个字段,不让他作为查询或DML字段。 @TableField(exist = false) private String emailPhone; 条件构造器 MyBatis-plus的条件查询是基于面向对象的思想,条件查询使用对象来完成封装。 在实际开发中,只需要关注QueryWrapper和LambdaQueryWrapper这两个即可。 等值查询 eq 方法 下面的两种查询方式的结果是一样的。
阅读全文