一、创建SqlSessionFactory
1、通过XML创建SqlSessionFactory
<?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/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 mapper
PUBLIC "-//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);
但是有一个更好的方法如下
这种方法好在,第一不依赖于字符串的值,因此更安全,第二IDE有代码补全功能BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);
三、作用域和生命周期
SqlSessionFactoryBulider的作用域最好是方法
SqlSessionFactory最好的作用域是应用中,即一个应用程序中只创建一个
SqlSession最好的作用于是请求或者方法,但是使用后记得释放资源
映射器实例(Mapper instances)最好的作用域是方法