一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - mybatis中注解映射SQL示例代碼

mybatis中注解映射SQL示例代碼

2020-12-20 14:37haofengpingjieli Java教程

這篇文章主要給大家介紹了關于mybatis中注解映射SQL的相關資料,文中給出了詳細的示例代碼供大家參考學習,對大家的學習或者共組具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。

前言

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

結果集分頁

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

?
1
2
3
4
5
6
7
<select id="findAllStudents" resultMap="StudentResult">
 select * from studdents
</select>
int offset=0;//開始位置
int limit=25;//取出的數據條數
RowBounds rowBounds=new RowBounds(offset,limit);
List<Student> list=studentMapper.findAllStudent(rowBounds);

結果處理器

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

新建一個接口:

?
1
2
3
4
public interface ResultHandler
{
 void handleResult(ResultContext context);
}

主要處理流程:

?
1
2
3
4
5
6
7
8
9
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());
 }
})

緩存

緩存對于很多應用來說都是很重要的,因為它能提高系統的性能。mybatis內建了緩存支持,默認情況下,一級緩存是打開的,即如果你使用相同的sqlSession接口調用相同的select查詢,查詢結果從緩存中取得而不是去查詢數據庫。

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

注解@Insert @Update @Select @ Delete

舉例說明注解的用法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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);

結果注解

?
1
2
3
4
5
6
7
8
@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);

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

定義一份結果映射文件如下所示:

?
1
2
3
4
5
6
7
8
<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);

動態Sql的注解

對于動態sql,mybatis提供了不同的注解,@InsertProvider @UpdateProvider @DeleteProvider @SelectProvider
用法如下所示:

首先創建一個provider類:

?
1
2
3
4
5
6
7
public class SqlProvider
{
 public String findTutorById(int tutorId)
 {
  return "select tutorId,name,email from tutors where tutorId="+tutorId;
 }
}

使用provider類:

?
1
2
@SelectProvider(type=SqlProvider.class,method="findTutorById")
Tutor findTutorById(int tutorId);

但是使用字符串連接創建sql語句容易出現問題,所以mybatis提供了一個SQL工具,簡化了構建動態Sql的方式;

如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
public class SqlProvider
{
 public String findTutorById(int tutorId)
 {
  return new SQL(){{
   SELECT("tutorid,name,email")
   FROM("tutors")
   WHERE("tutorid="+tutorId)
  }}.toString();
 }
}

或者 

?
1
2
3
4
5
6
7
8
9
10
11
public class SqlProvider
{
 public String findTutorById()
 {
  return new SQL(){{
   SELECT("tutorid,name,email")
   FROM("tutors")
   WHERE("tutorid=#{tutorId}")
  }}.toString();
 }
}

總結

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

原文鏈接:https://segmentfault.com/a/1190000010784360

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区风间由美在线观看 | 午夜视频一区二区三区 | 四虎影视网址 | 亚洲激情自拍偷拍 | 狠狠狠地啪香蕉 | 色综色天天综合网 | 青青青视频蜜桃一区二区 | 嫩草研究 | 国产一区二区视频免费 | 国产成人精选免费视频 | 欧亚精品一区二区三区 | video one 中国按摩 | 久久全国免费久久青青小草 | 亚洲冬月枫中文字幕在线看 | 亚洲高清中文字幕 | 国产成人高清精品免费5388密 | 久久亚洲电影www电影网 | 手机在线免费观看视频 | 91大神在线精品视频一区 | 欧美亚洲一区二区三区在线 | 男老头澡堂gay老头456 | 啊好大好粗 | 四虎4hu新地址入口 四虎1515h永久 | 掀开奶罩边躁狠狠躁软学生 | 精品福利一区二区免费视频 | 国产精品网页 | 99久久精品无码一区二区毛片 | 99视频免费在线 | 狠狠澡 | 传说之下羊妈挤羊奶网站 | 欧美视频在线一区 | 美女翘臀内疯狂进出 | 亚洲成综合人影院在院播放 | 欧美牛逼aa | 校服下的白嫩小乳尖h1v1 | 毛片群| 国产一区二区三区免费在线视频 | 拿捏小说| 久久综合给会久久狠狠狠 | 五月天色网站 | 非洲黑人gay巨大 |