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 方法
下面的两种查询方式的结果是一样的。
