spring整合Mybatis
原始mapper开发(整合spring)
项目结构
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&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&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&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>