MyBatis 简单笔记

本文仅简单介绍MyBatis,以官方为准,不涉及spring框架相关

引入jar包

通过导入mybatis-x.x.x.jar包来引入MyBatis,或者使用maven进行导入。

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

核心类及其生命周期

在MyBatis中,有SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession,映射器实例类四个较为核心的类。

  1. SqlSessionFactoryBuilder Mybatis按照工厂模式进行核心对象的创建,那么也得先有一个工厂,这个类就是从xml配置文件或其他的文件流中获取配置信息,或者通过Resources类来从calsspath或其他地方来获取配置信息,来构造工厂类。该类在构造完工厂后就失去了作用。
  2. SqlSessionFactory MyBatis的核心类,是连接数据库和程序的桥梁,是一个数据库的连接池,应用可以从工厂中获取SqlSession使用,工厂的生命周期和程序的生命周期应一样长,且只有一个工厂对象,才能保证数据库资源不被无序占用。
  3. SqlSession 这是MyBatis的执行类,应用在执行数据库操作时,需向工厂类申请一个会话连接,在该会话中执行一系列数据库操作,然后结束会话。该类的普通对象是线程不安全且会占用连接资源的,该类应与应用中的一项操作的前后周期相对应,因此最好仅存在于一个方法中,随用随申请,并随一项操作的结束而关闭会话。可以使用try..catch..finally语句处理该类。
  4. SQLMapper映射器实例 这是绑定了SQL映射语句的接口,实际的数据操作对象。该对象从sqlSession对象中获得,因此其生命周期应小于SqlSession。
    如果使用MyBatis-Spring等框架,将mybatis对象的生命周期交由注入框架进行托管,那一般不用管这些类的生命周期,后顾之忧交给框架即可。

基本参数配置

XML方法

仅使用MyBatis

参考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/BlogMapper.xml"/><!--数据库接口定义XML-->
  </mappers>
</configuration>

数据库接口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"><!--数据库查询语句设置,设置ID还有返回类型-->
    select * from Blog where id = #{id}<!--SQL语句,使用#{}进行参数填充,可以为具体的名称或者是变量输入顺序-->
  </select>
</mapper>

XML解析及对象创建代码

String resource = "org/mybatis/example/mybatis-config.xml";#设置XML文件路径
InputStream inputStream = Resources.getResourceAsStream(resource);#通过Resources类解析XML类参数
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);#创建工厂类

使用Spring框架进行注入

典型的使用Spring框架对MyBatis进行管理的配置文件

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--datasource定义-->
      <property name="driverClassName"> <!--驱动-->
          <value>com.mysql.jdbc.Driver</value> 
      </property> 
      <property name="url"> <!--数据库地址-->
          <value>jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8</value> 
      </property> 
      <property name="username"> <!--数据库用户信息-->
          <value>root</value> 
      </property> 
      <property name="password"> 
          <value>admin</value> 
      </property>    
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--将会话工厂托管给Spring-->
        <property name="typeAliasesPackage" value="com.how2java.pojo" />
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com/how2java/mapper/*.xml"/><!--XML文件位置-->
    </bean>
 
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.how2java.mapper"/><!--自动扫描mapper-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--指定数据源所在的bean-->
    </bean>

代码构建方法

如下列示例代码:

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();#获取数据源,例如数据库驱动、url和用户名密码之类
TransactionFactory transactionFactory = new JdbcTransactionFactory();#获取jdbc事物工厂对象
Environment environment = new Environment("development", transactionFactory, dataSource);#创建Mybatis命名空间
Configuration configuration = new Configuration(environment);#将命名空间加入配置类中
configuration.addMapper(BlogMapper.class);#在配置类中添加数据库映射
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);#使用配置文件构建工厂类

与数据库进行交互

不使用Spring等框架进行注入,手动操作

//定义 SqlSession
SqlSession sqlSession = null;
try {
    // 打开 SqlSession 会话
    sqlSession = SqlSessionFactory.openSession();
    // some code...
    sqlSession.commit();    // 提交事务
} catch (IOException e) {
    sqlSession.rollback();  // 回滚事务
}finally{
    // 在 finally 语句中确保资源被顺利关闭
    if(sqlSession != null){
        sqlSession.close();
    }
}

使用Spring框架进行注入与对象管理

使用@Autowired注解,对Mapper对象进行自动装配,然后即可调用Mapper的方法。

@Autowired
private SQLMapper SQLMapper;

posted @ 2020-01-07 18:04  很懒的虫  阅读(274)  评论(0编辑  收藏  举报