MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息
类名驼峰转下划线作为表名
名为id的字段作为主键
变量名驼峰转下划线作为表的字段名
常见注解
@TableName:用来指定表名
@Tableld:用来指定表中的主键字段信息
@TableField:用来指定表中的普通字段信息
IdType枚举
- AUTO:数据库自增长
- INPUT:通过set方法自行输入
- ASSIOG_ID:分配ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIdentifierGenerator雪花算法
对于这个数据库表:tb_user
使用@TableField的常见场景:
- 成员变量名与数据库字段名不一致
- 成员变量名以is开头,且是布尔值
- 成员变量名与数据库关键字冲突
- 成员变量不是数据库字段
条件构造器
查询出名字中带'o'的,存款大于等于1000元的人的id,info,balance:
SELECT id,info,balance
FROM user
WHERE username LIKE "o" AND balance >=?
void testQueryWrapper(){ //1.构建查询条件 QueryWrapper<User> wrapper=new QueryWrapper<User>() .selct("id","info","balance") .like("username","o") .ge("balance",1000); //2.查询 List<User> users=userMapper.selectList(wrapper); users.forEach(System::out::println); }
其中User类是已经绑定数据库对应的user表
更新用户名为jack的用户余额为2000
UPDATE user
SET balance = 2000
WHERE username = "jack"
void testUpdateByQueryWrapper(){ //1.要更新的数据 User user=new User(); user.setBalance(2000); //2.更新的条件 QueryWrapper<User> wrapper=new QueryWrapper<User>() .eq("username","jack"); //3.执行更新 userMapper.update(user,wrapper); }
更新id为1,2,4的用户的余额,扣200.
UPDATE user
SET balance = balance - 200
WHERE id IN (1,2,4)
void testUpdateWrapper(){ List<int> ids=List.of(1,2,4); UpdateWrapper<User> Wrapper = new UpdateWrapper<User>() .setSql("balance=balance-200") .in("id",ids); userMapper.update(null,wrapper); }
尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码
void testLambdaQueryWrapper(){ //1.构建查询条件 LabdaQueryWrapper<User> wrapper=new LabdaQueryWrapper<User>() .selct(User::getUsername,User::getInfo,User::getBalance) .like(User::getUsername,"o") .ge(User::getBalance,1000); //2.查询 List<User> users=userMapper.selectList(wrapper); users.forEach(System::out::println); }
Service接口
自己写的UserService接口继承IService接口,实现类UserServiceImpl继承ServiceImpl实现类,此时就可以使用Service接口了。
基于Restful风格实现下面的接口:
多个条件的查询建议用Lambda: