Mybatis与Spring的整合

先进行传统的非mapper包同名接口文件和.xml文件的整合配置
1.首先创建web工程并在lib目录下导入相关的整合jar包
项目结构
在这里插入图片描述
需要导入的相关jar包
在这里插入图片描述
在这里插入图片描述
2.在src目录下创建配置Mybatis的核心配置文件 配置别名 和通过加载映射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>
    <!--配置别名-->
    <typeAliases>
        <!--<typeAlias type="com.zxh.model.User" alias="user"></typeAlias>-->
        <!--指定报名,别名就是类名,第一个小写-->
        <package name="com.zxh.backoffice.model"></package>
    </typeAliases>
    <!--告诉mybatis加载映射文件-->
    <mappers>
        <!--第一种:写映射文件名,相对路径-->
        <!--<mapper resource="com/zxh/sqlmap/User.xml"/>-->
        <!--<mapper resource="com/zxh/mapper/UserMapper.xml"/>-->
        <mapper resource="com/zxh/backoffice/sqlmap/User.xml"></mapper>
        <!--第二种:写类名-->
        <!--<mapper class="com.zxh.mapper.UserMapper"/>-->
        <!--<package name="com.zxh.backoffice.sqlmap"></package>-->
    </mappers>
</configuration>

mapper包中的映射文件
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="user">
    <!--根据id查询-->
    <select id="findUserById" parameterType="int" resultType="user">
        select * from user WHERE id = #{id}
    </select>
</mapper>

3.创建Spring的配置文件并配置
(1).配置数据源
首先,在src目录下新建存有连接数据库信息的配置文件db.properties

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisday01?useUnicode=true&amp;characterEncoding=utf8
user=root
password=root
maxActive=10
maxIdle=5

注意:不要使用username命名,否则测试时会报错
然后,新建Spring的配置文件applicationContext.xml并依次
配置数据库数据源,
配置SqlSessionFactory会话工厂(引入数据源、加载Mybatis的配置文件SqlMapConfig.xml),
在dao包下创建UserDao接口,并创建接口的实现类,接口的实现类要继承SqlSessionDaoSupport
在这里插入图片描述
UserDaoImpl.java

package com.zxh.backoffice.dao.impl;

import com.zxh.backoffice.dao.UserDao;
import com.zxh.backoffice.model.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
    @Override
    public User findUserById(int id) {
        return this.getSqlSession().selectOne("user.findUserById",id);
    }
}

再配置daoBean并在daoBean中注入SqlSessionFactory。

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

    <!--加载配置文件-->
    <context:property-placeholder location="db.properties"/>
    <!-- 1.配置数据库,dbcp数据库连接池-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driverClass}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
        <!-- 最大连接  -->
        <property name="maxActive" value="${maxActive}"/>
        <!--最大空闲数  -->
        <property name="maxIdle" value="${maxIdle}"/>
    </bean>

    <!--2.配置会话工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!--mybatis配置文件的路径-->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
    </bean>

    <!--3.配置dao-->
    <bean id="userDao" class="com.zxh.backoffice.dao.impl.UserDaoImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>

</beans>

测试:

package com.zxh.backoffice.demo01;

import com.zxh.backoffice.dao.UserDao;
import com.zxh.backoffice.model.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {

    @Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) context.getBean("userDao");
        User user = userDao.findUserById(1);
        System.out.println(user);
    }
}

mapper包下同名接口文件和.xml文件整合配置的方式如下:

1.在上述整合的基础下,新建mapper包,并将UserDao接口复制并改名为UserMapper接口放到mapper包下,将User.xml文件复制并改名为UserMapper.xml使之与接口名相同放到mapper包下。
在这里插入图片描述
2.修改SqlMapConfig.xml文件中的配置,
首先修改别名的配置,追加上mapper包下的别名配置
在这里插入图片描述

<!--配置别名-->
    <typeAliases>
        <!--<typeAlias type="com.zxh.model.User" alias="user"></typeAlias>-->
        <!--指定报名,别名就是类名,第一个小写-->
        <package name="com.zxh.backoffice.model"></package>
        <package name="com.zxh.backoffice.mapper"></package>
    </typeAliases>

然后映射配置,通过包扫描法,扫描mapper包下与接口同名的xml文件
在这里插入图片描述

<mappers>
        <!--第一种:写映射文件名,相对路径-->
        <!--<mapper resource="com/zxh/sqlmap/User.xml"/>-->
        <!--<mapper resource="com/zxh/mapper/UserMapper.xml"/>-->
        <mapper resource="com/zxh/backoffice/sqlmap/User.xml"></mapper>
        <!--第二种:写类名-->
        <!--<mapper class="com.zxh.mapper.UserMapper"/>-->
        <!--第三种:包配置 只适用于mapper代理
            加载映射接口和配置文件
        -->
        <package name="com.zxh.backoffice.mapper"></package>
    </mappers>

3.打开UserMapper.xml,修改命名空间
在这里插入图片描述
4.打开Spring的配置文件applicationContext.xml
这里不再使用传统的配置dao的方式,而使用由Spring创建UserMapper对象的方式
在这里插入图片描述
此方式中 3.传统配置dao的方式 可直接删去

<!--3.传统配置dao   现在不用-->
    <bean id="userDao" class="com.zxh.backoffice.dao.impl.UserDaoImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>

    <!--4.由Spring创建一个UserMapper的bean对象,使用工厂来创建-->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        <property name="mapperInterface" value="com.zxh.backoffice.mapper.UserMapper"/>
    </bean>

测试
如果是要批量创建mapper的bean对象(常用此方式),则将4.由Spring创建一个UserMapper的bean对象,使用工厂来创建的方式替换为

<!--5.批量创建mapper的bean对象
          内部会扫描指定包下的mapper,创建代理对象,名字就是类名,头字母改小写
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zxh.backoffice.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
@Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper userMapper = (UserMapper) context.getBean("userMapper");
        User user = userMapper.findUserById(1);
        System.out.println(user);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值