博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis--SqlSessionFactory概述及创建方式
阅读量:2442 次
发布时间:2019-05-10

本文共 2890 字,大约阅读时间需要 9 分钟。

SqlSessionFactory概述

使用 MyBatis 首先是使用配置或者代码去生产 SqlSessionFactory,而 MyBatis 提供了构造器 SqlSessionFactoryBuilder。

MyBatis提供了一个类org.apache.ibatis.session.Configuration 作为引导,采用的是 Builder 模式。具体的分步则是在 Configuration 类里面完成的。

在 MyBatis 中,既可以通过读取配置的 XML 文件的形式生成 SqlSessionFactory,也可以通过 Java 代码的形式去生成 SqlSessionFactory。

推荐采用 XML 的形式,因为代码的方式在需要修改的时候会比较麻烦。当配置了 XML 或者提供代码后,MyBatis 会读取配置文件,通过 Configuration 类对象构建整个 MyBatis 的上下文。

注意: SqlSessionFactory 是一个接口,在 MyBatis 中它存在两个实现类:SqlSessionManager 和 DefaultSqlSessionFactory。

一般而言,具体是由 DefaultSqlSessionFactory 去实现的,而 SqlSessionManager 使用在多线程的环境中,它的具体实现依靠 DefaultSqlSessionFactory,它们之间的关系如下图所示:

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,而 SqlSessionFactory 唯一的作用就是生产 MyBatis 的核心接口对象 SqlSession,所以它的责任是唯一的,往往会采用单例模式处理它。

使用 XML 构建 SqlSessionFactory

首先,在 MyBatis 中的 XML 分为两类,一类是基础配置文件,通常只有一个,主要是配置一些最基本的上下文参数和运行环境;另一类是映射文件,它可以配置映射关系、SQL、参数等信息。

  • <typeAlias> 元素定义了一个别名 user,它代表着 com.mybatis.po.User 这个类。这样定义后,在 MyBatis 上下文中就可以使用别名去代替全限定名了。
  • <environment> 元素的定义,这里描述的是数据库。它里面的 <\transactionManager> 元素是配置事务管理器,这里采用的是 MyBatis 的 JDBC 管理器方式。
  • <dataSource> 元素配置数据库,其中属性 type=“POOLED” 代表采用 MyBatis 内部提供的连接池方式,最后定义一些关于 JDBC 的属性信息。
  • <mapper> 元素代表引入的那些映射器,在谈到映射器时会详细讨论它。

有了基础配置文件,就可以用一段很简短的代码来生成 SqlSessionFactory 了,如下所示:

SqlSessionFactory factory = null;String resource = "sqlMapConfig.xml";InputStream is;try {
InputStream is = Resources.getResourceAsStream(resource); factory = new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {
e.printStackTrace();}

首先读取 sqlMapConfig.xml,然后通过 SqlSessionFactoryBuilder 的 Builder 方法去创建 SqlSessionFactory。整个过程比较简单,而里面的步骤还是比较烦琐的,只是 MyBatis 采用了 Builder 模式为开发者隐藏了这些细节。这样一个 SqlSessionFactory 就被创建出来了。

使用代码创建 SqlSessionFactory

// 数据库连接池信息PooledDataSource dataSource = new PooledDataSource();dataSource.setDriver("com.mysql.jdbc.Driver");dataSource.setUsername("root");dataSource.setPassword ("1128");dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");dataSource.setDefeultAutoCommit(false);// 采用 MyBatis 的 JDBC 事务方式TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment ("development", transactionFactory, dataSource);// 创建 Configuration 对象Configuration configuration = new Configuration(environment);// 注册一个 MyBatis 上下文别名configuration.getTypeAliasRegistry().registerAlias("role", Role.class);// 加入一个映射器configuration.addMapper(RoleMapper.class);//使用 SqlSessionFactoryBuilder 构建 SqlSessionFactorySqlSessionFactory SqlSessionFactory =new SqlSessionFactoryBuilder().build(configuration);return SqlSessionFactory;

转载地址:http://uosqb.baihongyu.com/

你可能感兴趣的文章
解决错误:左值必须作为赋值的左操作数
查看>>
android mvp示例_Android日期选择器示例
查看>>
android mvp示例_Android使用SwipeRefreshLayout示例向下拉或向下滑动以刷新
查看>>
在Android中获取当前日期的4种方法
查看>>
Android将图像转换为Base64字符串或将Base64字符串转换为图像
查看>>
使用Firebase教程的Android实时聊天应用程序
查看>>
Android圆形按钮示例
查看>>
shell排序 c+_C和C ++中的Shell Sort程序
查看>>
c语言双精度的格式说明符_C中的格式说明符
查看>>
生产者消费者问题c语言_C中的生产者消费者问题
查看>>
继承中的钻石问题
查看>>
0-1背包问题 c语言_动态编程在C中的0-1背包问题
查看>>
firebase fcm_使用Firebase Cloud Messaging(FCM)的Android推送通知
查看>>
Android使用Volley将图像上传到服务器
查看>>
c语言 字符串字符反向储存_反向字符串的PL / SQL程序
查看>>
斐波那契程序_Fibonacci系列的PL / SQL程序
查看>>
pl/sql和sql 区别_SQL和PL / SQL之间的区别
查看>>
restful 示例_Android Restful Web服务客户端示例
查看>>
数字转日期 pl/sql_PL / SQL程序检查数字是奇数还是偶数
查看>>
pl/sql打印_PL / SQL程序以打印数字表
查看>>