Mybatis学习笔记--SqlSessionFactory、SqlSession等

来源:互联网 发布:天纵国际软件 编辑:程序博客网 时间:2024/06/08 08:42

一、创建SqlSessionFactory

1、通过XML创建SqlSessionFactory

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//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/BlogMapper.xml"/></mappers></configuration>
---改代码片段由mybatis官方文档提供
注意:1)这里的dtd为config.dtd,应注意与mapper的dtd相区别 2)如果数据源的value是${}时在根路径下应存在一个后缀名为properties的文件,其中内容包括driver等连接数据库的信息并且在xml文件中引入properties文件

2、编程式创建SqlSessionFactory

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment("development", transactionFactory,dataSource);Configuration configuration = new Configuration(environment);configuration.addMapper(BlogMapper.class);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

--该代码片段出自mybatis官方文档

注意:在这个例子中configration加入了一个映射,这个映射是一个java类,它包括SQL映射的注解,以此来避免使用xml文件,由于java注解的局限性和mybaits映射的复杂性

xml对于一些高级映射仍然有存在的必要(如:join映射),因此,mybatis将自动查找并加载xml文件如果这个文件存在的话(在这个例子中,BlogMapper.xml 
将被加载,基于BlogMapper.接口)

二、SqlSession

创建好了SqlSessionFactory你就可以获得一个SqlSession实例。SqlSession包括每一个执行SQL 命令的方法,你可以通过SqlSession执行已映射的SQL语句。如下例

SqlSession session = sqlSessionFactory.openSession();try {Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);} finally {session.close();}

本例出自官方文档,这是mybatis之前的版本所使用的方法,现在有一个简单的方法,使用一个接口(例如,BlogMapper),这个方法描述了所给的statment的参数、返回值。如下例

SqlSession session = sqlSessionFactory.openSession();try {BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);} finally {session.close();}
本例出自官方文档
三、SQL Statment

首先需要一个dtd为mapper.dtd的xml文件 如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select></mapper>

在namespace中定义一个映射id='selectBlog' 你就可以调用全限定名为
org.mybatis.example.BlogMapper.selectBlog的映射语句如下例:
Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);


但是有一个更好的方法如下

BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);
这种方法好在,第一不依赖于字符串的值,因此更安全,第二IDE有代码补全功能

三、作用域和生命周期

SqlSessionFactoryBulider的作用域最好是方法

SqlSessionFactory最好的作用域是应用中,即一个应用程序中只创建一个

SqlSession最好的作用于是请求或者方法,但是使用后记得释放资源

映射器实例(Mapper instances)最好的作用域是方法




阅读全文
0 0
原创粉丝点击