MyBatis主要有几大核心类,了解并混个脸熟,方才称得上“入门MyBatis”。MyBatis主要的核心类包括:SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession,Executor,StatementHandler,ResultSetHandler。
1、SqlSessionFactoryBuilder每一个MyBatis的应用程序的入口是SqlSessionFactoryBuilder。它的作用是通过XML配置文件创建Configuration对象,然后通过build方法创建SqlSessionFactory对象。
public class App
{
public static void main(String[] args) throws Exception
{
// 读取mybatis-config.xml文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 初始化mybatis,创建SqlSessionFactory类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session实例
SqlSession session = sqlSessionFactory.openSession();
// 操作数据库方法一:获得xml映射文件中定义的操作语句
Person p = session.selectOne("cn.mybatis.mydemo.mapper.PersonMapper.selectPersonById", 1);
// 打印Peson对象
System.out.println(p);
// 操作数据库方法二:获得mapper接口的代理对象
PersonMapper pm = session.getMapper(PersonMapper.class);
// 直接调用接口的方法,查询id为1的Peson数据
Person p2 = pm.selectPersonById(1);
// 打印Peson对象
System.out.println(p2);
// 提交事务
session.commit();
// 关闭Session
session.close();
}
}没有必要每次访问Mybatis就创建一次SqlSessionFactoryBuilder,通常的做法是创建一个全局的对象就可以了。示例程序如下:
private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;
private static SqlSessionFactory sqlSessionFactory;
private static void init() throws IOException
{
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);
}2、SqlSessionFactorySqlSessionFactory的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。
3、SqlSessionSqlSession类的主要功能是完成一次数据库的访问和结果的映射,它类似于一次会话概念,顾命名为:SqlSession。
SqlSession类似于JDBC里面的Connection,Connection不是线程安全的,SqlSession也不是线程安全的。由于不是线程安全的,所以SqlSession对象的作用域需限制方法内。
SqlSession的默认实现类是DefaultSqlSession,它有两个必须配置的属性:Configuration和Executor。mybatis-config.xml中的配置,最后会解析xml成Configuration这个类。SqlSession对数据库的操作都是通过Executor来完成的。
SqlSession有一个重要的方法getMapper,顾名思义,这个方式是用来获取Mapper映射器的。
更多关于SqlSession的介绍,请参考:《MyBatis核心对象SqlSession介绍》
4、ExecutorExecutor对象在创建Configuration对象的时候创建,并且缓存在Configuration对象里。
Executor对象的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。
5、StatementHandlerStatementHandler是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。
6、ResultSetHandler处理查询结果。
7、MyBatis核心类工作流程
以上核心类,侧重于刻画数据库的交互过程,而在SQL封装以及动态SQL方面,还有两大核心类:MappedStatement和SqlSource。前者存储sql节点的属性,包括:id,resultMap,resultType,useCache等等;后者存储sql语句,实现动态sql的解析和处理。MyBatis核心类的整体介绍,请见下面小节。
8、MyBatis核心类层次&职责(详细版)
SqlSession,作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
Executor,MyBatis执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler,封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler,负责对用户传递的参数转换成JDBC Statement 所需要的参数
ResultSetHandler,负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler,负责Java数据类型和JDBC数据类型之间的映射和转换
MappedStatement,MappedStatement维护了一条select|update|delete|insert节点的封装
SqlSource,负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回BoundSql,表示动态生成的SQL语句以及相应的参数信息
Configuration,MyBatis所有的配置信息都维持在Configuration对象之中
- [世界杯]瑞士队训练备战新闻中心意见反馈留言板 新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 通行证注册 | 产品答疑 Copyright © 1996-2025...
- 如何将ppt背景图片保存下来内容导航:如何将ppt背景图片保存下来怎么把ppt的背景图保存下来ppt制作海报怎么保存一、如何将ppt背景图片保存下来ppt背景图可以直接打开母...
- 主流家庭影院播放器软件横向评比随着物质生活的富裕程度越来越高,很多人在购买新房子后,装修前都规划并预留了家庭影院系统的线路,并在装修完成后购买了文件服务器,来搭建...
- iPad / iPad Mini / iPad Pro / iPad Air / 如何恢复出厂设置和擦除数据当iPad出现问题时,大部分人想到的解决办法是重置iPad。那么具体操作方法是什么?小编在下文将详细介绍重置iPad的四种方式。 方法1:当您还...
- 中华人民共和国主席特使中華人民共和國主席特使,又稱国家主席特使,簡稱主席特使,是中華人民共和國設立的临时外交代表,為一種臨時性職務,在中華人民共和國...
- 试玩游戏(switch怎么试玩游戏)本篇文章给大家谈谈试玩游戏,以及靠谱的游戏试玩平台有哪些的知识点,希望对各位有所帮助,不要忘了收藏本站! 内容导航: 试玩游戏赚钱的...
- 原生广告原生广告(英语:Native advertising),又称原生行销,在2014年2月由美国Interactive Advertising Bureau(英语:Interactive Advertising Bureau)提出讨论,是网...
- 新手玩家如何选门派?《神武4》电脑版法系门派轻松入门!《神武4》电脑版共有13个门派,每个门派特色鲜明,并有着不同的定位,很多新手玩家在进入游戏后,不知道该选择哪个门派。作为一个过来人...
- 和讯网待遇(和讯网是干嘛的)本篇文章给大家谈谈和讯网待遇,以及和讯网是干嘛的对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 北京有个和讯网让我去面试...
- 俄罗斯放假时间及相关规定你是否想要了解俄罗斯的放假时间及相关规定?如果是,那么你来对地方了。在这篇文章中,我们将为您介绍俄罗斯的法定节假日及放假时间一...