Mybatis整合Spring之传统dao方法

  • 进行Spring和Mybatis整合,需要了解一下SqlSessionFactory以及SqlSession的生命周期,前者是应用范围,全局范围只有一个工厂,使用单例模式来实现这个功能,直接交给Spring来完成即可,后者它内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部。其次我们所要求的dao实现类或者mapper的代理类都可以交给Spring来统一管理。现在就从最初的dao方式来实现Mybatis和Sping之间的整合。
  • 现在通过一个小小的查询功能来进行整合验证。

  • 第一步导入jar包 
    Mysql的驱动包 
    Mybatis的核心包和依赖包 
    Mybatis和spring的整合包 
    Spring的包 
    dbcp数据库连接池包或者C3P0数据连接池

  • 因为这只是一个小小的测试,所以本人在只是建立了一个简单的user表,生成的po类为如下
public class User {
        private int id;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

创建dao和实现类

public interface UserDao {
    public User findUserById(int id) throws Exception;
}
  • 1
  • 2
  • 3
    public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

    public User findUserById(int id) throws Exception {

        return this.getSqlSession().selectOne("test.findUserById", id);
    }
    在实现类我们还继承了SqlSessionDaoSupport,从关联源码,我们知道它提供了SqlSessionget和set 方法 public org.apache.ibatis.session.SqlSession getSqlSession();

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 现在开始搭建一系列的配置文件,从小到大的配置文件说起,创建一个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">
    <!-- 根据用户ID查询用户信息 -->
    <select id="findUserById" parameterType="int" resultType="com.itsky.ms.po.User">
        SELECT
        * FROM USER WHERE id =#{id}
    </select>
</mapper>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

创建一个mybatis的全局配置文件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>

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="config/User.xml" />
    </mappers>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

需要在scr目录下创建一个applicationContext.xml文件,顺带还得创建db.properties和log4j.properties等文件。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 加载java的配置文件 -->
    <context:property-placeholder location="config/db.properties" />

    <!-- 创建数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${db.driver}" />
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
        <property name="maxActive" value="10" />
        <property name="maxIdle" value="5" />
    </bean>

    <!-- SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定mybatis的全局配置文件的路径 -->
        <property name="configLocation" value="config/SqlMapConfig.xml"></property>
        <!-- 数据源 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    </beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

这样环境就搭建好了,测试一下

    private ApplicationContext ctx;

    @Before
    public void setUp() throws Exception {
        ctx = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
    }

    @Test
    public void testFindUserById() throws Exception {

        UserDao dao = (UserDao) ctx.getBean("userDao");

        User user = dao.findUserById(1);

        System.out.println(user);
    }
    这里因为全部由Spring管理,测试也就按照Spring框架的规则去执行就好。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

结果

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
User [id=1, username=rose, sex=girl, birthday=Sun Mar 22 00:00:00 CST 2017, address=chnia]
  • 1
  • 2
  • 3
  • 4

总结:首先把要做的事情先梳理一遍,分出第一步第二步,就比如我们刚才用传统方式整合,就是用传入一个id进行数据的查询,那么我们可以先把思路理一遍,固定的东西有一张表、一个表的对应类,一个dao包对应的一个实现包,大致就可以把java代码全部写完了。然后就可以专心配置xml文件,从小的配起,接口类需要我们用mybatis提供的xml文件进行配置,也就是说有两个xml文件需要写,一个是查询的xml(…),一个是配置的xml(),最后配置全局配置文件,也就是applocationContext.xml(….).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值