MybatisPlus学习笔记3:Mybatis-Plus的通用CRUD

1、需求

需求:
存在一张 tb_employee 表,且已有对应的实体类 Employee,实现tb_employee 表的 CRUD 操作我们需要做什么呢?
基于 Mybatis:
需要编写 EmployeeMapper 接口,并在 EmployeeMapper.xml 映射文件中手动编写 CRUD 方法对应的sql语句。
基于 MP:
只需要创建 EmployeeMapper 接口, 并继承 BaseMapper 接口。
我们已经有了Employee、tb_employee了,并且EmployeeDao也继承了BaseMapper了,接下来就使用crud方法。

2、insert操作

插入操作
1) Integer insert(T entity);
2) @TableName
3) 全局的 MP 配置:
4) @TableField
5) 全局的 MP 配置:
6) @TableId
7) 全局的 MP 配置:
8) 支持主键自增的数据库插入数据获取主键值
Mybatis: 需要通过 useGeneratedKeys 以及 keyProperty 来设置
MP: 自动将主键值回写到实体类中
9) Integer insertAllColumn(T entity)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class test {
    @Autowired
    private EmplopyeeDao emplopyeeDao;
    @Test
    public void testInsert(){
        Employee employee = new Employee();
        employee.setLastName("东方不败");
        employee.setEmail("dfbb@163.com");
        employee.setGender(1);
        employee.setAge(20);
        emplopyeeDao.insert(employee);
        //mybatisplus会自动把当前插入对象在数据库中的id写回到该实体中
        System.out.println(employee.getId());
    }
}
@Test
    public void testCommonInsert() {
        
        //初始化Employee对象
        Employee employee  = new Employee();
        employee.setLastName("MP");
        employee.setEmail("mp@atguigu.com");
        //employee.setGender(1);
        //employee.setAge(22);
        employee.setSalary(20000.0);
        //插入到数据库   
        // insert方法在插入时, 会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中
        //Integer result = employeeMapper.insert(employee);  
        
        //insertAllColumn方法在插入时, 不管属性是否非空, 属性所对应的字段都会出现到SQL语句中. 
        Integer result = employeeMapper.insertAllColumn(employee);
        
        System.out.println("result: " + result );
        
        //获取当前数据在数据库中的主键值
        Integer key = employee.getId();
        System.out.println("key:" + key );
    }

3、update操作

更新操作
1) Integer updateById(@Param("et") T entity);
2) Integer updateAllColumnById(@Param("et") T entity)

@Test
public void testUpdate(){
        Employee employee = new Employee();
        employee.setId(1);
        employee.setLastName("更新测试");
        //emplopyeeDao.updateById(employee);//根据id进行更新,没有传值的属性就不会更新
        emplopyeeDao.updateAllColumnById(employee);//根据id进行更新,没传值的属性就更新为null
}

注意这两个update操作的区别,
updateById方法,没有传值的字段不会进行更新,比如只传入了lastName,那么age、gender等属性就会保留原来的值;
updateAllColumnById方法,顾名思义,会更新所有的列,没有传值的列会更新为null。

4、select操作

查询操作
1) T selectById(Serializable id);
2) T selectOne(@Param("ew") T entity);
3) List selectBatchIds(List<? extends Serializable> idList);
4) List selectByMap(@Param("cm") Map<String, Object> columnMap);
5) List selectPage(RowBounds rowBounds, @Param("ew") Wrapper wrapper);

/**
     * 通用 查询操作
     */
    @Test
    public void  testCommonSelect() {
        //1. 通过id查询
//      Employee employee = employeeMapper.selectById(7);
//      System.out.println(employee);
        
        //2. 通过多个列进行查询    id  +  lastName
//      Employee  employee = new Employee();
//      //employee.setId(7);
//      employee.setLastName("小泽老师");
//      employee.setGender(0);
//      
//      Employee result = employeeMapper.selectOne(employee);
//      System.out.println("result: " +result );
//      注:这个方法的sql语句就是where id = 1 and last_name = 更新测试,若是符合这个条件的记录不止一条,那么就会报错。
        
        //3. 通过多个id进行查询    <foreach>
//      List<Integer> idList = new ArrayList<>();
//      idList.add(4);
//      idList.add(5);
//      idList.add(6);
//      idList.add(7);
//      List<Employee> emps = employeeMapper.selectBatchIds(idList);
//      System.out.println(emps);
//注:把需要查询的id都add到list集合中,然后调用selectBatchIds方法,传入该list集合即可,该方法返回的是对应id的所有记录,所有返回值也是用list接收。
        
        //4. 通过Map封装条件查询
//      Map<String,Object> columnMap = new HashMap<>();
//      columnMap.put("last_name", "Tom");
//      columnMap.put("gender", 1);
//      
//      List<Employee> emps = employeeMapper.selectByMap(columnMap);
//      System.out.println(emps);
/*
注:查询条件用map集合封装,columnMap,写的是数据表中的列名,而非实体类的属性名。比如属性名为lastName,数据表中字段为last_name,这里应该写的是last_name。selectByMap方法返回值用list集合接收。
*/
        
        //5. 分页查询
        List<Employee> emps = employeeMapper.selectPage(new Page<>(3, 2), null);
        System.out.println(emps);
/*
注:selectPage方法就是分页查询,在page中传入分页信息,后者为null的分页条件,这里先让其为null,讲了条件构造器再说其用法。这个分页其实并不是物理分页,而是内存分页。也就是说,查询的时候并没有limit语句。等配置了分页插件后才可以实现真正的分页。
*/
    }
    

5、delete操作

删除操作
1) Integer deleteById(Serializable id);
2) Integer deleteByMap(@Param("cm") Map<String, Object> columnMap);
3) Integer deleteBatchIds(List<? extends Serializable> idList);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xidianzxm

您的打赏是我继续创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值