我们说mybayis-plus为我们解决了单表的crud的问题,而且这些基本的crud无需我们写任何sql,只需要继承BaseMapper,如下:
public interface UsersMapper extends BaseMapper {
}
在BaseMapper中定义了crud接口方法,这一讲我们来了解这些接口方法,并学会使用它,在学习这些方法之前,我先介绍mybatis-plus的输出sql拦截器
,配置该拦截器,就可以查看sql输出情况。
//Spring boot方式
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
/**
* SQL输出拦截器
*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
//sql格式化
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
/**
*分页查询拦截器
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
添加方法为insert,测试代码如下:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Autowired
private UsersMapper usersMapper;
@Test
public void testAdd(){
Users user = new Users();
user.setEmail("[email protected]");
user.setJoinTime(LocalDateTime.now());
usersMapper.insert(user);
}
}
知识贴士:LocalDateTime、LocalDate、LocalTime都是java8提供的日期工具类
java8日期类型和数据库日期类型的对应关系
java8日期类型 | mysql数据库类型 |
---|---|
LocalTime : 只包括时间 | 对应 time |
LocalDate : 只包括日期 | 对应 date |
LocalDateTime : 包括日期和时间 | 对应 datetime |
mybatis-plus生成器在生成pojo的时候如果数据库类型为日期类型,那么对应的pojo属性为java8中的日期类型
java8日期类型的常用api
// 取当前日期:
LocalDate today = LocalDate.now(); // -> 2018-12-24
LocalTime time = LocalTime.now(); //21:37:59
LocalDateTime time = LocalDateTime.now();//2018-12-24T21:37:59
//要从字符串创建LocalDateTime对象,可以使用静态LocalDateTime.parse()方法。
//它需要一个字符串和一个DateTimeFormatter作为参数。 DateTimeFormatter用于指定日期/时间模式。
String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
//要从LocalDateTime对象中创建格式化的字符串,可以使用format()方法。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.of(1986, Month.APRIL, 8, 12, 30);
String formattedDateTime = dateTime.format(formatter); // "1986-04-08 12:30"
1:根据id删除
@Test
public void testDelete1(){
usersMapper.deleteById(1);
}
2:根据 columnMap 条件,删除记录
columnMap 中的key必须是字段名
//根据 columnMap 条件,删除记录
@Test
public void testDelete2(){
Map columnMap = new HashMap();
usersMapper.deleteByMap(columnMap);
}
3:根据entity条件,删除记录
entity必须使用QueryWrapper包裹
//根据 entity 条件,删除记录
@Test
public void testDelete3(){
Users user = new Users();
user.setEmail("[email protected]");
user.setPwd("123");
Wrapper queryWrapper = new QueryWrapper(user);
usersMapper.delete(queryWrapper);
}
4:根据id批量删除
//删除(根据ID 批量删除)
@Test
public void testDelete4(){
List ids = new ArrayList();
ids.add(3);
ids.add(4);
usersMapper.deleteBatchIds(ids);
}
1:根据id update
@Test
public void update1(){
Users user = new Users();
//必须指定id
user.setId(5);
user.setEmail("99999999qq.com");
usersMapper.updateById(user);
}
2:根据 whereEntity 条件,更新记录
@Test
public void update2(){
//实体对象 (set 条件值,不能为 null)
Users setUser = new Users();
setUser.setEmail("66666666qq.com");
// updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
Users whereUser = new Users();
whereUser.setEmail("99999999qq.com");
whereUser.setId(5);
Wrapper updateWrapper = new UpdateWrapper(whereUser);
//最终执行的sql:update users set email="66666666qq.com" where email="99999999qq.com" and id =5
usersMapper.update(setUser,updateWrapper);
}
1:根据 ID 查询
@Test
public void select1(){
Users user = usersMapper.selectById(5);
}
2:查询(根据ID 批量查询)
@Test
public void select2(){
List ids = new ArrayList();
List list = usersMapper.selectBatchIds(ids);
System.out.println(list.size());
}
3:查询(根据 columnMap 条件)
columnMap的key必须为字段名
@Test
public void select3(){
Map columnMap = new HashMap();
List list = usersMapper.selectByMap(columnMap);
System.out.println(list.size());
}
4:根据 entity 条件,查询一条记录
@Test
public void select4(){
Users whereUser = new Users();
whereUser.setEmail("[email protected]");
whereUser.setPwd("123");
Wrapper queryWrapper = new QueryWrapper(whereUser);
Users user = usersMapper.selectOne(queryWrapper);
System.out.println(user);
}
5:根据 entity 条件,查询全部记录
@Test
public void select5(){
Users whereUser = new Users();
whereUser.setEmail("[email protected]");
whereUser.setPwd("123");
Wrapper queryWrapper = new QueryWrapper(whereUser);
List users = usersMapper.selectList(queryWrapper);
System.out.println(users.size());
}
6:条件+分页查询
首先:配置拦截器,该拦截器可以拦截selectPage方法,并实现物理分页
/**
*分页查询拦截器
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
其次:调用selectPage方法
@Test
public void select6(){
//分页信息
int pageNow = 1;//当前页
int pageSize = 2;//每页显示2条
IPage page = new Page(pageNow,pageSize);
//条件
Users whereUser = new Users();
QueryWrapper queryWrapper = new QueryWrapper(whereUser);
//模糊查询
queryWrapper.like("username","ja");
//执行
IPage usersIPage = usersMapper.selectPage(page, queryWrapper);
//获取查询结果
long pages = usersIPage.getPages();//总页数
List users = usersIPage.getRecords();//当前页数据
long total = usersIPage.getTotal();//获取总记录数
}