zoukankan      html  css  js  c++  java
  • 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);
    	/**
    	 * 通用 删除操作
    	 */
    	@Test
    	public void testCommonDelete() {
    		//1 .根据id进行删除
    		Integer result = employeeMapper.deleteById(13);
    		System.out.println("result: " + result );
    		//2. 根据 条件进行删除,该方法与selectByMap类似,将条件封装在columnMap中,然后调用deleteByMap方法,传入columnMap即可,返回值是Integer类型,表示影响的行数。
    //		Map<String,Object> columnMap = new HashMap<>();
    //		columnMap.put("last_name", "MP");
    //		columnMap.put("email", "mp@atguigu.com");
    //		Integer result = employeeMapper.deleteByMap(columnMap);
    //		System.out.println("result: " + result );
    		
    		//3. 批量删除,该方法和selectBatchIds类似,把需要删除的记录的id装进idList,然后调用deleteBatchIds,传入idList即可。
    //		List<Integer> idList = new ArrayList<>();
    //		idList.add(3);
    //		idList.add(4);
    //		idList.add(5);
    //		Integer result = employeeMapper.deleteBatchIds(idList);
    //		System.out.println("result: " + result );
    	}
    	
    
  • 相关阅读:
    [转]Spring——jar包详解
    [转]Null value was assigned to a property of primitive type setter of"原因及解决方法
    [转]Spring3 MVC + jQuery easyUI 做的ajax版本用户管理
    [转]SpringMVC+Hibernate+Spring 简单的一个整合实例
    Spring MVC配置
    [转] 使用Spring MVC构建REST风格WEB应用
    NYOJ 467 中缀式变后缀式
    HBase源代码分析之HRegionServer上MemStore的flush处理流程(二)
    树中两个节点的最低公共祖先
    计算机图形学(一) 视频显示设备_1_CRT原理
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12469308.html
Copyright © 2011-2022 走看看