持久层可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏(大部分的重要数据都会有相关的备份机制),在断电或者其他情况下,重新开启系统仍然可以读取这些数据。一般执行持久任务的都是数据库系统。持久层可以使用巨大的磁盘空间,也比较廉价,它的确定就是比较慢。
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对象,代表着一个连接资源的启用。
- 获取Mapper接口。
- 发送SQL给数据库。
- 控制数据库事务。
1、创建 SqlSession
SqlSession sqlsession=SqlSessionFactory.openSession();
1
2、SqlSession控制数据库事务
//定义SqlSession
SqlSession sqlsession=null;
try{
//打开SqlSession会话
sqlsession=SqlSessionFactory.openSession();
//some code ...
sqlsession.commit();//提交事务
}catch(Exception e){
sqlsession.rollback();
}finally{
//在finally语句中确保资源被顺利关闭
if(SqlSession!=null)
sqlsession.close();
}
映射器
其有一个接口和对应的 xml 文件( 或注解 )组成。
它可以配置如下内容:
- 描述映射规则
- 提供SQL语句,并可以配置SQL参数类型、返回类型、缓存刷新等信息。
- 配置缓存
- 提供动态SQL
映射器的主要作用就是将 sql 查询到的结果映射为一个 POJO,或者将 POJO的数据插入到数据库中,并定义一些关于缓存等重要内容
定义一个角色POJO
public class Role{
private Long id;
private String roleName;
private String note;
/*setter and getter*/
}