mybatis基于Dao层开发(四)

SqlSessionFactoryBuilder是用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
  
  SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的生命周期应该是整个应用范围,全局范围只有一个工厂,应使用单例模式实现. 与spring集成之后,由spring来对其进行单例管理
  
SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作方法,可以通过SqlSessionFactory.openSession()来获取
SqlSession,内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部并及时关闭。

传统的Dao开发

配置映射文件User.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="test">
    <select id="findUserById" parameterType="int" resultType="com.test.domain.User">
        SELECT * FROM USER WHERE id =#{id}
    </select>
</mapper>

在SqlMapConfig.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">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用mybatis连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="User.xml" />

        <!-- 批量加载映射文件 -->
<!--        <package name="com.test.mybatis.mapper" /> -->
    </mappers>
</configuration>

创建Dao接口

package com.test.dao;

import com.test.domain.User;

public interface IUserDao {

    User findUserById(int id);

}

创建Dao实现类

package com.test.dao.impl;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.test.dao.IUserDao;
import com.test.domain.User;

public class UserDaoImpl implements IUserDao {

    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
        this.sqlSessionFactory = sqlSessionFactory;
    }


    public User findUserById(int id) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("test.findUserById",id);
        sqlSession.close();
        return user;
    }

}

测试代码

    @org.junit.Test
    public void test_01() throws Exception{
        //读取配置文件
        //全局配置文件的路径
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        IUserDao userDao = new UserDaoImpl(sqlSessionFactory);
        User user = userDao.findUserById(28);
        System.out.println(user);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值