MyBatis-plus
- 一.快速创建
- CRUD
- 查询
- 2.Wrapper的讲解
- service 封装
- 逆向工程
一.快速创建
1.mybatis-plus依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
2.mapper的编写(user是实体类对象)
/**
* 使用mp定义Mapper,需要让Mapper接口继承 BaseMapper接口。
*/
public interface UserMapper extends BaseMapper<User> {
}
3.实体类
3.1 @TableName(“tb_user”) // 指定表名,进行数据库表的映射,如果前缀统一可以直接在全局中进行配置,这个注解可以不写
3.2 @TableField(“user_name”) 指定映射关系
实体类的属性名和数据库的字段名自动映射:
* 名称一样
* 数据库字段使用_分割,实体类属性名使用驼峰名称
否则需要使用 @TableField(“user_name”) 指定映射关系
3.3 忽略某个字段的查询和 插入
@TableField(exist = false)
3.4 设置id生成策略:AUTO 数据库自增
@TableId(type = IdType.AUTO)
3.5 yam中的全局配置
mybatis-plus:
global-config:
db-config:
# 表名前缀
table-prefix: tb_
# id生成策略 数据库自增
id-type: auto
@TableName("tb_user") // 指定表名,进行数据库表的映射,如果前缀统一可以直接在全局中进行配置,这个注解可以不写
@Data
public class User {
private Long id;
@@TableField("user_name")
private String userName;
private String password;
4.启动类
@MapperScan("com.xxxx.xx.mapper")
@SpringBootApplication
public class MybatisPlusSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusSpringbootApplication.class, args);
}
}
5.测试类
@SpringBootTest
@RunWith(SpringRunner.class)
class UserMapperTest {
@Autowired
private UserMapper userMapper;
/**
* 根据id查询
*/
@Test
public void testSelectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
}
CRUD
@SpringBootTest
@RunWith(SpringRunner.class)
class UserMapperTest {
@Autowired
private UserMapper userMapper;
/**
* 根据id查询
*/
@Test
public void testSelectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
/**
* 添加
*/
@Test
public void testInsert() {
User user = new User();
//user.setId(6L);
user.setUserName("1111");
user.setPassword("1111");
int i= userMapper.insert(user);
System.out.println(i);
}
/**
* 删除
*/
@Test
public void testDelete() {
/*
//1. 根据id删除
int count = userMapper.deleteById(8L);
*/
/*
//2. 根据id集合批量删除
List ids = new ArrayList();
ids.add(6);
ids.add(7);
userMapper.deleteBatchIds(ids);
*/
//3. 根据map构造条件,删除
Map<String, Object> map = new HashMap<>();
//delete from tb_user where user_name = ? and age = ?
map.put("user_name","zhangsan");
map.put("age","18");
userMapper.deleteByMap(map);
}
/**
* 修改
*/
@Test
public void testUpdateById() {
User user = new User();
user.setId(2L);
user.setPassword("1111111");
int count = userMapper.updateById(user);
}
/**
* 分页查询:
* 1. 当前页码:currentPage
* 2. 每页显示条数:size
*
* 注意:使用mp的分页要设置一个拦截器!!! 分页查询在下边的查询中写着
*/
@Test
public void testSelectPage() {
int current = 1;//当前页码
int size = 2;//每页显示条数
IPage<User> page = new Page(current,size);
userMapper.selectPage(page,null);
List<User> records = page.getRecords();//当前页的数据
long pages = page.getPages();//总页数 2
long total = page.getTotal();//总记录数 4
System.out.println(records);
System.out.println(pages);
System.out.println(total);
}
}
查询
1.分页查询的拦截器,,,,因为我们都使用的mybatis-puls是3.4.0的所以得使用下面的拦截器,上面的会显示过时
@Configuration
public class PageConfig {
/**
* 3.4.0之前的版本用这个
* @return
*/
/* @Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}*/
/**
* 3.4.0之后提供的拦截器的配置方式
* @return
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
2.Wrapper的讲解
2.1因为Wrapper是一个抽象类,所以在使用的使用查询和更新用属于自己的专用的对象
2.2 Wrapper的作用就是在书写mysql,通过点对象的形式在进行的书写,关于点对象,我将图贴在下面
查询: QueryWrapper、LambdaQueryWrapper
//1.创建查询条件构建器
QueryWrapper<User> wrapper = new QueryWrapper<>();
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
更新: UpdateWrapper、LambdaUpdateWrapper
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
模糊查询
select这个就是,你可以定义你自己查询的字段,提高数据库的查询效率
wrapper.eq("user_name","lisi")
.or()
.lt("age",23)
.in("name","李四","王五")
//.orderBy(true,true,"age")
.orderByDesc("age")
.select("id","user_name");
分页查询
@Test
public void testWrapper6(){
int current = 1;//当前页码
int size = 2;//每页显示条数
//1. 构建分页对象
Page<User> page = new Page<>(current,size);
//2. 构建条件对象
QueryWrapper<User> wrapper = new QueryWrapper();
wrapper.lt("age",23);
userMapper.selectPage(page,wrapper);
List<User> records = page.getRecords();
long total = page.getTotal();
long pages = page.getPages();
System.out.println(records);
System.out.println(total);//2
System.out.println(pages);//1
}
== LambdaQueryWrapper:消除代码中的硬编码 ==
@Test
public void testWrapper7(){
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUserName,"zhangsan");
userMapper.selectOne(wrapper);
}
service 封装
逆向工程
这个看官网就行了