javascript
通用返回_Springboot项目整合通用mapper
1.簡介
- 什么是通用mapper
什么是通用mapper,用一句話概括就是,它就是一個輔助mybatis開發的組件,它不是替代mybatis,而是使mybatis更方便的開發。通用mapper提供極其方便的單表的增刪改查,可以按照自己的需要使用通用方法,還能很方便開發自己的通用方法。
- 為什么使用通用,apper
原生Mybatis痛點
2.SpringBoot項目中整合通用Mapper
- 引入jar包
- 啟動類上加上@MapperScan掃描注解
注意導入的包是tk.......
- 實體類
@Table注解
注解中的name屬性綁定的是數據庫中對應的表名稱
@Id注解
在字段上加上此注解說明此字段為主鍵
- 編寫mapper
新建接口StudentMapper繼承Mapper<T>,泛型中就是Student實體類。
3.通用mapper的增刪改查
- 查詢
controller層
@RequestMapping(value = "/getStudent", method = RequestMethod.GET)public Student getStudentById(@RequestParam String id){return timedTaskService.getStudentById(id);}service層
/*** description: 根據主鍵id查詢數據(使用通用mapper)** @param id* @return com.sangon.springdemo.entity.Student*/public Student getStudentById(String id);impl:
@Autowiredprivate StudentMapper studentMapper;@Overridepublic Student getStudentById(String id) {Student student = studentMapper.selectByPrimaryKey(id);return student;}studentMapper.selectByPrimaryKey(id),根據主鍵id查詢Student信息
- 新增
controller層
@RequestMapping(value = "/insertStudent", method = RequestMethod.POST)public void insertStudent(@RequestParam String name, @RequestParam Integer age){timedTaskService.insertStudent(name, age);}service層
/*** description: 插入學生信息** @param name* @param age* @return void*/public void insertStudent(String name, Integer age);impl:
@Autowiredprivate StudentMapper studentMapper; @Overridepublic void insertStudent(String name, Integer age) {Student student = new Student();student.setId(UUIDUtils.getUuid());student.setName(name);student.setAge(age);studentMapper.insert(student);//studentMapper.insertSelective(student);}studentMapper.insert(student); 使用insert方法將學生信息插入數據
insert(): 插入
insertSelective(): 選擇性插入
兩個方法的區別:
使用插入時當字段值為空就將值為null插入數據,這個字段還是會參與插入
age字段為空,插入時的sql語句中該字段還是會參與
使用選擇性插入時字段是不會參與插入的
age字段為空,插入時的sql語句中該字段是不會參與的
- 修改
controller層
@RequestMapping(value = "/updateStudent", method = RequestMethod.PUT)public void updateStudent(@RequestBody Student student){timedTaskService.updateStudent(student);}service層
/*** description: 修改學生信息** @param student* @return void*/public void updateStudent(Student student);impl:
@Autowiredprivate StudentMapper studentMapper;@Overridepublic void updateStudent(Student student) {studentMapper.updateByPrimaryKey(student);//studentMapper.updateByPrimaryKeySelective(student);}非選擇性修改:updateByPrimaryKey(student);
如果student的值為null,表中的數據也會被修改為null。
選擇性修改:updateByPrimaryKeySelective(student);
如果student的值為null,表中的數據不會被修改為null,保持不變。
- 刪除
controller層
@RequestMapping(value = "/deleteStudent", method = RequestMethod.DELETE)public void deleteStudent(@RequestParam String id, @RequestParam String name, @RequestParam Integer age){timedTaskService.deleteStudent(id, name, age);}service層
/*** description: 刪除學生信息數據** @param id* @param name* @param age* @return void*/public void deleteStudent(String id, String name, Integer age);impl
@Overridepublic void deleteStudent(String id, String name, Integer age) {//studentMapper.deleteByPrimaryKey(id);Student student = new Student();student.setName(name);student.setAge(age);studentMapper.delete(student);}studentMapper.deleteByPrimaryKey(id);
2.根據非主鍵刪除
studentMapper.delete(student);
其中屬性之間使用and連接,比如上述例子中,刪除數據時必須同時滿足name和age兩個字段時這個數據才會被刪掉。
4.通用Mapper高階使用example
通用Mapper中的方法解析
| List select(T var1); | 根據實體中參數查詢返回滿足條件的集合數據 | 
| T selectByPrimaryKey(Object var1); | 根據主鍵id查詢返回該主鍵的數據 | 
| List selectByExample(Object var1); | 按條件查詢 | 
| List selectAll(); | 查詢所有數據返回數據的集合 | 
| List selectByExampleAndRowBounds(Object var1, RowBounds var2); | 根據Example類型參數條件和分頁參數查詢數據 | 
| List selectByRowBounds(T var1, RowBounds var2); | 根據參數條件和分頁參數查詢數據 | 
| int selectCount(T var1); | 根據篩選條件查詢匹配的數據的條數 | 
| int selectCountByExample(Object var1); | 根據Example篩選條件查詢匹配的數據的條數 | 
| T selectOne(T var1); | 根據篩選條件查詢唯一的數據并返回 | 
| T selectOneByExample(Object var1); | 根據Example篩選條件查詢唯一的數據并返回 | 
| int insert(T var1); | 插入數據 | 
| int insertSelective(T var1); | 選擇性插入數據 | 
| int updateByPrimaryKey(T var1); | 根據主鍵修改數據 | 
| int updateByPrimaryKeySelective(T var1); | 根據主鍵選擇性修改數據 | 
| int updateByExample(@Param("record") T var1, @Param("example") Object var2); | 根據Example參數修改數據 | 
| int updateByExampleSelective(@Param("record") T var1, @Param("example") Object var2); | 根據Example參數選擇性修改數據 | 
| int delete(T var1); | 刪除數據,里面參數會使用and進行拼接 | 
| int deleteByExample(Object var1); | 根據參數刪除數據 | 
| int deleteByPrimaryKey(Object var1); | 根據主鍵刪除數據 | 
| example.setOrderByClause(“字段名 ASC”); | 添加升序排列條件,DESC為降序 | 
| example.setDistinct(false) | 去除重復,boolean型,true為選擇不重復的記錄。 | 
| criteria.andXxxIsNull | 添加字段xxx為null的條件 | 
| criteria.andXxxIsNotNull | 添加字段xxx不為null的條件 | 
| criteria.andXxxEqualTo(value) | 添加xxx字段等于value條件 | 
| criteria.andXxxNotEqualTo(value) | 添加xxx字段不等于value條件 | 
| criteria.andXxxGreaterThan(value) | 添加xxx字段大于value條件 | 
| criteria.andXxxGreaterThanOrEqualTo(value) | 添加xxx字段大于等于value條件 | 
| criteria.andXxxLessThan(value) | 添加xxx字段小于value條件 | 
| criteria.andXxxLessThanOrEqualTo(value) | 添加xxx字段小于等于value條件 | 
| criteria.andXxxIn(List<?>) | 添加xxx字段值在List<?>條件 | 
| criteria.andXxxNotIn(List<?>) | 添加xxx字段值不在List<?>條件 | 
| criteria.andXxxLike(“%”+value+”%”) | 添加xxx字段值為value的模糊查詢條件 | 
| criteria.andXxxNotLike(“%”+value+”%”) | 添加xxx字段值不為value的模糊查詢條件 | 
| criteria.andXxxBetween(value1,value2) | 添加xxx字段值在value1和value2之間條件 | 
| criteria.andXxxNotBetween(value1,value2) | 添加xxx字段值不在value1和value2之間條件 | 
5.使用案例
@Overridepublic void parse() {Example example = new Example(Student.class);Example.Criteria criteria = example.createCriteria();// 添加篩選條件 年齡大于等于45criteria.andGreaterThanOrEqualTo("age", "45");// 添加分頁篩選條件RowBounds rowBounds = new RowBounds(0, 5);List<Student> studentList = studentMapper.selectByExampleAndRowBounds(example, rowBounds);for (Student student : studentList) {System.out.println("name:" + student.getName());}查出的數據就為年齡大于等于45的前五條數據。
@Overridepublic void parse() {Example example = new Example(Student.class);Example.Criteria criteria = example.createCriteria();// 添加查詢條件 根據id為f4ba6717fe054c5cbe1730aed4d64d51進行查詢criteria.andEqualTo("id", "f4ba6717fe054c5cbe1730aed4d64d51");// 查詢唯一的數據Student student = studentMapper.selectOneByExample(example);System.out.println("name:" + student.getName());}查出唯一一條數據,如果根據篩選條件查出的數據不是唯一的,則會報錯
@Overridepublic void parse() {Example example = new Example(Student.class);Example.Criteria criteria = example.createCriteria();// 創建篩選條件,查詢年齡在25到50之間的數據criteria.andBetween("age", 25, 50);List<Student> studentList = studentMapper.selectByExample(example);for (Student student : studentList) {System.out.println("name:" + student.getName());}}篩選的條件為根據字段age進行篩選,篩選出年齡在25-50之間的數據
6.寄語
之前在項目中使用過通用mapper,已經有些時間了,這里做了一下總結,歡迎小伙伴們進行指正。
不積硅步無以至千里,不積小流無以成江河
總結
以上是生活随笔為你收集整理的通用返回_Springboot项目整合通用mapper的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java enum in class_J
- 下一篇: 2000多年前中国豪车长啥样?用金银装饰
