mybatisplus是来简化mybatis开发的,其中封装好了各种sql语句,我们直接调用即可,省略了编写mapper.xm映射文件的过程
MybatisPlus怎么来获取数据库表的信息?
- 默认以类型驼峰转下划线作为表名
- 默认把id字段作为主键
- 默认把变量名驼峰转下划线作为字段名
1.入门程序
前提:准备好数据库,pojo实体类
1.1导入依赖
<!--MybatisPlus-SpringBoot-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
1.2.mapper——UserMapper接口
与之前使用mybatis不同的是,这个接口要继承MybatisPlus提供的父类,这个父类里封装了SQL语句
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
}
1.3.测试类
insert语句我们并没有编写,是MybatisPlus给我们提供的
@SpringBootTest
class SpringbootMybatisplusApplicationTests {
@Autowired
UserMapper userMapper;
@Test
void test01(){
User user = new User();
user.setId(4);
user.setPwd("12035");
user.setName("小张");
user.setPerms(null);
System.out.println(userMapper.insert(user));
}
}
2.常用注解
- @TableName:当类名和表名不一致时用来指定表名
- @TableId:用来指定表中的主键字段信息
- @TableField:当属性名和字段名不一致时用来指定表中的普通字段信息
注意:如果数据库里的id有类型(比如是自增长的),那么就必须添上下面例子里的注解,否则默认是通过雪花算法来给id赋值的
@TableName("tb_user")
public class User {
@TableId(type = IdType.AUTO)
private int id;
@TableField("name")
private String name;
private String pwd;
private String perms;
}
3.常见配置
mybatisplus继承了mybatis的原生配置,如:
- xml映射文件路径
- 驼峰命名和下划线映射
- 别名扫描包
4.条件构造器
在执行SQL语句时,难免会有复杂情况,mybatisplus也有这些情况的应对方式
4.1.selectList
@Test
void test02(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("id","name");
wrapper.like("name","张");
List<User> users = userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
解释上面的代码:
- 我们通过mapper接口的对象来调用mybatisplus封装好的select方法,其中需要一个叫做QueryWrapper类型的参数
- 因此,我们就要先来构造这个对象,然后通过构造的对象可以给SQL增加复杂条件
wrapper.select("id","name"); 表示要查询的字段只有id和name wrapper.like("name","张"); 表示模糊查询name中带有“张”的用户- 上面的代码生成的SQL为:
select id , name from tb_user where name like '%张%'
4.2.update
@Test
void test03(){
//1.更新的数据
User user = new User();
user.setPwd("52236");
//2.更新的条件
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name","小张");
//3.执行更新
userMapper.update(user,wrapper);
}
解释上面的代码:
- update方法需要两个参数,一个是实体类对象,另一个是wrapper
- 实体类对象来传要修改的数据
- wrapper对象来传修改的条件
- 上面的代码生成的SQL为:
update tb_user set pwd = '52236' where name = '小张'
4.3.基于lambda的格式
@Test
void test04(){
//查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getId,User::getName);
wrapper.like(User::getName,"张");
//执行SQL
List<User> users = userMapper.selectList(wrapper);
for (User user1 : users) {
System.out.println(user1);
}
}
解释上面的代码:
- LambdaQueryWrapper和QueryWrapper的区别是,前者在传参数的时候,要的是方法类型的参数,可以和4.1对比一下,在4.1中为id的地方,在4.3中就是getId,诸如此类
5.IService接口基本用法
上面介绍了mybatisplus提供的Mapper接口BaseMapper,下面来介绍下mybatisplus提供的Service接口IService和Service实现类ServiceImpl
service接口:
public interface UserService extends IService<User> {
}
service实现类:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
PS:这部分笔记只是浅浅的学习了下mybatisplus(主要是为了应对网上的项目才学的)后面有时间,我会把剩下的笔记补齐的