最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis中注解映射SQL示例代碼

 更新時間:2017年08月24日 10:16:30   作者:haofengpingjieli  
這篇文章主要給大家介紹了關于mybatis中注解映射SQL的相關資料,文中給出了詳細的示例代碼供大家參考學習,對大家的學習或者共組具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。

前言

本文主要給大家介紹了關于mybatis注解映射SQL的相關內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

結(jié)果集分頁

有時我們需要處理海量數(shù)據(jù),由于數(shù)據(jù)量太大,所以不能一次取出所有的數(shù)據(jù),這時我們就需要使用分頁功能。mybatis通過RowBounds對象提供對分頁的支持,如下所示:

<select id="findAllStudents" resultMap="StudentResult">
 select * from studdents
</select>
int offset=0;//開始位置
int limit=25;//取出的數(shù)據(jù)條數(shù)
RowBounds rowBounds=new RowBounds(offset,limit);
List<Student> list=studentMapper.findAllStudent(rowBounds);

結(jié)果處理器

有時我們需要對查詢結(jié)果做一些特殊的處理,這個時候就需要結(jié)果處理器,舉例如下,我們通過sql查詢學生的stud_id和name,并期望返回一個map,其中key是stud_id,value是name.

新建一個接口:

public interface ResultHandler
{
 void handleResult(ResultContext context);
}

主要處理流程:

Map<Integer , String> map=new HashMap<Integer,String>();
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查詢,查詢結(jié)果從緩存中取得而不是去查詢數(shù)據(jù)庫。

也可以通過<cache>標簽配置二級緩存。當配置了二級緩存后,也就意味著所有的查詢結(jié)果都會被緩存,insert,update,delete語句會更新緩存,cache的緩存管理算法是LRU。除了內(nèi)建的緩存之外,mybatis還整合了第三方緩存框架例如Ehcache等。

注解@Insert @Update @Select @ Delete

舉例說明注解的用法:

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);

結(jié)果注解

@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);

結(jié)果注解有一個缺點,就是在一個查詢方法前面都要寫一遍,不能重用。解決這個問題方案是:

定義一份結(jié)果映射文件如下所示:

<mapper namespace="com.mybatis3.mappers.StudentMapper">
<resultMap type="Student" id="StudentResult">
.......
</resultMap>

@Select("select name,email,phone from students where stud_id=#{studId}")
@ResultMap("com.mybatis3.mappers.StudentMapper.StudentResult")
Student findStudentById(Integer studId);

動態(tài)Sql的注解

對于動態(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工具,簡化了構(gòu)建動態(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();
  }
 } 

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Java字符串原理分析之String是否可變

    Java字符串原理分析之String是否可變

    當我們在求職時,面試官很喜歡問我們關于String的一些原理性知識,比如String的不可變性、字符串的內(nèi)存分配等,為了讓大家更好地應對面試,并理解String的底層設計,接下來會給大家聊聊String的一些原理,比如String為什么具有不可變性,需要的朋友可以參考下
    2023-05-05
  • Java接口異步調(diào)用

    Java接口異步調(diào)用

    這篇文章主要介紹了Java接口異步調(diào)用,下面我們來一起學習一下吧
    2019-05-05
  • Jmeter命令行執(zhí)行腳本如何設置動態(tài)參數(shù)

    Jmeter命令行執(zhí)行腳本如何設置動態(tài)參數(shù)

    這篇文章主要介紹了Jmeter命令行執(zhí)行腳本如何設置動態(tài)參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java實現(xiàn)RSA加密工具類

    Java實現(xiàn)RSA加密工具類

    這篇文章主要介紹了Java如何實現(xiàn)RSA加密工具類,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • 如何使用Java將word解析出來(包含格式和圖片)

    如何使用Java將word解析出來(包含格式和圖片)

    今天遇到一個讀取word模板內(nèi)容的需求,下面這篇文章主要給大家介紹了關于如何使用Java將word解析出來,包含格式和圖片,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Spring Bean初始化及銷毀多種實現(xiàn)方式

    Spring Bean初始化及銷毀多種實現(xiàn)方式

    這篇文章主要介紹了Spring Bean初始化及銷毀多種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Maven使用集成測試的示例代碼

    Maven使用集成測試的示例代碼

    本文介紹了在Maven項目中使用maven-failsafe-plugin插件進行集成測試,步驟包括添加測試依賴、編寫集成測試類、配置插件、運行測試以及查看和分析測試結(jié)果,感興趣的可以了解一下
    2024-11-11
  • java身份證合法性校驗并提取身份證有效信息

    java身份證合法性校驗并提取身份證有效信息

    這篇文章主要為大家詳細介紹了java身份證合法性校驗,并獲取并根據(jù)身份證號提取身份證相關信息,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • springboot讀取文件,打成jar包后訪問不到的解決

    springboot讀取文件,打成jar包后訪問不到的解決

    這篇文章主要介紹了springboot讀取文件,打成jar包后訪問不到的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring security認證兩類用戶代碼實例

    Spring security認證兩類用戶代碼實例

    這篇文章主要介紹了Spring security認證兩類用戶代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論

阿合奇县| 建德市| 若羌县| 北票市| 衡东县| 汉沽区| 花莲县| 西平县| 长垣县| 喀喇沁旗| 嘉荫县| 濉溪县| 津市市| 巴东县| 郎溪县| 连城县| 库尔勒市| 林西县| 洱源县| 天长市| 大新县| 丁青县| 德昌县| 子长县| 定南县| 宿迁市| 沁水县| 射阳县| 上杭县| 辽宁省| 广元市| 富蕴县| 毕节市| 万山特区| 敦化市| 监利县| 白山市| 疏勒县| 焦作市| 遵化市| 台东市|