【8A文】Mybatis基础教程

上传人:Jerm****014 文档编号:71048066 上传时间:2019-01-19 格式:PPT 页数:36 大小:489.50KB
返回 下载 相关 举报
【8A文】Mybatis基础教程_第1页
第1页 / 共36页
【8A文】Mybatis基础教程_第2页
第2页 / 共36页
【8A文】Mybatis基础教程_第3页
第3页 / 共36页
【8A文】Mybatis基础教程_第4页
第4页 / 共36页
【8A文】Mybatis基础教程_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《【8A文】Mybatis基础教程》由会员分享,可在线阅读,更多相关《【8A文】Mybatis基础教程(36页珍藏版)》请在金锄头文库上搜索。

1、Mybatis技术简介,,MyBatis的前世今生,MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis。,MyBatis介绍,MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。 MyBatis的优点: 1.基于SQL语法,简单易学。 2.能了解底层组装过程。 3.SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。 4.程序调试

2、方便。,与传统JDBC的比较,减少了61%的代码量 最简单的持久化框架 架构级性能增强 SQL代码从程序代码中彻底分离,可重用 增强了项目中的分工 增强了移植性,JDBC 与 MyBatis直观对比,MyBatis 就是将上面这几行代码分解包装: 前两行是对数据库的数据源的管理包括事务管理, 3、4 两行MyBatis通过配置文件来管理 SQL 以及输入参数的映射, 6、7、8 行MyBatis获取返回结果到 Java 对象的映射,也是通过配置文件管理。,与Hibernate的对比,MyBatis 1、是一个SQL语句映射的框架(工具) 2、注重POJO与SQL之间的映射关系。不会为程序员在运

3、行期自动生成 SQL 3、自动化程度低、手工映射SQL,灵活程度高. 4、需要开发人员熟炼掌据SQL语句,Hibernate 1、主流的ORM框架、提供了从 POJO 到数据库表的全套映射机制 2、会自动生成全套SQL语句。 3、因为自动化程度高、映射配置复杂,api也相对复杂,灵活性低. 4、开发人同不必关注SQL底层语句开发,MyBatis与Hibernate的比较,Hibernate的映射关系:,MyBatis与Hibernate的比较,MyBatis的映射关系:,MyBatis工作流程,MyBatis基本要素,一、configuration.xml 全局配置文件 二、mapper.xm

4、l 核心映射文件 三、SqlSession接口,基础配置文件configuration.xml,configuration.xml是系统的核心配置文件,包含数据源和事务管理器等设置和属性信息,XML文档结构如下: configuration 配置 properties 可以配置在Java 属性配置文件中 settings 修改 MyBatis 在运行时的行为方式 typeAliases 为 Java 类型命名一个短的名字 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 trans

5、actionManager 事务管理器 dataSource 数据源 mappers 映射器,基础配置文件环境配置,配置环境 ,基础配置文件事务管理,MyBatis 有两种事务管理类型: JDBC - 这个类型直接全部使用 JDBC 的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域。 MANAGED - 这个类型什么不做 , 它从不提交 、 回滚和关闭连接 。 而是让窗口来管理事务的全部生命周期 。(比如说 Spring 或者 JAVAEE 服务器),基础配置文件数据源,数据源类型有三种: UNPOOLED , POOLED , JNDI 。 UNPOOLED - 这个数据源实现只是

6、在每次请求的时候简单的打开和关闭一个连接。虽然这有点慢,但作为一些不需要性能和立即响应的简单应用来说 , 不失为一种好选择 。 POOLED - 这个数据源缓存 JDBC 连接对象用于避免每次都要连接和生成连接实例而需要的验证时间 。对于并发 WEB 应用,这种方式非常流行因为它有最快的响应时间。 JNDI - 这个数据源实现是为了准备和 Spring 或应用服务一起使用,可以在外部也可以在内部配置这个数据源,然后在 JNDI 上下文中引用它。这个数据源配置只需要两上属性:,基础配置文件SQL映射文件,SQL映射文件: /1.使用相对路径 / 2.使用全路径 ,SQL映射文件,SQL 映射文件

7、结构: cache - 配置给定命名空间的缓存。 cache-ref 从其他命名空间引用缓存配置。 resultMap 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载对象。 sql 可以重用的 SQL 块,也可以被其他语句引用。 insert 映射插入语句 update 映射更新语句 delete 映射删除语句 select 映射查询语句,SQL映射文件,Select select * from Blog where id = #id 使用完全限定名调用映射语句 1.Blog blog = (Blog) session.selectOne( “org.mybatis.examp

