第5章MyBatis高级特性(理论)_第1页
第5章MyBatis高级特性(理论)_第2页
第5章MyBatis高级特性(理论)_第3页
第5章MyBatis高级特性(理论)_第4页
第5章MyBatis高级特性(理论)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5章章MyBatis高级特性高级特性本章内容本章内容uMybatis缓存缓存u使用存储过程使用存储过程u注解注解本章目标本章目标u理解理解Mybatis缓存原理缓存原理u掌握掌握Mybatis调用存储过程调用存储过程u了解了解Mybatis中的注解配置中的注解配置Mybatis的缓存机制的缓存机制u缓存技术是一种缓存技术是一种“以空间换时间以空间换时间”的设计理念,是利用的设计理念,是利用内存空间内存空间资源来提高数据检索速度的有效手段之一。资源来提高数据检索速度的有效手段之一。uMyBatis包含一个非常强大的查询缓存特性,可以非常方便地配置和包含一个非常强大的查询缓存特性,可以非常方便

2、地配置和定制。定制。nMyBatis默认没有开启缓存,除了局部的session缓存。要开启二级缓存,需要在SQL映射文件中添加一行 。Mybatis的缓存机制的缓存机制u缓存作用缓存作用(1)映射语句文件中的所有select 语句将会被缓存。 (2)映射语句文件中的所有insert、update和delete语句会刷新缓存。 (3)缓存会使用Least Recently Used(LRU,最近最少使用的)算法收回。 (4)根据时间表(如no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新。 (5)缓存会存储列表集合或对象(无论查询方法返回什么)的1024个引用。 (

3、6)缓存会被视为read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。Mybatis的缓存机制的缓存机制 u该更高级的配置创建了一个该更高级的配置创建了一个FIFO缓存,并每隔缓存,并每隔60秒刷新,存放结果对秒刷新,存放结果对象或列表的象或列表的512个引用,且返回的对象被认为是只读的,因此,在不同个引用,且返回的对象被认为是只读的,因此,在不同线程中的调用者之间修改它们会导致冲突。线程中的调用者之间修改它们会导致冲突。Mybatis的缓存机制的缓存机制属性名称属性名称描述描述eviction可用资源的回收策略

4、,主要包括以下几种:LRU:较少使用的、移除最长时间不被使用的对象。 FIFO(先进先出):按对象进入缓存的顺序将其移除。 SOFT(软引用):移除基于垃圾回收器状态和软引用规则的对象。 WEAK(弱引用):积极地移除基于垃圾收集器状态和弱引用规则的对象。默认为LRUflushInterval刷新间隔,可以被设置为任意的正整数,它们代表一个合理的毫秒形式的时间段。默认情况下不设置,即没有刷新间隔,缓存仅在调用语句时刷新size引用数目,可以被设置为任意正整数,要牢记缓存的对象数目和运行环境的可用内存资源数目。默认值为1024readOnly只读属性可以被设置为true或false。只读的缓存设

5、置会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。此处提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这样较为缓慢,但比较安全,因此默认为false存储过程的使用存储过程的使用u存储过程的优点:存储过程的优点:(1)存储过程只在创造时进行编译,以后每次执行存储过程都无须重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。(2)当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query和Delete时),可将此复杂操作用存储过程封装起来,还可与数据库提供的事务处理一同使用。(3)存储过程可以重复使用,可减

6、少数据库开发人员的工作量。(4)安全性高,可设定只有某些用户才具有对指定存储过程的使用权。在在Mybatis中使用存储过程中使用存储过程u在配置中添加如下语法格式:在配置中添加如下语法格式:n返回参数 = Call 存储过程名称(参数1,参数2.)在在Mybatis中使用存储过程中使用存储过程u返回参数:指在存储过程中通过返回参数:指在存储过程中通过return返回的值。返回的值。u参数的完整格式为:参数的完整格式为: #参数名, mode=参数类型, jdbcType = JDBC类型, javaType = Java类型, resultMap = 结果映射 在在Mybatis中使用存储过程

7、中使用存储过程u步骤步骤(1)创建存储过程(2)在映射SQL中配置存储过程 (3)在MyBatis中调用存储过程在在Mybatis中使用存储过程中使用存储过程u使用存储使用存储统计某用户发表博客的总篇数统计某用户发表博客的总篇数在在Mybatis中使用存储过程中使用存储过程(1)在)在SQL SERVER中创建如下存储过程:中创建如下存储过程:create procedure proc_getBlogCountByAuthor(username varchar(50),blogCount int output)asbegindeclare author_id int;select author

8、_id = ID from author where username = username;select blogCount = COUNT(ID) from blog where author_id = author_id;end;在在Mybatis中使用存储过程中使用存储过程(2) 在在BlogMapper.xml文件中添加如下配置信息:文件中添加如下配置信息:在在Mybatis中使用存储过程中使用存储过程u在在Mybatis中编写中编写Java代码调用存储过程,代码如下:代码调用存储过程,代码如下:public static void main(String args) SqlSess

