Mybatis Plus 簡單實用

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即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章