如何整合Spring和Mybatis的思路分析(整合的是原生的Dao)

这里是全局整合的工程结构

这里写图片描述

这里是整合思路步骤,具体详细见相对应代码

一、如何整合Spring和Mybatis的思路分析(整合的是原生的Dao);
1.需要先配置Mybatis的全局配置文件(在此之前需要先把工程结构搭建好)
2.需要配置spring的全局配置文件
3.然后配置mybatis的mapper的SQL映射配置文件,并把这个xml文件路径加载到Mybatis的全局配置文件中
4.创建对应数据库的实体类bean
5.实现Dao层要实现的功能接口(是增删改查的那种接口)
6.如果需要使用的是原生的Dao,就需要去写一个实现Dao接口的实现类(这里需要继承SqlSessionDaoSupport来得到sqlsession工厂)
7.最后是使用Junit测试(使用的时候需要先构建属性applicationContext来把spring的全局配置文件加载进来用ClassPathXmlApplicationContext方法)

1.需要先配置Mybatis的全局配置文件(在此之前需要先把工程结构搭建好)

<?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>

    <!-- 加载属性文件 -->
    <properties resource="db.properties">
        <!--properties中还可以配置一些属性名和属性值  -->
        <!-- <property name="jdbc.driver" value=""/> -->
    </properties>
    <!-- 全局配置参数,需要时再设置 -->
    <!-- <settings>

    </settings> -->

    <!-- 别名定义 -->
    <typeAliases>
            <!--这个是批量别名定义,扫描po包下的类,来自动定义别名-->
            <package name="cn.itcast.ssm.po"/>

    </typeAliases>

    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载 的映射文件 -->
    <mappers>
        <!--这个是使用mapper代理的方法把映射写SQL语句的那个xml文件交给mybatis来管理-->
        <mapper resource="sqlmap/User.xml"/>
        <!--这个是批量加载mapper,mybatis会自动加载这个包下的所有mapper接口进行加载,前提是使用mapper代理的方法-->
        <package name="cn.itcast.ssm.mapper"/>


    </mappers>



</configuration>

2.需要配置spring的全局配置文件

<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 ">


    <!--这个是为了加载配置文件db.properties文件-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--所以还需要配置数据源,jdcp(连接池)-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10"/>
        <property name="minIdle" value="5"/>
    </bean>


    <!--这个是先把sqlSessionFactory给配置到spring容器中-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <!--加载mybatis的配置文件-->
        <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>

        <!--加载mybatis的配置文件-->
        <property name="dataSource" ref="dataSource"/>

    </bean>

    <!--这里是配置原始的Dao的-->
    <bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>

    </bean>



</beans>

3.然后配置mybatis的mapper的SQL映射配置文件,并把这个xml文件路径加载到Mybatis的全局配置文件中

<?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">

<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">

    <!-- 在 映射文件中配置很多sql语句 -->
    <!-- 需求:通过id查询用户表的记录 -->
    <!-- 通过 select执行数据库查询
    id:标识 映射文件中的 sql
    将sql语句封装到mappedStatement对象中,所以将id称为statement的id
    parameterType:指定输入 参数的类型,这里指定int型 

     -->
    <select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User">
        SELECT * FROM user WHERE id= #{value}
    </select>



</mapper>


4.创建对应数据库的实体类bean

package cn.itcast.ssm.po;

/*
这个是一个对应数据库的实体类的对象
*/
public class User {

    private int id;
    private String name;
    private String password;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

5.实现Dao层要实现的功能接口(是增删改查的那种接口)

package cn.itcast.ssm.dao;

import cn.itcast.ssm.po.User;

//这个是使用原始的dao开发技术来写的接口,然后再去实现
public interface UserDao {


    //根据id查询用户信息
     public User findUserById(int id) throws Exception;


}

6.如果需要使用的是原生的Dao,就需要去写一个实现Dao接口的实现类(这里需要继承SqlSessionDaoSupport来得到sqlsession工厂)

package cn.itcast.ssm.dao;

import cn.itcast.ssm.po.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

//这个还是实现原生DAO方法的接口实现类,还需要继承SqlSessionDaoSupport这个类
public class UserDaoImpl  extends SqlSessionDaoSupport implements UserDao {



    //实现通过id来查询用户信息的实现接口
    @Override
    public User findUserById(int id) throws Exception {
        //因为这里继承了SqlSessionDaoSupport这个接口,所以可以直接用它自己封装的getSqlSession()方法来得到sqlsession
        SqlSession sqlSession = this.getSqlSession();
        User user = sqlSession.selectOne("test.findUserById", id);
        //因为sqlsession也直接都交给了spring来管理了,所以这里也不需要在自己手动去关闭sqlsession了
            return user;
    }
    //实现来增加用户信息的实现接口


}

7.最后是使用Junit测试(使用的时候需要先构建属性applicationContext来把spring的全局配置文件加载进来用ClassPathXmlApplicationContext方法)

package test;

import cn.itcast.ssm.dao.UserDao;
import cn.itcast.ssm.po.User;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserDaoImplTest {

    private ApplicationContext applicationContext;
    @Before
    public void setUp() throws Exception {

        //这里是测试类,因为你需要把你的bean都交给spring来去管理,所以你需要得到spring的容器,也就是需要得到spring的全局配置文件
        applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }

    @Test
    public void findUserById() throws Exception {
        //然后就开始
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        User user = userDao.findUserById(1);
        System.out.println(user.toString());

    }
}

猜你喜欢

转载自blog.csdn.net/qq_36520235/article/details/79691417
今日推荐