Mybatis Plus的通用crud
需求:
存在一張 tb_employee 表,且已有對應的實體類 Employee,實現tb_employee 表的 CRUD 操作我們需要做什麼呢?
基於 Mybatis:
需要編寫 EmployeeMapper 接口,並在 EmployeeMapper.xml 映射文件中手動編寫 CRUD 方法對應的sql語句。
基於 MP:
只需要創建 EmployeeMapper 接口, 並繼承 BaseMapper 接口。
我們已經有了Employee、tb_employee了,並且EmployeeDao也繼承了BaseMapper了,接下來就使用crud方法。
1 , Insert操作
執行添加操作,直接調用insert方法傳入實體即可。
@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("[email protected]");
employee.setGender(1);
employee.setAge(20);
emplopyeeDao.insert(employee);
//mybatisplus會自動把當前插入對象在數據庫中的id寫回到該實體中
System.out.println(employee.getId());
}
}
2 , update操作:
@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。
3、select操作 :
(1)、根據id查詢:
Employee employee = emplopyeeDao.selectById(1);
(2)、根據條件查詢一條數據:
Employee employeeCondition = new Employee();
employeeCondition.setId(1);
employeeCondition.setLastName("更新測試");
//若是數據庫中符合傳入的條件的記錄有多條,那就不能用這個方法,會報錯
Employee employee = emplopyeeDao.selectOne(employeeCondition);
注:這個方法的sql語句就是where id = 1 and last_name = 更新測試,若是符合這個條件的記錄不止一條,那麼就會報錯。
(3)、根據查詢條件返回多條數據:
當符合指定條件的記錄數有多條時,上面那個方法就會報錯,就應該用這個方法。
Map<String,Object> columnMap = new HashMap<>();
columnMap.put("last_name","東方不敗");//寫表中的列名
columnMap.put("gender","1");
List<Employee> employees = emplopyeeDao.selectByMap(columnMap);
System.out.println(employees.size());
注:查詢條件用map集合封裝,columnMap,寫的是數據表中的列名,而非實體類的屬性名。比如屬性名爲lastName,數據表中字段爲last_name,這裏應該寫的是last_name。selectByMap方法返回值用list集合接收。
(4)、通過id批量查詢:
List<Integer> idList = new ArrayList<>();
idList.add(1);
idList.add(2);
idList.add(3);
List<Employee> employees = emplopyeeDao.selectBatchIds(idList);
System.out.println(employees);
注:把需要查詢的id都add到list集合中,然後調用selectBatchIds方法,傳入該list集合即可,該方法返回的是對應id的所有記錄,所有返回值也是用list接收。
4、delete操作:
(1)、根據id刪除:
emplopyeeDao.deleteById(1);
(2)、根據條件刪除:
Map<String,Object> columnMap = new HashMap<>();
columnMap.put("gender",0);
columnMap.put("age",18);
emplopyeeDao.deleteByMap(columnMap);
注:該方法與selectByMap類似,將條件封裝在columnMap中,然後調用deleteByMap方法,傳入columnMap即可,返回值是Integer類型,表示影響的行數。
(3)、根據id批量刪除:
List<Integer> idList = new ArrayList<>();
idList.add(1);
idList.add(2);
emplopyeeDao.deleteBatchIds(idList);
注:該方法和selectBatchIds類似,把需要刪除的記錄的id裝進idList,然後調用deleteBatchIds,傳入idList即可。