spring集成Mybatis框架,junit测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring集成Mybatis框架,junit测试相关的知识,希望对你有一定的参考价值。
1、Spring的xml文件配置如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xsi:schemaLocation=" 8 http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 10 http://www.springframework.org/schema/tx 11 http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 12 http://www.springframework.org/schema/context 13 http://www.springframework.org/schema/context/spring-context.xsd 14 http://www.springframework.org/schema/aop 15 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 16 "> 17 18 <!--1、 读取propertiser配置文件 --> 19 <context:property-placeholder location="classpath:jdbc.properties"/> 20 <!--2、 JNDI获取数据源(使用dbcp连接池) --> 21 <!-- 当srping容器停止销毁的时候要触发close关闭连接池 ,单例模式--> 22 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 23 destroy-method="close" scope="singleton"> 24 <property name="driverClassName" value="${driver}"/> 25 <property name="url" value="${url}"/> 26 <property name="username" value="${jdbc.username}"/> 27 <property name="password" value="${password}"/> 28 29 </bean> 30 31 <!-- 事物管理 采用srping-jdbc的事物管理--> 32 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 33 <property name="dataSource" ref="dataSource"/> 34 </bean> 35 36 <!-- 配置mybatis 的sqlsessionFactory --> 37 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 38 <property name="dataSource" ref="dataSource"/> 39 <property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 引入mybits的配置文件 --> 40 <property name="mapperLocations" value="classpath:com/bdqn/dao/*.xml"/><!-- 引入xml的mapper文件 --> 41 </bean> 42 43 <!-- 配置mybatis的 sqlsessionTemplate --> 44 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 45 <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/><!-- 使用构造注入sqlSessionFactory,获得SqlSessionTemplate --> 46 </bean> 47 48 <!-- 把SqlSessionTemplate注入到测试类,测试类就可以使用SqlSessionTemplate了 --> 49 <bean id="employeeTest" class="com.bdqn.test.EmployeeTest"> 50 <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/> 51 52 </bean> 53 </beans>
2、Mybatis的xml配置文件如下:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <typeAliases> 7 <package name="com.bdqn.po"/><!-- 整个po包里面的类都设自己类名为别名 --> 8 </typeAliases> 9 10 </configuration>
3、由于mybatis的sql语句是写在xml文件里面的,本次采用的是数据源连接池。所以在spring的xml文件中先引入测试类:
<bean id="employeeTest" class="com.bdqn.test.EmployeeTest">
用juit测试sql时,再把spring的xml文件一次性load到上下文:ApplicationContext中,
再通过ApplicationContext.getBean("employeeTest") 拿到测试类,就可以在整个spring容器依赖关系中操作了。拿到测试类,调用sqlsession模板:
sqlSessionTemplate ,运用模板的各种增删查改方法,代码如下:
1 package com.bdqn.test; 2 3 4 import java.util.List; 5 6 import org.apache.log4j.Logger; 7 import org.junit.Test; 8 import org.mybatis.spring.SqlSessionTemplate; 9 import org.springframework.context.ApplicationContext; 10 import org.springframework.context.support.ClassPathXmlApplicationContext; 11 12 import com.bdqn.po.Employee; 13 14 public class EmployeeTest { 15 private Logger logger = Logger.getLogger(EmployeeTest.class); 16 17 private SqlSessionTemplate sqlSessionTemplate; 18 protected ApplicationContext aplcation = null; //注意引包 19 private EmployeeTest test; 20 21 22 @Test 23 public void getEmployeeList() { 24 aplcation = new ClassPathXmlApplicationContext("applicationContext-spring.xml");//初始化上下文; 25 test = (EmployeeTest) aplcation.getBean("employeeTest"); 26 27 List<Employee> list = test.getSqlSessionTemplate().selectList("com.bdqn.dao.EmployeeMapper.getEmployeeList"); 28 logger.debug("Employee-----"+list.size()); 29 30 31 } 32 33 34 public SqlSessionTemplate getSqlSessionTemplate() { 35 return sqlSessionTemplate; 36 } 37 public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { 38 this.sqlSessionTemplate = sqlSessionTemplate; 39 } 40 41 42 43 }
备注:
运行时报了个数据库连接错误:
Access denied for user ‘Administrator‘@‘localhost‘ (using password: YES)
找了很久都找不到原因,用户名,密码,驱动等绝对是没有错的,后来在xml文件中直接写入值就没有问题,就知道问题出在这个properties文件了,一个一个改了测试,发现是这个:username=root上,只要改一下这个username就好了,百度查了说是可能在引入时跟别的username重名了。---浪费了一晚上的时间!!!谨记!!!
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/testdb
username=root
password=123456
以上是关于spring集成Mybatis框架,junit测试的主要内容,如果未能解决你的问题,请参考以下文章
Spring 集成框架中 ResponseEntity<?> 的 Junit Mockito 测试用例
Java之Spring Boot入门到精通IDEA版SpringBoot整合其他框架Junit,Redis,MyBatis(一篇文章精通系列)中