8、le.BlogMapper.selectBlog“, 101); String blogName=blog.getBlogName();,SQL映射文件,Select select * from Blog where id = #id 调用:Map map = (Map) session.selectOne( “org.mybatis.example.BlogMapper.selectBlog“, 101); String blogName=Map.get(“BLOG_NAME);,SQL映射文件,Insert insert into Author (id,username,password,

9、email,bio) values (#id,#username,#password,#email,#bio) 主键策略: 如果使用的数据库支持自动生成主键,那么就可以设置 useGeneratedKeys= ” true ” ,然后 把keyProperty 设成对应的列。 insert into Author (username,password,email,bio) values (#username,#password,#email,#bio) ,SQL映射文件,Update Delete delete from Author where id = #id ,动态SQL,MyBatis

10、 的一个强大的特性之一通常是它的动态 SQL 能力 if choose(when,otherwise) trim(where,set) foreach,SQL映射文件,SQL: 这个元素用来定义一个可以复用的 SQL 语句段,供其它语句调用。比如: id,username,password 这个语句块,可以包含到别的语句中,比如: select from some_table where id = #id ,动态SQL,If SELECT * FROM BLOG WHERE state = “ACTIVE” AND title like #title AND title like #autho

11、r.name ,动态SQL,where SELECT * FROM BLOG state = #state AND title like #title ,缓存cache,缓存技术是一种“以空间换时间”的设计理念,利用内存空间资源来提高数据检索速度的有效手段之一。 MyBatis默认情况下是没有开启缓存的,除了局部的 session 缓存。要开启二级缓存,你需要在你的 SQL映射文件中添加一行: ,缓存cache,例如: 这个配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存取512 个结果对象或列表的引用,而且返回的对象为只读,因此在不同线程中的调用者之间修改它们会导致冲突。,缓存cac

12、he,可用的收回策略 LRU 最近最少使用的:移除最长时间不被使用的对象; FIFO 先进先出:按对象进入缓存的顺序来移除它; SOFT 软引用:移除基于垃圾回收器状态和软引用规则的对象; WEAK 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象; 默认的是 LRU。,核心接口和类的结构,核心类的生命周期,SqlSessionFactoryBuilder的生命周期: 这个类可以被初始 、 使用和丢弃 , 如果你已经创建好了一个 SqlSessionFactory 后就不用再保留它 。 因此 ,SqlSessionFactoryBuilder 的最好作用域是方法体内,比如说定义一个方法

13、变量。你可以重复使 用SqlSessionFactoryBuilder 生成多个SqlSessionFactory 实例 , 但是最好不要强行保留 , 因为 XML 的解析资源要用来做其它更重要的事。,SqlSessionFactory的生命周期,SqlSessionFactory: 一旦创建, SqlSessionFactory 就会在整个应用过程中始终存在。所以没有理由去销毁和再创建它,一个应用运行中也不建议多次创建 SqlSessionFactory 。 如果真的那样做 , 会显得很拙劣 。 因此 SqlSessionFactor y最好的作用域是 Application 。可以有多种方

14、法实现。最简单的方法是单例模式或者是静态单例模式 。 然而这既不是广泛赞成和好用的 。 反而 , 使用 Google Guice 或 Spring 来进行依赖反射会更好 。 这些框架允许你生成管理器来管理 SqlSessionFactory 的单例生命周期。,SqlSession的生命周期,SqlSession: 每个线程都有自己的 SqlSession 实例, SqlSession 实例是不能被共享,也不是线程安全的。因此最好使用 Request 作用域或者方法体作用域。不要使用类的静态变量来引用一个 SqlSession 实例,甚至不要使用类的一个实例变更来引用。如果你正在使用 WEB 框

15、架,应该让 SqlSession 跟随 HTTP 请求的相似作用域。也就是说,在收到一个 HTTP 请求过后,打开 SqlSession ,等返回一个回应以后,立马关掉这个 SqlSession 。 关闭 SqlSession 是非常重要的。你必须要确保 SqlSession 在 finally 方法体中正常关闭。可以使用下面的标准方式来关闭: SqlSession session = sqlSessionFactory.openSession(); try / do work finally session.close(); ,SqlSession接口,SqlSession 的获取方式: R

16、eader reader = Resources.getResourceAsReader(“configuration.xml“); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession的使用: 调用insert,update,selectList,selectOne,delete等方法执行增删改查等操作。,SqlSession接口 主要方法,新增: int insert(String statement, Object parameter) 修改: int update(String

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号