MyBatis 技术最好最详细的入门学习资料
luoli
贡献于2012-08-06
34534
24
0
MyBatis 技术最好最详细的入门学习资料
下载需要
10
金币
[ 金币充值 ]
服务器/托管费、人工审核、技术维护等都需要很多费用,请您支持深度开源的发展
下载PPT
标签:
MyBatis3
持久层框架
Apache
HTTP
Go
PPT 内容
1. MyBatis的前世今生 MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis。
2. MyBatis介绍MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。 MyBatis的优点:1.基于SQL语法,简单易学。2.能了解底层组装过程。 3.SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。4.程序调试方便。
3. 与传统JDBC的比较减少了61%的代码量 最简单的持久化框架 架构级性能增强 SQL代码从程序代码中彻底分离,可重用 增强了项目中的分工 增强了移植性
4. JDBC 与 MyBatis直观对比 MyBatis 就是将上面这几行代码分解包装: 前两行是对数据库的数据源的管理包括事务管理, 3、4 两行MyBatis通过配置文件来管理 SQL 以及输入参数的映射, 6、7、8 行MyBatis获取返回结果到 Java 对象的映射,也是通过配置文件管理。
5. 与Hibernate的对比 MyBatis 1、是一个SQL语句映射的框架(工具) 2、注重POJO与SQL之间的映射关系。不会为程序员在运行期自动生成 SQL 3、自动化程度低、手工映射SQL,灵活程度高. 4、需要开发人员熟炼掌据SQL语句 Hibernate 1、主流的ORM框架、提供了从 POJO 到数据库表的全套映射机制 2、会自动生成全套SQL语句。 3、因为自动化程度高、映射配置复杂,api也相对复杂,灵活性低. 4、开发人同不必关注SQL底层语句开发
6. MyBatis与Hibernate的比较Hibernate的映射关系:
7. MyBatis与Hibernate的比较MyBatis的映射关系:
8. MyBatis工作流程
9. MyBatis基本要素 一、configuration.xml 全局配置文件 二、mapper.xml 核心映射文件 三、SqlSession接口
10. 基础配置文件configuration.xmlconfiguration.xml是系统的核心配置文件,包含数据源和事务管理器等设置和属性信息,XML文档结构如下: configuration 配置 properties 可以配置在Java 属性配置文件中 settings 修改 MyBatis 在运行时的行为方式 typeAliases 为 Java 类型命名一个短的名字 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 mappers 映射器
11. 基础配置文件—环境配置配置环境
……
12. 基础配置文件—事务管理MyBatis 有两种事务管理类型: JDBC - 这个类型直接全部使用 JDBC 的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域。 MANAGED - 这个类型什么不做 , 它从不提交 、 回滚和关闭连接 。 而是让窗口来管理事务的全部生命周期 。(比如说 Spring 或者 JAVAEE 服务器)
13. 基础配置文件—数据源数据源类型有三种: UNPOOLED , POOLED , JNDI 。 UNPOOLED - 这个数据源实现只是在每次请求的时候简单的打开和关闭一个连接。虽然这有点慢,但作为一些不需要性能和立即响应的简单应用来说 , 不失为一种好选择 。 POOLED - 这个数据源缓存 JDBC 连接对象用于避免每次都要连接和生成连接实例而需要的验证时间 。对于并发 WEB 应用,这种方式非常流行因为它有最快的响应时间。 JNDI - 这个数据源实现是为了准备和 Spring 或应用服务一起使用,可以在外部也可以在内部配置这个数据源,然后在 JNDI 上下文中引用它。这个数据源配置只需要两上属性:
14. 基础配置文件—SQL映射文件SQL映射文件: //1.使用相对路径
// 2.使用全路径
15. SQL映射文件 SQL 映射文件结构: cache - 配置给定命名空间的缓存。 cache-ref – 从其他命名空间引用缓存配置。 resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载对象。 sql – 可以重用的 SQL 块,也可以被其他语句引用。 insert – 映射插入语句 update – 映射更新语句 delete – 映射删除语句 select – 映射查询语句
16. SQL映射文件Select
select * from Blog where id = #{id}
使用完全限定名调用映射语句 1.Blog blog = (Blog) session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101); String blogName=blog.getBlogName();
17. 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);
18. SQL映射文件Insert
insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio})
主键策略: 如果使用的数据库支持自动生成主键,那么就可以设置 useGeneratedKeys= ” true ” ,然后 把keyProperty 设成对应的列。
insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio})
19. SQL映射文件Update
Delete
delete from Author where id = #{id}
20. 动态SQLMyBatis 的一个强大的特性之一通常是它的动态 SQL 能力 if choose(when,otherwise) trim(where,set) foreach
21. SQL映射文件SQL: 这个元素用来定义一个可以复用的 SQL 语句段,供其它语句调用。比如:
id,username,password
这个语句块,可以包含到别的语句中,比如:
select
from some_table where id = #{id}
22. 动态SQLIf
SELECT * FROM BLOG WHERE state = “ACTIVE”
AND title like #{title}
AND title like #{author.name}
23. 动态SQLwhere
SELECT * FROM BLOG
state = #{state}
AND title like #{title}
24. 缓存—cache缓存技术是一种“以空间换时间”的设计理念,利用内存空间资源来提高数据检索速度的有效手段之一。 MyBatis默认情况下是没有开启缓存的,除了局部的 session 缓存。要开启二级缓存,你需要在你的 SQL映射文件中添加一行:
25. 缓存—cache例如:
这个配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存取512 个结果对象或列表的引用,而且返回的对象为只读,因此在不同线程中的调用者之间修改它们会导致冲突。
26. 缓存—cache可用的收回策略 LRU – 最近最少使用的:移除最长时间不被使用的对象; FIFO – 先进先出:按对象进入缓存的顺序来移除它; SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象; WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象; 默认的是 LRU。
27. 核心接口和类的结构
28. 核心类的生命周期 SqlSessionFactoryBuilder的生命周期: 这个类可以被初始 、 使用和丢弃 , 如果你已经创建好了一个 SqlSessionFactory 后就不用再保留它 。 因此 ,SqlSessionFactoryBuilder 的最好作用域是方法体内,比如说定义一个方法变量。你可以重复使 用SqlSessionFactoryBuilder 生成多个SqlSessionFactory 实例 , 但是最好不要强行保留 , 因为 XML 的解析资源要用来做其它更重要的事。
29. SqlSessionFactory的生命周期 SqlSessionFactory: 一旦创建, SqlSessionFactory 就会在整个应用过程中始终存在。所以没有理由去销毁和再创建它,一个应用运行中也不建议多次创建 SqlSessionFactory 。 如果真的那样做 , 会显得很拙劣 。 因此 SqlSessionFactor y最好的作用域是 Application 。可以有多种方法实现。最简单的方法是单例模式或者是静态单例模式 。 然而这既不是广泛赞成和好用的 。 反而 , 使用 Google Guice 或 Spring 来进行依赖反射会更好 。 这些框架允许你生成管理器来管理 SqlSessionFactory 的单例生命周期。
30. SqlSession的生命周期SqlSession: 每个线程都有自己的 SqlSession 实例, SqlSession 实例是不能被共享,也是不是线程安全的。因此最好使用 Request 作用域或者方法体作用域。不要使用类的静态变量来引用一个 SqlSession 实例,甚至不要使用类的一个实例变更来引用。如果你正在使用 WEB 框架,应该让 SqlSession 跟随 HTTP 请求的相似作用域。也就是说,在收到一个 HTTP 请求过后,打开 SqlSession ,等返回一个回应以后,立马关掉这个 SqlSession 。 关闭 SqlSession 是非常重要的。你必须要确保 SqlSession 在 finally 方法体中正常关闭。可以使用下面的标准方式来关闭: SqlSession session = sqlSessionFactory.openSession(); try { // do work } finally { session.close(); }
31. SqlSession接口 SqlSession 的获取方式: Reader reader = Resources.getResourceAsReader(“configuration.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession的使用: 调用insert,update,selectList,selectOne,delete等方法执行增删改查等操作。
32. SqlSession接口 主要方法新增: int insert(String statement, Object parameter) 修改: int update(String statement, Object parameter) 删除: int delete(String statement, Object parameter) 查询: List selectList(String statement, Object parameter)
33. sqlSession方法调用实例public List find(String sqlId, Object param) throws MybatisException { SqlSession sqlSession=sqlSessionFactory.openSession(); try { List list=sqlSession.selectList(sqlId, param); if(list!=null){ return list; }else{ return new ArrayList(); } }catch (RuntimeException e) { e.printStackTrace(); throw new MybatisException(HsErrorMsg.SQL_ERROR,"sqlId:"+sqlId); } finally{ sqlSession.close(); } }
34. 技巧分享提取SQL的方法: Configuration configuration = sqlSession.getConfiguration(); MappedStatement ms = configuration.getMappedStatement(sqlId); BoundSql boundSql = ms.getBoundSql(param); String sql = boundSql.getSql(); 可以用于自定义打印日志
35. 技巧分享分页方法: sqlSession:selectList(String statement, Object parameter, RowBounds rowBounds) RowBounds(int offset, int limit) int startRow=(pageNo-1)*pageSize; RowBounds rowBounds=new RowBounds(startRow,pageSize); List list=sqlSession.selectList(sqlId, param,rowBounds);
PPT 图集
相关PPT
MyBatis 技术最好最详细的入门学习资料
Java学习入门资料
BOS最佳入门_整体介绍
Memcached 入门资料
最好的spring学习
lucene 初级学习资料
lucene 初级学习资料
lucene 初级学习资料
网络安全技术
Spring2.5的学习资料