日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

通用返回_Springboot项目整合通用mapper

發布時間:2023/12/10 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通用返回_Springboot项目整合通用mapper 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

  • 什么是通用mapper

什么是通用mapper,用一句話概括就是,它就是一個輔助mybatis開發的組件,它不是替代mybatis,而是使mybatis更方便的開發。通用mapper提供極其方便的單表的增刪改查,可以按照自己的需要使用通用方法,還能很方便開發自己的通用方法。

  • 為什么使用通用,apper

原生Mybatis痛點

  • mapper.xml文件里有大量的sql,當數據庫表字段變動,配置文件就要修改
  • 需要自己實現sql分頁,select * from table where . . . limit 1,3。自己手寫分頁,除了傳參page、pageSize,還需要返回條目總數count。
  • 數據庫可移植性差:如果項目更換數據庫,比如oracle-->mysql,mapper.xml中的sql要重新寫,因為Oracle的PLSQL 和mysql 支持的函數是不同的。
  • 生成的代碼量過大。
  • 批量操作,批量插入,批量更新,需要自寫。
  • 2.SpringBoot項目中整合通用Mapper

    • 引入jar包
    <!-- 引入通用mapper--><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency>
    • 啟動類上加上@MapperScan掃描注解
    @SpringBootApplication @MapperScan("com.sangon.springdemo.mapper") @EnableScheduling public class TimedTaskApplication {public static void main(String[] args) {SpringApplication.run(TimedTaskApplication.class, args);} }

    注意導入的包是tk.......

    • 實體類
    @Data @Table(name = "student") public class Student {@Idprivate String id;private String name;private Integer age; }

    @Table注解

    注解中的name屬性綁定的是數據庫中對應的表名稱

    @Id注解

    在字段上加上此注解說明此字段為主鍵

    • 編寫mapper
    public interface StudentMapper extends Mapper<Student> { }

    新建接口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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。