激情久久久_欧美视频区_成人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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜视频福利 | 欧美成人做爰高潮片免费视频 | 在线播放黄色网址 | 亚洲精品欧美在线 | 噜噜社| 成人福利软件 | 天天干天天透 | 午夜精品久久久久久中宇 | 国产91亚洲精品久久久 | 黄wwww| 嫩呦国产一区二区三区av | 成人毛片在线免费看 | 国产精品啪一品二区三区粉嫩 | 久久久毛片视频 | 亚州成人在线观看 | 噜噜噜影院 | 99ri精品| 毛片在线免费视频 | 在线成人免费观看 | 欧美一区二区精品夜夜嗨 | 欧美黄色片免费看 | 快播av在线| :国产精品成人一区二区三区 | 成人一区二区三区在线 | 亚洲欧美日韩综合一区 | 99精品国产一区二区三区 | 九色 在线 | 久久精国 | 伊人一二三四区 | av电影免费观看 | 国产日产精品一区二区三区四区 | 久久综合网址 | 亚洲aⅴ免费在线观看 | 好吊色欧美一区二区三区四区 | 欧美国产一区二区三区 | 国产精品视频不卡 | 国产成人在线看 | 99精品视频在线 | 国产色视频免费 | 91看片在线看片 | 国内久久久久 |