MyBatis学习笔记(二)优化MyBatis配置,解耦合,提高复用性

我们接着上篇的环境,优化MyBatis配置

1.连接数据库的配置放在properties文件中

在src下创建db.properties文件,写连接数据库需要使用到的数据库驱动,连接URL地址,用户名,密码;内容如下

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456

在MyBatis配置文件conf.xml中引用db.properties,如下所示:


 
<configuration>
    
    <properties resource="db.properties"/>

    
    <typeAliases>
        <typeAlias type="com.model.Users" alias="Users" />
    typeAliases>

    <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="com/mapping/UsersMapper.xml"/>
    mappers>

configuration>

2.建立公用的工具类MyBatisUtil管理SqlSessionFactory & Sesison

我们基于SqlSessionFactory 的最佳范围是应用范围,采用单例;SqlSession 的最佳范围是请求或方法范围,该实例不是线程安全的,因此是不能被共享的,建立MyBatisUtil如下

package com.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 *
 * @author wenjuanhenxing
 * @version MyBatisUtil.java 2015年12月2日 上午9:39:13
 */
// 提供获取SqlSessionFactory对象或管理Sesison的操作,解耦合,方便复用
public class MyBatisUtil {
    public static final String CONFIG_PATH = "com/mybatis/resource/conf.xml";

    // 每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心
    // 使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,最佳范围是应用范围
    private static SqlSessionFactory sqlSessionFactory = null;

    static {
        Reader read = null;
        try {
            read = Resources.getResourceAsReader(CONFIG_PATH);
        } catch (IOException e) {
            System.out.println("Read资源文件异常");
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(read);
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

    // 获取session
    public static SqlSession getSqlsession() {
        return sqlSessionFactory.openSession();
    }

    // 关闭session
    public static void closeSession(SqlSession sqlSession) {
        if (sqlSession != null) {
            sqlSession.close();
        }
    }

    /**
     * 获取SqlSession
     * 
     * @param isAutoCommit
     *            true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务 false
     *            不会自动提交事务,这时就需要我们手动调用sqlSession. commit()提交事务
     * @return SqlSession
     */
    public static SqlSession getSqlSession(boolean isAutoCommit) {
        return getSqlSessionFactory().openSession(isAutoCommit);
    }
}

3.定义别名,简化mapper映射文件

这个在上篇已经用到,即在conf.xml中添加了如下配置:

<typeAliases>
        <typeAlias type="com.model.Users" alias="Users" />
    typeAliases>

这样一来UsersMapper.xml文件中就不需要实体类Users的全类名(包名+类名)

此外,还可以批量为某个包下的所有实体类设置别名,如下:

<typeAliases>
        
        <package name="com.model"/>
typeAliases>

你可能感兴趣的:(数据库,mybatis,MyBatis)