夜间模式
约定与配置
与mybatis一样,对于实体类和数据库的字段有一样的名称时有着对应关系,大部分时候不需要进行配置
那么名称不一样时该怎么办呢
约定
- 类名驼峰转下划线为数据库表名
- id的字段为主键
- 变量名转下划线作为表的字段名
如果表名和类名不一致的时候,可使用@TableName
指定表名,例如:
java
@TableName("tb_user")
public class User {
}
1
2
3
4
2
3
4
如果id不是主键或者没有id这个字段时,使用@TableId
指定主键
例如:
java
@TableId(value = "id", type = IdType.AUTO)
private Long id;
1
2
2
其中value指定表中字段列名,type指定生成的id的格式
type的值有:
AUTO
:数据库自增长INPUT
:通过set方法自行输入ASSIGN_ID
:分配ID,使用接口Identifier Generator的方法来生成ID,默认实现类是Default Identifier Generator,也就是雪花算法!这个也是默认不指定时的配置javaUser user = new User(); // user.setId(7L); user.setUsername("kiko"); user.setPassword("123"); user.setPhone("18688990011"); user.setBalance(200); user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}"); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); userMapper.insert(user);
1
2
3
4
5
6
7
8
9
10不指定type和id时
bash16:20:06 INFO 29184 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 16:20:07 INFO 29184 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 16:20:07 DEBUG 29184 --- [ main] com.itheima.mp.mapper.UserMapper.insert : ==> Preparing: INSERT INTO user ( id, username, password, phone, info, balance, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) 16:20:07 DEBUG 29184 --- [ main] com.itheima.mp.mapper.UserMapper.insert : ==> Parameters: 1812039286986891266(Long), kiko(String), 123(String), 18688990011(String), {"age": 24, "intro": "英文老师", "gender": "female"}(String), 200(Integer), 2024-07-13T16:20:06.706039800(LocalDateTime), 2024-07-13T16:20:06.706039800(LocalDateTime) 16:20:07 DEBUG 29184 --- [ main] com.itheima.mp.mapper.UserMapper.insert : <== Updates: 1
1
2
3
4
5根据雪花算法进行写入值
如果主键值和数据库的字段值一致时,不需要指定value时可省略
即:
java
@TableId(type = IdType.AUTO)
private Long id;
1
2
2
仅作为只当主键生成类型使用
当字段名与属性名不一致或者不符合驼峰转下划线规则时可以使用@TableField
指定字段名
例如:
java
@TableField(value = "username")
private String username;
1
2
2
INFO
当属性名为is****
时,mybatis会认为你字段名为****
,而不会转成is大写***
,所以这个情况也需要使用@TableField
。
特别的,当类中有属性名而表中无字段名时可以用以下方式宣告无这个字段
java
@TableField(exist = false)
private String username;
1
2
2
当字段名与关键字重复时,例如order
,也需要使用@TableField
java
@TableField(value='`order`')
String order;
//此时执行sql语句时就变成了`order`
1
2
3
2
3
DANGER
更多注解或属性看这里注解配置 | MyBatis-Plus (baomidou.com)
配置
运行Mybatis-Plus时也需要进行配置
常用配置
yml
mybatis-plus:
type-aliases-package: com.itheima.pojo # 扫描别名 定义时不需要加上路径
mapper-locations: classpath*:mapper/*.xml # 扫描mapper路劲
configuration:
map-underscore-to-camel-case: true # 驼峰命名 开关
cache-enabled: false # 二级缓存开关
global-config:
db-config:
id-type: auto # 主键策略 选择自动增长
update-strategy: not_null # 更新策略 选择不为空的字段进行更新 TableFieldy
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
优先级
配置文件小于注解配置