mybatis知识总结(三)配置分析
来源:互联网 发布:暴漫淘宝 编辑:程序博客网 时间:2024/06/05 09:40
每一个Mybatis应该都是以一个SqlSessionFactory实例为中心的,一个SqlSessionFactory实例都可以使用SqlSessionFactoryBuilder来创造。从配置类中创造的定制SqlSessionFactoryBuilder 实例,可以使用XML配置文件来生成一个SqlSessionFactory 实例。
1. 从xml中创造SqlSessionFactory
MyBatis 有一个Resources 通用类,类中有许多方法可以简单地从类路径和其他地址中加载资源。
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
XML 文件包含了许多MyBatis 的核心设置,包括一个获取数据库连接(Connection)实例的数据源(DataSource),一个决定事务作用域和操作的TransactionManager。全部的XML 配置文件的内容将在以后提到,先给出一个简单的样子。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/XXMapper.xml"/>
</mappers>
</configuration>
2. 不使用xml文件新建SqlSessionFactory
DataSource dataSource = DataSourceFactory.getDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment =
new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(XXMapper.class);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);
3. 使用SqlSessionFactory获取SqlSession
通过一个SqlSessionFactory,就可以获取一个SqlSession实例,SqlSession包含了针对数据库执行语句的每一个方法,直接使用SqlSession执行已经映射的每一个SQL语句:
SqlSession session = sqlSessionFactory.openSession();
try {
XXMapper mapper = session.getMapper(XXMapper.class);
XX xx= mapper.selectXx (101);
} finally {
session.close();
五.探究SQL映射语句
接下来先看一个简单的demo,来完成SqlSession的调用过程
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.coin.dao.PersonDao">
<select id="getPerson" resultType="Person" parameterType="long">
SELECT id,name
FROM T_Person
WHERE id = #{id}
</select></mapper>
可以用下列语句简单地针对Mapper 接口进行调用上面文件,代码如下:
PersonDao mapper = session.getMapper(PersonDao.class);
Person p= mapper.getPerson (1);
还有一个关于Mapper 类的技巧。它们的映射语句完全不需要使用XML 来配置,可以使用JAVA 注解方式来取代。比如,上面的XML 语句可以替换为:
public interface PersonDao {
@Select("SELECT id,name
FROM T_Person
WHERE id = #{id}
")
Person getPerson (int id);
总结:注解是非常简单明了的,但是JAVA 注解既有局限性,在语句比较复杂的情况下又比较容易混乱。所以,如果你的语句比较复杂,最好还是使用XML 来映射语句。
六.作用域和生命周期
1. SqlSessionFactoryBuilder
这个类可以被初始,使用和丢弃,因为如果已经创建好一个SqlSessionFactory后就不用再保留它,所以SqlSessionFactoryBuilder的最好作用域是方法体内的。
2. SqlSessionFactory
一旦创建,SqlSessionFactory 就会在整个应用过程中始终存在。所以没有理由去销毁和再创建它,一个应用运行中也不建议多次创建SqlSessionFactory。因此SqlSessionFactory最好的作用域是Application。可以结合使用Google Guice 或Spring 来进行依赖反射。这些框架允许你生成管理器来管理SqlSessionFactory 的单例生命周期。
3. SqlSession
每个线程都有自己的SqlSession 实例,SqlSession 实例是不能被共享,也是不是线程安全的。因此最好使用Request 作用域或者方法体作用域。比如说在Servlet 中的HttpSession 中。如果你正在使用WEB 框架,应该让SqlSession 跟随HTTP 请求的相似作用域。也就是说,在收到一个HTTP 请求过后,打开SqlSession,等返回一个回应以后,立马关掉这个SqlSession。关闭SqlSession 是非常重要的。你必须要确保SqlSession 在finally 方法体中正常关闭。可以使用下面的标准方式来关闭:
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
使用这种模式来贯穿你的所有代码,以确保所有数据库资源都被完全关闭。[这是假定不是使用你自己的数据库连接,而是使用MyBatis 来管理你的数据库连接资源]。
4. Mapper实例
Mapper是一种创建用于绑定映射语句的接口。Mapper接口的实例是用SqlSession来获得的,所以Mapper 实例作用域像SqlSession 一样,使用请求作用域。在方法被调用的时候调用Mapper实例,然后使用后,就会自动销毁掉,而不需要使用明确的注销。下面例子演示如何操作:
SqlSession session = sqlSessionFactory.openSession();
try {
PersonDao mapper = session.getMapper(PersonDao.class);
// do work
} finally {
session.close();
七.Mapper的XML配置文件
Mapper的XML配置文件包含一些设置和属性,用于增强Mybatis的动作。Configuration的各个节点配置如下:
1. 属性(properties)
JAVA 属性文件就可以配置直观的、可代替的属性,或者是属性项的子项。比如:
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="test"/>
<property name="password" value="test/>
</properties>
通过动态配置,这些属性都可以用替换整个文件的值。例如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
例子中的usrname 和password 将被属性文件中设置的值所替换, driver 和value 属性也将被config.properties 文件中值所替换,这为配置提供了多种选择。
属性值也可以设入到SqlSessionBuilder.build()方法中,例如:
SqlSessionFactory factory =
sqlSessionFactoryBuilder.build(reader, props);
// ... or ...
SqlSessionFactory factory =
sqlSessionFactoryBuilder.build(reader, environment, props);
如果一个属性项在多个地方出现,那MyBatis 将按以下顺序加载:
0 0
- mybatis知识总结(三)配置分析
- Mybatis知识总结(三)
- mybatis知识总结(二)框架分析
- Mybatis Mapper xml映射配置知识总结
- MyBatis 知识总结(一)
- MyBatis知识总结(二)
- MyBatis 学习总结(三)——优化配置
- mybatis 学习总结三 优化配置
- Mybatis学习总结(三)
- SpringMvc(三)配置Mybatis
- mybatis-XML配置(三)
- Mybatis 最近知识总结(1)
- mybatis知识总结(动态sql)
- Mybatis实战(三)生命周期分析
- MyBatis源码分析(三)-SqlSession理解
- Mybatis接口编程原理分析(三)
- Mybatis学习总结(三) 实战
- Mybatis学习总结三
- 打开网页时,发生了什么
- 第55题 Unique Binary Search Trees II
- mybatis知识总结(二)框架分析
- GBK与Unicode对照表的生成
- 欢迎使用CSDN-markdown编辑器
- mybatis知识总结(三)配置分析
- POJ 1664 放苹果
- Linux的多线程下载工具Axel
- opencv图像读取,视频读取
- python浮点数的is_integer
- Advanced lighting models
- ubuntu14.04LTS下安装flash player
- leetcode 第104题 Maximum Depth of Binary Tree
- java可视化编程,MyEclipse插件:windowBuilder
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
洗小白鞋妙招
小白鞋变黄怎么办
小白鞋变黄
小白鞋神器
小白鞋不露鞋带系法
小白鞋鞋带系法
小白鞋怎么洗干净
洗小白鞋
小白鞋搭配
小白鞋清洗剂
小白鞋清洁剂怎么用
小白鞋怎么系鞋带好看
皮面的小白鞋怎么清洗
小白鞋男
好看的小白鞋
小白鞋鞋带的系法图解
毅雅小白鞋
男的穿小白鞋好恶心
阿迪达斯 小白鞋
女款小白鞋
学生小白鞋
小白鞋图片
小白鞋推荐
小白鞋有哪些牌子
阿迪小白鞋
护士小白鞋
小白鞋搭配图片
男士小白鞋
阿迪达斯小白鞋
品牌小白鞋
小白鞋哪个牌子好
小白鞋什么牌子好
nike小白鞋
小白鞋批发
小白鞋怎么搭配
小白鞋是什么牌子
女孩小白鞋
男童小白鞋
魔术贴小白鞋
怎么洗小白鞋
小白鞋增高