摘要:解決這個問題方案是定義一份結果映射文件如下所示動態的注解對于動態,提供了不同的注解,用法如下所示首先創建一個類使用類但是使用字符串連接創建語句容易出現問題,所以提供了一個工具,簡化了構建動態的方式如下所示或者
結果集分頁
有時我們需要處理海量數據,由于數據量太大,所以不能一次取出所有的數據,這時我們就需要使用分頁功能。mybatis通過RowBounds對象提供對分頁的支持,如下所示: int offset=0;//開始位置 int limit=25;//取出的數據條數 RowBounds rowBounds=new RowBounds(offset,limit); List結果處理器list=studentMapper.findAllStudent(rowBounds);
有時我們需要對查詢結果做一些特殊的處理,這個時候就需要結果處理器,舉例如下,我們通過sql查詢學生的stud_id和name,并期望返回一個map,其中key是stud_id,value是name. 新建一個接口: public interface ResultHandler { void handleResult(ResultContext context); } 主要處理流程: Map緩存map=new HashMap (); SqlSession sqlSession=MyBatisUtil.openSession(); sqlSession.select("com.mybatis3.mappers.StudentMapper.findAllStudents",new ResultHandler(){ public void handlerResult(ResultContext context) { Student student=(Student)context.getResultObject(); map.put(student.getStudId(),student.getName()); } })
緩存對于很多應用來說都是很重要的,因為它能提高系統的性能。mybatis內建了緩存支持,默認情況下,一級緩存是打開的,即如果你使用相同的sqlSession接口調用相同的select查詢,查詢結果從緩存中取得而不是去查詢數據庫。 也可以通過注解@Insert @Update @Select @ Delete標簽配置二級緩存。當配置了二級緩存后,也就意味著所有的查詢結果都會被緩存,insert,update,delete語句會更新緩存,cache的緩存管理算法是LRU。除了內建的緩存之外,mybatis還整合了第三方緩存框架例如Ehcache等。
舉例說明注解的用法: public interface StudentMapper { @Insert("insert into student (stud_id, name, email, addr_id, phone)values(#{studId},#{name},#{email},#{address.addrId},#{phone})") int insertStudent(Student student); } public interface StudentMapper { @Insert("insert into student (name,email,addr_id,phone)values(#{name},#{email},#{address.addrId},#{phone})") @Options(useGeneratedKeys=true,keyProperty="studId") int insertStudent(Student student); } public interface StudentMapper { @Insert("insert into student (name,email,addr_id,phone)values(#{name},#{email},#{address.addrId},#{phone})") @SelectKey(statement="select stud_id_seq.nextval from dual",keyProperty="studId",resultType=int.calss,before=true) int insertStudent(Student student); } @Update("update students set name=#{name},email=#{email}") int updateStudent(Student student); @Delete("delete form students where stud_id=#{studId}") int deleteStudent(int studId) @Select("select name,email,phone from students where stud_id=#{studId}") Student findStudentById(Integer studId);結果注解
@Select("select name,email,phone from students where stud_id=#{studId}") @Results({ @Result(id=true,column="stud_id",property="studId"), @Result(column="name",property="name"), @Result(column="email",property="email"), @Result(column="phone",property="phone") }) Student findStudentById(Integer studId); 結果注解有一個缺點,就是在一個查詢方法前面都要寫一遍,不能重用。解決這個問題方案是: 定義一份結果映射文件如下所示:動態Sql的注解....... @Select("select name,email,phone from students where stud_id=#{studId}") @ResultMap("com.mybatis3.mappers.StudentMapper.StudentResult") Student findStudentById(Integer studId);
對于動態sql,mybatis提供了不同的注解,@InsertProvider @UpdateProvider @DeleteProvider @SelectProvider 用法如下所示: 首先創建一個provider類: public class SqlProvider { public String findTutorById(int tutorId) { return "select tutorId,name,email from tutors where tutorId="+tutorId; } } 使用provider類: @SelectProvider(type=SqlProvider.class,method="findTutorById") Tutor findTutorById(int tutorId); 但是使用字符串連接創建sql語句容易出現問題,所以mybatis提供了一個SQL工具,簡化了構建動態Sql的方式; 如下所示: public class SqlProvider { public String findTutorById(int tutorId) { return new SQL(){{ SELECT("tutorid,name,email") FROM("tutors") WHERE("tutorid="+tutorId) }}.toString(); } } 或者 public class SqlProvider { public String findTutorById() { return new SQL(){{ SELECT("tutorid,name,email") FROM("tutors") WHERE("tutorid=#{tutorId}") }}.toString(); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70208.html
摘要:執行沒有,批處理不支持,將所有都添加到批處理中,等待統一執行,它緩存了多個對象,每個對象都是完畢后,等待逐一執行批處理。 Mybatis常見面試題 #{}和${}的區別是什么? #{}和${}的區別是什么? 在Mybatis中,有兩種占位符 #{}解析傳遞進來的參數數據 ${}對傳遞進來的參數原樣拼接在SQL中 #{}是預編譯處理,${}是字符串替換。 使用#{}可以有效的防止...
摘要:最終能和面試官聊的開心愉快投緣的叫面霸。能夠與很好的集成提供映射標簽,支持對象與數據庫的字段關系映射提供對象關系映射標簽,支持對象關系組件維護。使用可以有效的防止注入,提高系統安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面試,難還是不難?取決于面試者的底蘊(氣場+技能)、心態和認知及溝通技巧。...
摘要:跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準備充分,到底是因為技術原因影響自己的發展,偏移自己規劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技...
摘要:語句在代碼中硬編碼,造成代碼不易于維護,實際應用變化的可能較大,變動需要改變代碼。對結果集解析存在硬編碼查詢列名,變化導致解析代碼變化,系統不易于維護,如果能將數據庫記錄封裝成對象解析比較方便。 MyBatis理解與掌握(簡介) @(MyBatis)[Java, 框架, MyBatis] 簡介 ??Mybatis是一個數據持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數的手...
摘要:提供映射標簽,支持對象與數據庫的字段關系映射提供對象關系映射標簽,支持對象關系組建維護提供標簽,支持編寫動態。層實現類添加更新刪除根據查詢查詢所有的層構建測試結果其他接口已通過測試,無問題。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,本文通過注解的形式...
閱讀 3236·2021-11-24 10:43
閱讀 4197·2021-11-24 10:33
閱讀 3771·2021-11-22 09:34
閱讀 2125·2021-10-11 10:58
閱讀 3732·2021-10-11 10:58
閱讀 859·2021-09-27 13:36
閱讀 3579·2019-08-30 15:54
閱讀 2965·2019-08-29 18:41