mybatis入门(二)

朱雀 2020-11-01 09:54 921阅读 0赞

2.1开发环境准备

见上篇博客。

2.2 mybatis的基本构成

的MyBatis的核心组件(顺序由上而下):

  • SqlSessionFactoryBuilder对象(构造器):它会根据配置信息或者代码来生成的SqlSessionFactory(工厂接口)。
  • SqlSessionFactory对象:依靠工厂来生成的SqlSession(会话)。
  • SqlSession的:是一个既可以发送SQL去执行并返回结果,也可以获取映射器的接口。
  • SQL Mapper:它是mybatis新设计的组件,它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL的映射规则。它负责发送SQL去执行,并返回结果。

2.2.1构建SqlSessionFactory

SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得.SqlSessionFactory是一个工厂接口而不是实现类,他的任务是创建SqlSession。

SqlSession类似于一个JDBC的Connection对象。

创建SqlSessionFactory的两种模式:1.XML配置.2。代码的方式。

配置类对象保存着我们配置在mybatis的信息。在mybatis中提供了两个SqlSessionFactory的实现类,DefaultSqlSessionFactory和SqlSessionManager。目前mybatis中使用的是DefaultSqlSessionFactory。

2.2.1.1使用XML方式构建

包含获取数据库连接实例的数据源(DataSource),

决定事务范围和控制方式的事务管理器(TransactionManager)和映射器(SQL Mapper)。

2.2.1.2使用代码方式构建

不推荐,修改环境的时候需要重新编译代码,这样不利于维护。

构建代码:

  • 初始化一个数据库连接池
  • 定义JDBC的数据库事务管理方式
  • 用数据库连接池和事务管理方式创建了一个数据库运行环境,并命名为发展
  • 创建一个配置类对象,并把数据库运行环境注册给它
  • 注册一个角色的别名
  • 加入一个映射器
  • 用SqlSessionFactoryBuilder对象通过配置对象创建了SqlSessionFactory

2.2.2创建SqlSession

SqlSession接口类似于一个JDBC中的Connection接口对象,我们需要保证每次用完正常关闭它,所以正确的做法是把关闭SqlSession接口的代码写在finally语句中保证每次都会关闭SqlSession,让连接资源归还给数据库。

SqlSession的用途主要有两种:

  • 获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果。
  • 直接通过命令信息去执行SQL返回结果.update,插入,选择,删除等方法,与此同时它也支持事务,通过提交,回滚方法递交或者回滚事务。

2.2.3映射器

映射器是由Java接口和xml文件(或注解)共同组成的,它的作用如下。

  • 定义参数类型
  • 描述缓存
  • 描述SQL语句
  • 定义查询结果和POJO的映射关系

2.2.3.1 XML文件配置方式实现Mapper

使用XML文件配置是mybatis实现mapper的首选方式。它由一个Java接口和一个XML文件构成。

第一步,给出Java接口。

  1. public interface RoleMapper{
  2. public Role getRole(Long id);
  3. }

这里我们定义了一个接口,它有一个方法getRole,通过角色编号找到角色对象。

第二步,给出一个映射XML文件。

  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="com.learn.chapter2.mapper.RoleMapper">
  6. <select id="getRole" parameterType="long" resultType="role">
  7. select id,role_name as roleName,note from t_role where id = #{id}
  8. </select>
  9. </mapper>

以上XML文件做了什么:

  • 这个文件是我们在配置文件的MyBatis-config.xml文件中配置了的,所以的MyBatis会读取这个配置文件,生成映射器。
  • 定义了一个命名空间为com.learn.chapter2.mapper.RoleMapper的SQL Mapper,这个命名空间和我们定义的接口的全限定名是一致的。
  • 选择查询的ID和接口方法是一致的,参数类型表示参数类型为长,而与resultType则定义我们需要返回的数据类型。

对于以下SQL语句:

  1. select id, role_name as roleName, note from t_role where role_no = #{id}

#{id}为这条SQL的参数。而SQL列的别名和POJO的属性名称保持一致。那么mybatis就会把此条语句查询的结果自动映射到我们需要的POJO属性上,这就是自动映射。我们可以用一个SqlSession来获取这个映射代码如下:

  1. //获取映射器Mapper
  2. RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
  3. Role role = roleMapper.getRole(1L);//执行方法

这就完成了的MyBatis的一次查询。

2.2.3.2 Java注解方式实现Mapper

只需要在接口中使用的Java注解,注入SQL即可,代码如下:

  1. public interface RoleMapper{
  2. @Select(value="select id,role_name as roleName,note from t_role where id=#{id}")
  3. public Role getRole(Long id);
  4. }

这种方法虽然看起来比较简单,但是不建议使用这种方式。复杂的SQL写在代码中会降低代码的可读性。

2.2.3.3一些疑问

建议采用映射器方式编写代码,好处有两点:

  • sqlSession.selectOne是功能性代码,长长的字符串比较,但是对于roleMapper.getRole这样的才是符合面向对象规范的编程,也更符合业务的逻辑。
  • 使用映射方式,IDE可以检查Java的语法,避免不必要的错误。

2.3生命周期

2.3.1 SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory。它的作用就是一个构建器,一旦我们构建了SqlSessionFactory,就可以将它回收。作用:生成SqlSessionFactory对象。

2.3.2 SqlSessionFactory

作用:采用单例模式创建SqlSession,而SqlSession就是一个会话,相当于JDBC中的Connection对象。并且每一个数据库只对应一个SqlSessionFactory,避免过多的Connection被消耗。

2.3.3 SqlSession

SqlSession的就是一个会话,相当于JDBC中的连接对象。它是一个线程不安全的对象,在涉及多线程的时候,操作数据库需要注意其隔离级别,数据库锁等高级特性。此外,每次创建的一个SqlSession都必须及时关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能的影响很大。

2.3.4映射器

Mapper是一个接口,而没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此它应该在一个SqlSession事务方法之内,是一个方法级别的东西。它就如同JDBC中的一条SQL语句的执行,它最大的范围和SqlSession的是相同的。尽管我们想一直保存着映射,但是你会发现它很难控制,所以尽量在一个SqlSession的事务的方法中使用它们,然后废弃掉。

2.4实例

实例文件的作用:

文件 作用
Log4j.properties 配置的log4j的属性文件
Chapter2Main.java 运行MyBatis的入门程序的入口,包含主要方法
RoleMapper.java 映射器
RoleMapper.xml 映射器配置文件
Role.java POJO类,符合的javaBean的规范
SqlSessionFactoryUtil.java 构建SqlSessionFactory中,并创建一个SqlSession
MyBatis的-config.xml中 MyBatis的的配置文件

发表评论

表情:
评论列表 (有 0 条评论,921人围观)

还没有评论,来说两句吧...

相关阅读