spring整合Mybatis

spring整合Mybatis

原始mapper开发(整合spring)

项目结构
!](https://img-blog.csdnimg.cn/20191123174623807.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc0MjAzMg==,size_16,color_FFFFFF,t_70)
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>
    <typeAliases>
        <package name="com.xieli.liu.pojo" />
    </typeAliases>
    <!--加入映射文件-->
   <mappers>
       <mapper  resource="com/xieli/liu/mapperxml/UserInfoMapper.xml" />
   </mappers>
</configuration>

spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 使用阿里druid连接池-->
    <bean id="dataSource"   class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--SqlSessionFactory加入spring-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--configLocation属性指定mybatis的核心配置文件-->
        <property name="configLocation" value="classpath:config/sqlMapConfig.xml" />
        <!--dataSource属性指定要用到的连接池-->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="userInfoMapper" class="com.xieli.liu.dao.UserInfoMapperImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
</beans>

mapper.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">
	<!--开启二级缓存-->
	<!--<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>-->

	<resultMap id="userInfoResultMap" type="UserInfo">
		<id column="user_id" property="userId" />
		<result column="group_id" property="groupId" />
		<result column="user_name" property="userName" />
		<result column="nick_name" property="nickName" />
		<result column="user_code" property="userCode" />
		<result column="user_pwd" property="userPwd" />
		<result column="user_type" property="userType" />
		<result column="user_state" property="userState" />
		<result column="is_delete" property="isDelete" />
		<result column="create_by" property="createBy" />
		<result column="create_time" property="createTime" />
		<result column="udate_by" property="udateBy" />
		<result column="update_time" property="updateTime" />
	</resultMap>
	<!-- 查询数据库所有用户信息 -->
	<select id="selectAll" resultMap="userInfoResultMap">
		select * from User_info
	</select>
</mapper>

mapper接口

package com.xieli.liu.dao;

import com.xieli.liu.pojo.UserInfo;

import java.util.List;

/**
 * 
 * @filename UserInfoMapper.java
 * @author hm
 * @date 2018年7月3日下午3:22:20
 */
public interface UserInfoMapper {
	/**
	 * 
	 *@返回类型:UserInfo
	 *@方法功能:测试查询用户列表
	 */
	public List<UserInfo> selectAll() throws Exception;
}

mapper实现类
必须继承SqlSessionDaoSupport

package com.xieli.liu.dao;

import com.xieli.liu.pojo.UserInfo;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

/**
 * Created by Administrator on 2019-11-23.
 */
public class UserInfoMapperImpl extends SqlSessionDaoSupport implements UserInfoMapper {
    @Override
    public List<UserInfo> selectAll() throws Exception {
        SqlSession sqlSession = this.getSqlSession();
        List<UserInfo> list= sqlSession.selectList("test.selectAll");
        return list;
    }
}

测试类

package com.xieli.liu.test;

import com.xieli.liu.dao.UserInfoMapper;
import com.xieli.liu.pojo.UserInfo;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

/**
 * Created by Administrator on 2019-11-23.
 */
public class test {
     // 获取spring
    private ApplicationContext applicationContext;
    @Before
    public void setup(){
        applicationContext=new ClassPathXmlApplicationContext("classpath:config/application-config.xml");
    }

    @Test
    public void selectUser() throws Exception {

        UserInfoMapper userInfoMapper=(UserInfoMapper)applicationContext.getBean("userInfoMapper");
        List<UserInfo> userInfos = userInfoMapper.selectAll();
        for (UserInfo userInfo: userInfos) {
            System.out.println(userInfo.getUserName()+">>>>>>>");
        }
    }
}

遇到问题
java.lang.AbstractMethodError:org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;报错
解决方式:报错原因是,mybatis和spring的jar包冲突,更换不同版本的mybatis jar包

mapper代理开发(整合spring)

编写mapper层代码

package com.xieli.liu.mapper;

import com.xieli.liu.pojo.UserInfo;

import java.util.List;

/**
 * 
 * @filename UserInfoMapper.java
 * @author hm
 * @date 2018年7月3日下午3:22:20
 */
public interface UserInfoMapper {
	/**
	 * 
	 *@返回类型:UserInfo
	 *@方法功能:测试查询用户列表
	 */
	public List<UserInfo> selectAll() throws Exception;
	/**
	 *
	 *@返回类型:int
	 *@方法功能:根据前台传来的用户ID修改用户状态
	 */
	public int updateStatics(UserInfo userInfo);
}
<?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="com.xieli.liu.mapper.UserInfoMapper">
	<!--开启二级缓存-->
	<!--<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>-->

	<resultMap id="userInfoResultMap" type="UserInfo">
		<id column="user_id" property="userId" />
		<result column="group_id" property="groupId" />
		<result column="user_name" property="userName" />
		<result column="nick_name" property="nickName" />
		<result column="user_code" property="userCode" />
		<result column="user_pwd" property="userPwd" />
		<result column="user_type" property="userType" />
		<result column="user_state" property="userState" />
		<result column="is_delete" property="isDelete" />
		<result column="create_by" property="createBy" />
		<result column="create_time" property="createTime" />
		<result column="udate_by" property="udateBy" />
		<result column="update_time" property="updateTime" />
	</resultMap>
	<!-- 查询数据库所有用户信息,用来测试数据库是否连接上 -->
	<select id="selectAll" resultMap="userInfoResultMap">
		select * from User_info
	</select>
	<!-- 根据前台传来的用户ID修改用户状态 -->
	<update id="updateStatics" parameterType="UserInfo">
		UPDATE user_info SET
		user_state=0
		WHERE user_id = #{userId}
	</update>

</mapper>

在spring配置中加入

    <!--mapper代理开发-->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--com.xieli.liu.mapper.UserInfoMapper为mapper接口-->
        <property name="mapperInterface" value="com.xieli.liu.mapper.UserInfoMapper"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 使用阿里druid连接池-->
    <bean id="dataSource"   class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--SqlSessionFactory加入spring-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--configLocation属性指定mybatis的核心配置文件-->
        <property name="configLocation" value="classpath:config/sqlMapConfig.xml" />
        <!--dataSource属性指定要用到的连接池-->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!--原始dao开发-->
    <bean id="userInfoMapper" class="com.xieli.liu.dao.UserInfoMapperImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    <!--mapper代理开发-->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--com.xieli.liu.mapper.UserInfoMapper为mapper接口-->
        <property name="mapperInterface" value="com.xieli.liu.mapper.UserInfoMapper"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
</beans>

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>
    <typeAliases>
        <package name="com.xieli.liu.pojo" />
    </typeAliases>
    <!--加入映射文件-->
   <mappers>
       <package name="com.xieli.liu.mapper"/>
   </mappers>
</configuration>

测试类

package com.xieli.liu.test;

import com.xieli.liu.mapper.UserInfoMapper;
import com.xieli.liu.pojo.UserInfo;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

/**
 * Created by Administrator on 2019-11-23.
 */
public class test {
    private ApplicationContext applicationContext;

    @Before
    public void setup(){
        applicationContext=new ClassPathXmlApplicationContext("classpath:config/application-config.xml");
    }

    @Test
    public void selectUser() throws Exception {

        UserInfoMapper userInfoMapper=(UserInfoMapper)applicationContext.getBean("userMapper");
        List<UserInfo> userInfos = userInfoMapper.selectAll();
        for (UserInfo userInfo: userInfos) {
            System.out.println(userInfo.getUserName()+">>>>>>>");
        }
    }
}

mapper批量加载

spring配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 使用阿里druid连接池-->
    <bean id="dataSource"   class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--SqlSessionFactory加入spring-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--configLocation属性指定mybatis的核心配置文件-->
        <property name="configLocation" value="classpath:config/sqlMapConfig.xml" />
        <!--dataSource属性指定要用到的连接池-->
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="basePackage" value="com.xieli.liu.mapper " />
    </bean>
</beans>

注意事项:
1,使用mapper接口和xml文件必须同名,并且在同一包下,扫描出mapper的been名为mapper类名(首字母小写)
2.使用sqlSessionFactoryBeanName,如果如果引入了db.properties的加载<context:property-placeholder location=“classpath:db.properties”/>,sqlSessionFactory会失效
3.如果加载多个包不能使用通配符,应该使用半角逗号分隔
mybatis配置
不用在进行扫包操作,全部交给spring容器

<?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>
        <package name="com.xieli.liu.pojo" />
    </typeAliases>
</configuration>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

桀骜浮沉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值