一、SqlSessionFactoryBuilder

  从命名上可以看出,这个是一个 Builder 模式的,用于创建 SqlSessionFactory 的类。SqlSessionFactoryBuilder 根据配置来构造 SqlSessionFactory。其中配置方式有两种:

1.1、XML 文件方式

  XML 文件方式是作为常用的一种方式:

1 String resource = "org/mybatis/example/mybatis-config.xml";
2
3 InputStream inputStream = Resources.getResourceAsStream(resource);
4
5 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

mybatis-config.xml 就是我们的配置文件:

 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE configuration
3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 <configuration>
6 <environments default="development">
7 <environment id="development">
8 <transactionManager type="JDBC"/>
9 <dataSource type="POOLED">
10 <property name="driver" value="${driver}"/>
11 <property name="url" value="${url}"/>
12 <property name="username" value="${username}"/>
13 <property name="password" value="${password}"/>
14 </dataSource>
15 </environment>
16 </environments>
17 <mappers>
18 <mapper resource="org/mybatis/example/BlogMapper.xml"/>
19 </mappers>
20 </configuration>

1.2、Java Config

  这是第二种配置方式,通过 Java 代码来配置:

 1 DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
2
3 TransactionFactory transactionFactory = new JdbcTransactionFactory();
4
5 Environment environment = new Environment("development", transactionFactory, dataSource);
6
7 Configuration configuration = new Configuration(environment);
8 configuration.addMapper(BlogMapper.class);
9
10 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

  Java Config 相比较 XML 文件的方式而言,会有一些限制。比如修改了配置文件需要重新编译,注解方式没有 XML 配置项多等。所以,业界大多数情况下是选择 XML 文件的方式。但到底选择哪种方式,这个要取决与自己团队的需要。比如,项目的 SQL 语句不复杂,也不需要一些高级的 SQL 特性,那么 Java Config 则会更加简洁一点;反之,则可以选择 XML 文件的方式。

二、SqlSessionFactory

  SqlSessionFactory 顾名思义,是用于生产 SqlSession 的工厂。  通过如下的方式来获取 SqlSession 实例:

1 SqlSession session = sqlSessionFactory.openSession();

三、SqlSession

  SqlSession 包含了执行 SQL 的所有的方法。以下是示例:

1 SqlSession session = sqlSessionFactory.openSession();
2 try {
3 Blog blog = session.selectOne(
4 "org.mybatis.example.BlogMapper.selectBlog", 101);
5 } finally {
6 session.close();
7 }

  当然,下面的方式可以做到类型安全:

1 SqlSession session = sqlSessionFactory.openSession();
2 try {
3 BlogMapper mapper = session.getMapper(BlogMapper.class);
4 Blog blog = mapper.selectBlog(101);
5 } finally {
6 session.close();
7 }

四、Mapper

  Mapper 顾名思义,是用做 Java 与 SQL 之间的映射的。包括了 Java 映射为 SQL 语句,以及 SQL 返回结果映射为 Java。比如,下面是一个常见的 Mapper 接口映射文件:

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

  其中 “org.mybatis.example.BlogMapper” 就是我们要射射的接口,selectBlog 就是BlogMapper上的方法。而这个 selectBlog 具体就是要执行“select * from Blog where id = #{id}”这个 SQL 语句。  这样,我们就能通过

1 Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

  或者是

1 BlogMapper mapper = session.getMapper(BlogMapper.class);
2 Blog blog = mapper.selectBlog(101);

  来获取到执行的结果。当然,如果是采用注解的方式的话,可以省去 XML 文件:

1 public interface BlogMapper {
2 @Select("SELECT * FROM blog WHERE id = #{id}")
3 Blog selectBlog(int id);
4 }

  但是,我们推荐使用sql映射文件的方式来写sql语句,而不要把sql语句写在注解中。

最新文章

  1. 使用HttpClient获取网上字符串和位图对象Bitmap
  2. PHP在linux上执行外部命令
  3. Hibernate关联映射(单项多对一和一对多、双向一对多)
  4. 思维导图XMiand
  5. [Apache Maven Shade Plugin] [example] [001] 官方例子:includes-excludes
  6. auto_ptr的设计动机
  7. vs2005 ,2008,2010中引入app.manifest(即c#程序在win7下以管理员权限运行方法)
  8. LeapMotion 简介
  9. 通过扩展改善ASP.NET MVC的验证机制[使用篇]
  10. 算法:1!+(1!+3!)+(1!+3!+5!) + ( 1! + 3! + 5! + 7! + 9!)+....+(1!+3!+5!+ ... + m!)
  11. 使用Emmet加速Web前端开发
  12. InfluxDB读写性能测试
  13. 使用walle部署laravel的时候问题记录
  14. 09-babel
  15. steps/train_lda_mllt.sh
  16. Lambert漫反射的BRDF
  17. element中使用button会刷新一遍页面
  18. vue-1-模板语法
  19. Java 11 - Java String类
  20. nine

热门文章

  1. training set, validation set, test set的区别
  2. js undefined和null的判断
  3. Arduino重置-复位问题
  4. 一文带你定制unittest测试用例的名称
  5. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
  6. Create a cursor from hardcoded array instead of DB
  7. redis协议规范
  8. 多测师讲解 _教师(必备)_高级讲师肖sir
  9. MeteoInfoLab脚本示例:inpolygon
  10. 【组合计数】visit