摘要:解決這個問題方案是定義一份結果映射文件如下所示動態(tài)的注解對于動態(tài),提供了不同的注解,用法如下所示首先創(chuàng)建一個類使用類但是使用字符串連接創(chuàng)建語句容易出現(xiàn)問題,所以提供了一個工具,簡化了構建動態(tài)的方式如下所示或者
結果集分頁
有時我們需要處理海量數(shù)據(jù),由于數(shù)據(jù)量太大,所以不能一次取出所有的數(shù)據(jù),這時我們就需要使用分頁功能。mybatis通過RowBounds對象提供對分頁的支持,如下所示: int offset=0;//開始位置 int limit=25;//取出的數(shù)據(jù)條數(shù) 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()); } })
緩存對于很多應用來說都是很重要的,因為它能提高系統(tǒng)的性能。mybatis內(nèi)建了緩存支持,默認情況下,一級緩存是打開的,即如果你使用相同的sqlSession接口調(diào)用相同的select查詢,查詢結果從緩存中取得而不是去查詢數(shù)據(jù)庫。 也可以通過注解@Insert @Update @Select @ Delete標簽配置二級緩存。當配置了二級緩存后,也就意味著所有的查詢結果都會被緩存,insert,update,delete語句會更新緩存,cache的緩存管理算法是LRU。除了內(nèi)建的緩存之外,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); 結果注解有一個缺點,就是在一個查詢方法前面都要寫一遍,不能重用。解決這個問題方案是: 定義一份結果映射文件如下所示:動態(tài)Sql的注解....... @Select("select name,email,phone from students where stud_id=#{studId}") @ResultMap("com.mybatis3.mappers.StudentMapper.StudentResult") Student findStudentById(Integer studId);
對于動態(tài)sql,mybatis提供了不同的注解,@InsertProvider @UpdateProvider @DeleteProvider @SelectProvider 用法如下所示: 首先創(chuàng)建一個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); 但是使用字符串連接創(chuàng)建sql語句容易出現(xiàn)問題,所以mybatis提供了一個SQL工具,簡化了構建動態(tài)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(); } }
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70208.html
摘要:執(zhí)行沒有,批處理不支持,將所有都添加到批處理中,等待統(tǒng)一執(zhí)行,它緩存了多個對象,每個對象都是完畢后,等待逐一執(zhí)行批處理。 Mybatis常見面試題 #{}和${}的區(qū)別是什么? #{}和${}的區(qū)別是什么? 在Mybatis中,有兩種占位符 #{}解析傳遞進來的參數(shù)數(shù)據(jù) ${}對傳遞進來的參數(shù)原樣拼接在SQL中 #{}是預編譯處理,${}是字符串替換。 使用#{}可以有效的防止...
摘要:最終能和面試官聊的開心愉快投緣的叫面霸。能夠與很好的集成提供映射標簽,支持對象與數(shù)據(jù)庫的字段關系映射提供對象關系映射標簽,支持對象關系組件維護。使用可以有效的防止注入,提高系統(tǒng)安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面試,難還是不難?取決于面試者的底蘊(氣場+技能)、心態(tài)和認知及溝通技巧。...
摘要:跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來期間也沒有準備充分,到底是因為技術原因影響自己的發(fā)展,偏移自己規(guī)劃的軌跡,還是錢給少了,不受重視。 跳槽時時刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),到底是因為技...
摘要:語句在代碼中硬編碼,造成代碼不易于維護,實際應用變化的可能較大,變動需要改變代碼。對結果集解析存在硬編碼查詢列名,變化導致解析代碼變化,系統(tǒng)不易于維護,如果能將數(shù)據(jù)庫記錄封裝成對象解析比較方便。 MyBatis理解與掌握(簡介) @(MyBatis)[Java, 框架, MyBatis] 簡介 ??Mybatis是一個數(shù)據(jù)持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手...
摘要:提供映射標簽,支持對象與數(shù)據(jù)庫的字段關系映射提供對象關系映射標簽,支持對象關系組建維護提供標簽,支持編寫動態(tài)。層實現(xiàn)類添加更新刪除根據(jù)查詢查詢所有的層構建測試結果其他接口已通過測試,無問題。 微信公眾號:一個優(yōu)秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,本文通過注解的形式...
閱讀 3243·2021-11-24 10:43
閱讀 4205·2021-11-24 10:33
閱讀 3782·2021-11-22 09:34
閱讀 2134·2021-10-11 10:58
閱讀 3754·2021-10-11 10:58
閱讀 866·2021-09-27 13:36
閱讀 3585·2019-08-30 15:54
閱讀 2974·2019-08-29 18:41