插入操作:
public void testInsert(){
User user = new User();
user.setUserName("zlprime");
user.setPassword("zlprime");
user.setAge(18);
//public int insert(T entity);
//使用insert方法,会返回数据库中受影响的行数
int result = userMapper.insert(user);
//添加完成之后,mybatis plus会将新增的主键自动封装到之前的实体类中
//所以,可以通过实体类的get方法获取新增之后的主键
System.out.println(user.getId());
}
@TableField注解
在实体类中我们的属性名一般是驼峰命名形式,例如userName,而在数据库中我们的字段名可能是这样的user_name。如果是这种情况,mybatis plus会自动将我们实体类中的userName属性,映射到数据库中的user_name字段,无需我们额外操作。但是,如果不是以驼峰命名法进行命名,或者出现其它无法映射的情况,就可能会出现问题。而TableField注解就是为了解决这个问题的
/**
* @TableField
* 1.解决对象中的属性名和数据表中的字段名无法对应的情况
* 2.解决对象中的属性字段在数据表中不存在的问题
*/
@TableId(type = IdType.AUTO)
private BigInteger id;
private String userName;
@TableField(value = "password",select = false)
//value = "password"指定数据库表中的字段名。即属性 passWord与字段password对应
//select = false 表示在执行查询操作的时候,不查询改属性对应的数据
private String passWord;
private Integer age;
private String name;
private String email;
@TableField(exist = false)
//表示这个属性,在数据库中是没有字段与之对应的
//因此在执行更新、插入等操作时,不会操作该字段
private String address; //address属性在数据表中是不存在的,没有字段可以跟其对应
更新操作
根据ID进行更新
User user = new User();
user.setUserName("zlprime");
user.setPassWord("zlprime");
user.setAge(18);
user.setId(1L); //更新条件
/*
* public int updateById(@Param("et") T entity);
* 将id信息封装到对象中,更新时会根据该id在数据表中查询到对应的数据行
* 并将改行的数据更新成对象中封装的数据
* 最后返回被影响的行数
* */
int result = userMapper.updateById(user);
根据条件进行更新
User user = new User();
user.setUserName("zlprime");
user.setPassWord("zlprime");
user.setAge(18);
user.setId(1L); //更新条件
/*
* QueryWrapper的eq方法设置更新条件。其中第一个参数是数据表中的字段名
* */
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_name","zlprime") //意思就是 user_name ='zlprime'
.eq("password","zlprime"); //意思就是 password='zlprime'
/*
* 根据条件进行更新
* public int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
* T 表示要更新的数据
* Wrapper<T> wrapper对象中,则封装了更新的条件
* */
userMapper.update(user,queryWrapper);
除了上面的QueryWrapper,Wrapper还有一个实现类是UpdateWrapper:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("user_name","zlpriem") //通过set方法设置需要更新数据
.eq("id",1); //通过eq方法设置更新的条件
//由于已经将需要更新的数据封装到UpdateWrapper中了,所以update方法的第一个参数不需要再传入了。用null代替
userMapper.update(null,updateWrapper);
QueryWrapper和UpdateWrapper的区别是,前者只设置更新条件,后者不但能设置更新条件还能封装需要更新的数据。
删除操作
根据ID进行删除
/*
* public int deleteById(Serializable id);
* 根据ID删除数据,返回的是受影响的行数
* */
int id = userMapper.deleteById(1L);
将删除条件封装到Map集合中
/*
* 创建一个Map集合,将条件添加到集合中
* */
Map<String,Object> map = new HashMap<>();
map.put("user_name","zlprime");
map.put("password","zlprime");
/*
* public int deleteByMap(@Param("cm") Map<String, Object> columnMap);
* 根据map集合中封装的条件去删除数据
* 多条件之间是and关系
* 返回的结果是受影响的行数
* */
int i = userMapper.deleteByMap(map);
根据Wrapper条件进行删除
将要删除的数据所要求的条件放在Wrapper对象中,再根据这个对象中的条件进行删除
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_name","zlprime")
.eq("name","zlprime"); //根据包装的条件进行删除
/*
* public int delete(@Param("ew") Wrapper<T> wrapper);
* 返回的是受影响的行数
* */
int result = userMapper.delete(wrapper);
批量删除
/*
* public int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
* 参数是一个集合,将要删除的id放到集合中
* 返回的是受影响的行数
* */
ArrayList<Long> idList = new ArrayList<>();
idList.add(1L);
idList.add(2L);
int result = userMapper.deleteBatchIds(idList);
System.out.println(result);
查询操作
根据ID查询
/*
* public T selectById(Serializable id);
* 参数是要查询的ID值
* 查询成功返回查询的对象,查询失败返回null
* */
User user = userMapper.selectById(4);
System.out.println(user);
批量查询
/*
* public List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
* 参数是一个集合,将要查询的id放到集合中
* 查询成功返回集合,失败返回null
* */
ArrayList<Long> idList = new ArrayList<>();
idList.add(3L);
idList.add(4L);
List<User> users = userMapper.selectBatchIds(idList);
System.out.println(users);
查询一条数据
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","王五");
/*
* 查询一条数据
* public T selectOne(@Param("ew") Wrapper<T> queryWrapper);
* 传入Wrapper包装的查询条件
* 如果查询到一条或数据不存在则返回正常
* 如果查询到多条则会抛出异常
* */
User user = userMapper.selectOne(wrapper);
查询数据的条数
/**
* 根据Wrapper条件,查询符合条件的数据条数
*/
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("password","123456"); //设置查询条件
/**
* public Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
* 传入条件,返回查询到的条数
*/
Integer count = userMapper.selectCount(wrapper);
查询数据列表
/**
* 根据Wrapper条件进行批量查询
*/
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("password","123456"); //设置查询条件
/**
* public List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
* 参数是Wrapper条件
* 返回值是List集合
*/
List<User> users = userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
分页查询
使用分页查询,首先要在SpringBoot的配置类中,配置Mybatis Plus的分页插件:
@Bean //配置分页插件
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
/**
* Page类的构造方法可以传入两个参数:
* @param current 当前页
* @param size 每页显示的条数
*/
Page<User> page = new Page<>(2,2);//第一页,每页显示两条数据
/**
* 设置查询条件
*/
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("password","123456"); //设置查询条件
/**
* public IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
* 调用selectPage方法,会返回一个IPage对象
* 这个对象中封装了查询到的数据总条数、总页数等信息
*/
IPage<User> iPage = userMapper.selectPage(page, wrapper);
System.out.println("数据总页数"+iPage.getPages()); //获取总页数
System.out.println("数据总条数"+iPage.getTotal()); //获取数据总条数
List<User> records = iPage.getRecords();//获取符合条件的数据集合
for (User record : records) {
System.out.println(record);
}
评论 (0)