spring整合mybatis

spring + mybatis

        原来由mybatis自己创建的对象 sqlSessionFactory、sqlSession等,整合spring后我们只需要按照spring规则,来让spring容器帮我们创建mybatis的对象就行了

        IOC:spring容器创建对象

                xml-->bean

                注解(annotation)方式

数据源:

        sqlSessionFactory--创建sqlSession连接

来看原始的sqlMapCongif.xml配置文件(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>
    <!--引入数据库,即jdbc配置文件-->
    <properties resource="jdbc.properties"/>
    <!--配置驼峰命名-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!--配置别名com.hp.entity.User-->
    <typeAliases>
        <package name="sm.hp.entity"/>
    </typeAliases>
       <environments default="development">
           <environment id="development">
               <transactionManager type="JDBC"/>
               <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>
        <!--如果报绑定的错误,在resource中创建文件夹,以“/”分割,和mapper接口同包-->
        <package name="sm.hp.mapper"/>
    </mappers>
</configuration>

1.applicationContext.xml(spring核心配置文件)

接着来看applicationContext.xml做了什么,附上applicationContext.xml文件头

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

</beans>

1.配置数据源

连接池常用的有c3p0、阿里巴巴、spring提供的jdbc等

<!--配置数据源,使用阿里巴巴的连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
    </bean>

2.spring和mybatis的整合

1.配置工厂

    <!--配置工厂相关信息-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--
            加载mybatis核心配置文件
            classpath:去target/classes下寻找该配置文件
        -->
        <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
    </bean>

3.配置mapper动态代理

    <!--
        配置mapper的动态代理
        作用:扫描basePackage路径下的mapper接口/dao接口,然后会使用sqlSession.getMapper(xxxMapper.class)
        其实是给我们basePackage下的接口都生成了一个代理对象,代理对象的名字就是类名首字母小写
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="sm.hp.mapper"/>
    </bean>

配置代理对象的好处:无论你添加了多少个mapper/删除多少个mapper,配置文件就这样。写一个测试类直观的看一下是怎么代理的:

    @Test
    public void fun1() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        /*获取所有bean的名字*/
        String[] bNames = ac.getBeanDefinitionNames();
        for (String name : bNames) {
            System.out.println("ac.getBean(name) : "+ name +"========" + ac.getBean(name));
        }
    }

测试全查方法

    @Test
    public void fun2() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        UserMapper userMapper = ac.getBean("userMapper", UserMapper.class);
        System.out.println(userMapper.findAll());
    }

 上面时直接调用mapper,加上service层测试

首先在配置文件中加入

<!--配置包扫描-->

<context:component-scan base-package="sm.hp.service"/>

来让spring容器给我们管理service,然后我们就能使用了(不用new对象)

    @Test
    public void fun3() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        UserService userService = ac.getBean("userService", UserService.class);
        System.out.println(userService.findAll());
    }

最后的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>
    <!--配置驼峰命名-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--配置别名com.hp.entity.User-->
    <typeAliases>
        <package name="sm.hp.entity"/>
    </typeAliases>
    <mappers>
<!--        <mapper resource="com/hp/mapper/UserMapper"/>-->
        <!--如果报绑定的错误,在resource中创建文件夹,以“/”分割,和mapper接口同包-->
        <package name="sm.hp.mapper"/>
    </mappers>
</configuration>

附项目 项目资源

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尢词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值