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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美穿高跟鞋做爰 | 日产国产精品亚洲系列 | 国产日韩精品一区二区 | 公共场合高h短篇 | а天堂中文最新版在线 | 欧美人shou交在线播放 | 特级老女人淫片高清视频 | 美女靠逼免费视频 | 国产精品香蕉在线观看不卡 | 国产香蕉在线视频 | 我和黑色丝袜班主任 | 久久免费看少妇高潮A片特爽 | 亚洲第一天堂网 | 玩50岁四川熟女大白屁股直播 | 免费高清在线观看 | 欧美日韩一区不卡 | 男人与雌性宠物交啪啪小说 | 国产99er66在线视频 | 国产卡一卡二卡三乱码手机 | 成年人在线观看视频免费 | 成年人在线视频观看 | 天堂网www中文天堂在线 | 四虎影免看黄 | 四虎影库紧急大通知 | 美女光屁股网站 | 果冻传媒在线视频播放观看 | 国产欧美在线播放 | 99热这里只有精品国产免费 | 操久| 西野翔全部作品在线观看 | 桥本有菜作品在线 | 亚洲国产精品综合久久网络 | 成人3p视频免费 | 视频一区二区国产无限在线观看 | 超级碰碰青草免费视频92 | 乌克兰18sex性hd| 九九免费精品视频 | 日本免费不卡在线一区二区三区 | 四虎在线精品观看免费 | 性色欲情网站IWWW九文堂 | 504神宫寺奈绪大战黑人 |