国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 99精品欧美一区二区三区 | 欧美在线观看免费观看视频 | www.麻豆av| 国产99久久精品一区二区永久免费 | 亚洲精品偷拍自拍 | 中文字幕一区二区三区日韩精品 | 日韩中文一区二区三区 | 欧美.com| 亚洲毛片a | 一区二区三区久久久久 | 午夜视频导航 | 青青草原亚洲 | 天堂资源最新在线 | 日韩一二三 | 亚洲三级免费观看 | 后人极品翘臀美女在线播放 | 91一区二区三区 | 精品蜜桃一区二区三区 | 久久99精品久久久久久国产越南 | 91在线观| 精品美女 | 一区免费看 | 久草中文在线 | 色综合av | 久草中文在线 | 日韩电影网站 | 成人h动漫在线看 | 欧美日本韩国一区二区 | 日本中文字幕在线电影 | 黄色a视频在线观看 | 色网在线看 | 日韩精品网站 | 美日韩精品视频 | 黄色片视频免费观看 | 日韩综合一区 | 精品视频久久 | 999在线观看视频 | 在线观看不卡 | 日本久久久 | 欧美日韩中文字幕 | 在线观看免费黄色 |