持久层可以将业务数据存储到磁盘, 具备长期存储能力, 只要磁盘不损坏(大部分的重要数据都会有相关的备份机制), 在断电或者其他情况下, 重新开启系统仍然可以读取这些数据. 一般执行持久任务的都是数据库系统. 持久层可以使用巨大的磁盘空间, 也比较廉价, 它的确定就是比较慢.
Mybatis 成为 java 互联网时代首选的持久框架
原因:
1. 不屏蔽 SQL , 意味着可以更精确地定位 sql 语句, 可以对其进行优化和改造, 这有利于互联网系统性能的提高, 符合互联网需要性能优化的特点.
2. 提供强大, 灵活的映射机制, 方便 java 开发者使用. 提供动态的 sql 的功能, 允许我们根据不同条件组装 sql, 这个功能远比其他工具或 java 编码的可读性和可维护性高的多, 满足各种应用系统的同时也满足了需求经常变化的互联网应用的要求.
3. 在 mybatis 中, 提供使用了 Mapper 接口编程, 只要一个接口和一个 XML 就能创建映射器, 进一步简化我们的工作, 使得很多框架 API 在 mybatis 中消失, 开发者更集中于业务逻辑.
mybatis 核心组件
SqlSessionFactoryBuilder(构造器): 它会根据配置或者代码来生成 SqlSessionFactory, 采用的是分布构建的 Builder 模式.
SqlSessionFactory(工厂接口): 依靠它来生成 SqlSession, 使用的是工厂模式.
SqlSession(会话), 一个既可以发送 SQL 执行返回结果, 也可以获取 Mapper 的接口. 在现有技术中, 一般我们会让其在业务逻辑代码中 "消失", 而使用的是 MyBatis 提供的 SQL Mapper 接口编程技术, 他能提高代码的可读性和可维护性.
SQL Mapper(映射器):Mybatis 新设计存在的组件, 它由一个 java 接口和 XML 文件 (或注解) 构成, 需要给出对应的 SQL 和映射规则. 它负责 Sql 去执行, 并返回结果.
SqlSession
在 Mybatis 中有两个实现类, DefaultSqlSession 和 SqlSessionManager.
DefaultSqlSession 是单线程使用的
SqlSessionManager 是多线程使用的.
作用:
SqlSession 的作用类似于一个 JDBC 中的 Connection 对象, 代表着一个连接资源的启用.
1, 获取 Mapper 接口.
2, 发送 SQL 给数据库.
3, 控制数据库事务.
1, 创建 SqlSession
SqlSession sqlsession=SqlSessionFactory.openSession();1
2,SqlSession 控制数据库事务
// 定义 SqlSessionSqlSession sqlsession=null;try{ // 打开 SqlSession 会话 sqlsession=SqlSessionFactory.openSession(); //some code ... sqlsession.commit();// 提交事务}catch(Exception e){ sqlsession.rollback();}finally{ // 在 finally 语句中确保资源被顺利关闭 if(SqlSession!=null) sqlsession.close();}1234567891011121314
映射器
其有一个接口和对应的 xml 文件 ( 或注解 ) 组成.
它可以配置如下内容:
描述映射规则
提供 SQL 语句, 并可以配置 SQL 参数类型, 返回类型, 缓存刷新等信息.
配置缓存
提供动态 SQL
映射器的主要作用就是将 sql 查询到的结果映射为一个 POJO, 或者将 POJO 的数据插入到数据库中, 并定义一些关于缓存等重要内容
定义一个角色 POJO
public class Role{ private Long id; private String roleName; private String note; /*setter and getter*/}
来源: http://www.jianshu.com/p/a99b1de84cea