9、ion sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();/创建map类型参数Map params = new HashMap();params.put(username, 张伟杰);/调用存储过程sqlSession.selectOne(getBlogCountByName,params);int count = (Integer)params.get(blogCount);System.out.println(count);注解配置注解配置uMyBatis 3构建在基于全面且强大的构建在基于全面且强大的Java配置配

10、置API上。该配置上。该配置API是是基于基于XML的的MyBatis配置的基础,也是新的基于注解配置的基础。配置的基础,也是新的基于注解配置的基础。u注解提供了一种简单的方式来实现简单映射语句,而不会引入大量注解提供了一种简单的方式来实现简单映射语句,而不会引入大量的开销。的开销。注解配置注解配置uMybatis中常用的注解中常用的注解注解注解目标目标对应的对应的XML标签标签CacheNamespace类CacheNamespaceRef类Results方法Result方法One方法Many 方法Insert Update Delete方法 InsertProviderUpdateProv

11、ider DeleteProvider SelectProvider方法 允许创建动态SQLParam 参数N/AOptions 方法映射语句的属性在在MyBatis中使用注解中使用注解/添加作者Insert(Insert into Author(username,password,email,address,phone) +values(#username,#password,#email,#address,#phone)Options(useGeneratedKeys=true,flushCache = false, timeout = 10000)public void addAutho

12、r(Author author);/删除作者Delete(delete from author where id = #id)Options(flushCache = false, timeout = 10000)public void deleteAuthor(Param(id) int id);在在MyBatis中使用注解中使用注解/查询所有作者信息查询所有作者信息Select(select * from author)Options(flushCache = false, timeout = 10000,useCache=true)Results(value = Result(id=tr

13、ue,column=id,property=id),Result(property=username,column=username),Result(property=password,column=password),Result(property=email,column=email),Result(property=address,column=address),Result(property=phone,column=phone)public List findAuthors();在在MyBatis中使用注解中使用注解/查询某作者信息Select(select * from autho

14、r where id = #id)Options(flushCache = false, timeout = 10000,useCache=true)Results(value = Result(id=true,column=id,property=id),Result(property=username,column=username),Result(property=password,column=password),Result(property=email,column=email),Result(property=address,column=address),Result(prop

15、erty=phone,column=phone)public Author findAuthorById(Param(id) int id);在在MyBatis中使用注解中使用注解uCacheNamespace(size = 512):定义在该命名空间内允许使用内置:定义在该命名空间内允许使用内置缓存缓存uOptions(useCache = true, flushCache = false, timeout = 10000):一些查询的选项开关一些查询的选项开关uParam(id):全局限定别名,定义查询参数在:全局限定别名,定义查询参数在sql语句中的位置不再语句中的位置不再是顺序下标是顺

16、序下标0,1,2,3.的形式,而是对应名称,该名称在此处定义。的形式,而是对应名称,该名称在此处定义。 uResults是以是以Result为元素的数组,为元素的数组,Result表示单条属性表示单条属性字段字段的映射关系,的映射关系,id = true表示该表示该id字段是主键,查询时字段是主键,查询时mybatis会给予必要会给予必要的优化。数组中所有的的优化。数组中所有的Result组成了单个记录的映射关系,而组成了单个记录的映射关系,而Results则是单个记录的集合。另外,还有一个非常重要的注解则是单个记录的集合。另外,还有一个非常重要的注解ResultMap,其与,其与Result

17、s类类似似uSelect(查询语句查询语句)、Insert(增加语句增加语句)、Update(更新语句更新语句)和和Delete(删除语句删除语句)表示对数据进行查询、添加、更新和删除的操作。表示对数据进行查询、添加、更新和删除的操作。在在MyBatis中使用注解中使用注解u测试注解的使用,实现数据的增加、删除、修改和查询。测试注解的使用,实现数据的增加、删除、修改和查询。在在MyBatis中使用注解中使用注解使用注解时,如何动态构建SQL语句?在在MyBatis中使用注解中使用注解public class AuthorSqlBuilder extends SqlBuilder /返回修改的s

18、ql语句public String updateAuthorSql( ) BEGIN();UPDATE(author);SET(username = #username);SET(password = #password);SET(email = #email);SET(address = #address);SET(phone = #phone);WHERE(id = #id);return SQL( );UpdateProvider(type=AuthorSqlBuilder.class,method=updateAuthorSql)测试注解使用测试注解使用/获取SqlSession工厂SqlSessionFactory factory = MyBatisUtil.getSqlSessionFactory();/注册映射器接口注册映射器接口factory.getConfiguration().addMapper(AuthorMapper.class);/获取SqlSession对象SqlSession sqlSession = factory.openSession();/获取映射器Author

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论