Java康复性训练——MyBatis3(1)

2016/7/17 posted in  Java  

MyBatis

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

MyBatis3使用-Hell,World项目

MyBatis3的使用比较简单。新建一个基本的Mybatis项目需要如下步骤:

  1. 新建一个Java项目(这句是废话)。
  2. 导入相关Jar包。
    1. JDBC相关包:mysql-connector-java-5.1.39-bin.jar
    2. MyBatis核心包:mybatis-3.4.1.jar
  3. 创建Mybatis配置文件:mybatis-config.xml 位于src目录下

        <?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>
    
          <!--  引入相关JDBC配置文件 -->
          <properties  resource="jdbc.properties"/>
    
          <!-- 配置Mybatis运行的数据库环境 -->
          <environments default="development">
                <environment id="development">
                      <transactionManager type="JDBC"/>
                      <dataSource type="POOLED">
                        <property name="driver" value="${jdbc.driverClassName}"/>
                        <property name="url" value="${jdbc.url}"/>
                        <property name="username" value="${jdbc.username}"/>
                        <property name="password" value="${jdbc.password}"/>
                      </dataSource>
                </environment>
          </environments>
    
          <!-- 对象与数据库映射文件 -->
          <mappers>
            <mapper resource="site/zhanjingbo/mapper/UserMapper.xml"/>
          </mappers>
        </configuration>
    
  4. 创建JDBC配置文件:jdbc.properties。(也可直接在上文配置)

    jdbc.dirverClassName=com.mysql.jdbc.Dirver
    jdbc.url=jdbc:mysql://localhost:3307/user
    jdbc.username=root
    jdbc.password=
    
    
  5. 创建MyBatis的连接工厂类:

    package site.zhanjingbo.util;
    import java.io.IOException;
    import java.io.InputStream;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class SqlSessionFactoryUtil {
        private static SqlSessionFactory sqlSessionFactory; 
        private static SqlSessionFactory getSqlSessionFactory(){
    
            if(sqlSessionFactory == null){
                InputStream is = null;
                try {
                    is = Resources.getResourceAsStream("mybatis-config.xml");
                    sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    System.out.println("配置文件加载失败");
                    e.printStackTrace();
                }
            }
            return sqlSessionFactory;
        }
        public static SqlSession openSession(){
            return getSqlSessionFactory().openSession();
        }
    }
    
  6. 创建实体数据库访问接口

    package site.zhanjingbo.dao;
    import site.zhanjingbo.model.User;
    public interface UserMapper {
        public int addUser(User user);
    }
    
  7. 创建映射Mapper配置文件

    <?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="site.zhanjingbo.mapper.UserMapper">
        <insert id="addUser" parameterType="site.zhanjingbo.model.User">
            insert into user(username,password) values(#{username},#{password}) 
        </insert>
    </mapper>
    
  8. 创建测试类

     package site.zhanjingbo.test;
     import org.apache.ibatis.session.SqlSession;
     import site.zhanjingbo.mapper.UserMapper;
     import site.zhanjingbo.model.User;
     import site.zhanjingbo.util.SqlSessionFactoryUtil;
     public class MyBatisTest {
        public static void main(String[] args) {
            //获取SqlSession实例
            SqlSession sqlSession = SqlSessionFactoryUtil.openSession();
            //根据sqlSession生成对应的Mapper对象
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
    
            User user = new User("test", "123");
            int flag = userDao.addUser(user);
    
            if(flag > 0){
                System.out.println("添加成功");
            }
    
            //提交事务
            sqlSession.commit();
            //关闭SQLSession
            sqlSession.close();
    
        }
    }
    

Mybatis-Config.xml配置文件

本部分简要描述一下Mybatis-config配置文件的各项内容。
<configuration></configuration>是配置文件xml的根节点,所有配置项都其中。主要包含以下几项:

properties参数配置

  • properties主要包含各类配置信息,可以直接引入properties文件。也可以直接设置键值对。
  • <properties resource="jdbc.properties"/> 通过resource来指定配置文件
  • 直接写入键值对,写法

    <properties>
        <property name="jdbc.dirverCLassName" value="com.mysql.jdbc.Driver"/>
     </properties>
    

environments 环境配置

MyBatis支持多环境配置。可以同时配置多个数据库信息。用<environment>标签表示。

environment标签

每一对<environment></environment>标签标示一个数据库环境信息。包含transactionManager、dataSource两个子节点。
样例代码:

<environments default="development">
        <environment id="development">
              <transactionManager type="JDBC"/>
              <dataSource type="POOLED">
                <property name="driver" value="${jdbc.dirverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
              </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.dirverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
              </dataSource>
        </environment>
 </environments>
transactionManager事务管理方式

MyBatis支持两种类型的事务管理器:JDBC和MANAGED(托管):

  • JDBC:应用程序负责管理数据库连接的声明周期
  • MANAGED:由应用服务器管理数据库连接的声明周期。(一般商业服务器才有此功能,如JBOSS,WebLogic)
  • <transactionManager type="JDBC"/>
dataSource数据源

用来配置数据库数据源信息。类型分为:UNPOOLED,POOLED,JNDI:

  • UNPOOLED:没有连接池,每次数据库操作MyBatis都会新建一个数据库连接,用完后,关闭。适合小并发项目。
  • POOLED:启用连接池
  • JNDI:使用服务器配置JNDI数据源获取数据库连接

typeAliases

类型别名,通过设置该项目可以给类的完整限定名取别名,方便使用。
如在上面部分 UserMapper.xml中addUser的参数类别写为site.zhanjingbo.model.User。不方便使用。我们可以在Mybatis-config.xml中加入如下代码:

<typeAliases>
    <typeAlias type="site.zhanjingbo.model.User" alias="User"/>
</typeAliases>

便可以使用User来指代site.zhanjingbo.model.User

Mappers映射

用于引入Mapper映射文件。有三种比较推荐的配置方式,如下代码:

  <mappers>
    <mapper resource="site/zhanjingbo/dao/UserMapper.xml"/>
    <mapper class="site.zhanjingbo.dao.UserMapper"/>
    <!-- 包含这个包下的所有 -->
    <package name="site.zhanjingbo.dao"/>
  </mappers>

示例代码见:https://github.com/swuzjb/MybatisDemo