环境:Spring 版本 3.2.3.RELEASE
MyBatis 版本 3.2.8
首先建立Maven工程,如果不懂如何建立的可以参考我的另一篇文章Eclipse中如何使用Maven
建立完成之后,打开pom.xml,在</properties>后面添加下面的代码,(里面用到了 spring、mybatis、mysql和testng)
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version> ${org.testng.version} </version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version> ${org.springframework.version} </version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version> ${org.springframework.version} </version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version> ${org.springframework.version} </version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version> 3.2.6.RELEASE </version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
</dependencies>
之后在src/main/resouces目录下新建一个config目录,在这个目录中新建一个spring-context.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"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:p="http://www.springframework.org/schema/p"
default-autowire="byName"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.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">
<context:annotation-config />
<context:component-scan base-package="com.jackhua.mybatiSpring" />
<aop:aspectj-autoproxy />
<task:annotation-driven />
<!-- 用spring的driverManagerDataSource来初始化dataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myBatis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"/>
<property name="username" value="wenda"/>
<property name="password" value="1234"/>
</bean>
<!-- 用sqlSessionFactoryBean来实例化sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- Mapper扫描配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 定位的annotation -->
<property name="annotationClass" value="org.springframework.stereotype.Repository"/>
<!-- 默认扫描的包 -->
<property name="basePackage" value="com.jackhua.mybatiSpring.mapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
再在src/main/java下面建立如下目录: domain代表领域对象(你可以理解为数据库表对应的对象),mapper(相当于dao 数据访问对象),service(业务服务类)
这里的UserMapper是一个接口,代码如下:
package com.jackhua.mybatiSpring.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import com.jackhua.mybatiSpring.domain.User;
@Repository
public interface UserMapper {
@Select("SELECT * FROM vincent_user WHERE name = #{userName}")
User getUser(@Param("userName") String userName);
}
UserService代码如下:
package com.jackhua.mybatiSpring.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.jackhua.mybatiSpring.domain.User;
import com.jackhua.mybatiSpring.mapper.UserMapper;
@Component
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserByUserName(String userName) {
return userMapper.getUser(userName);
}
}
接着选中userService,右键单击,选择Other
在弹出的对话框中输入‘testng’,选择 testng class
点击next,选择你想要的方法,点击finish
会在src/test/java中生成一个名为UserserviceTest的类,代码如下:
package com.jackhua.mybatiSpring.service;
import org.testng.annotations.Test;
public class UserServiceTest {
@Test
public void getUserByUserName() {
throw new RuntimeException("Test not implemented");
}
}
将这个类继承AbstractTestNGSpringContextTests类(Spring里面支持testng的类),并且添加一个@ContextConfiguration的注解,配置spring-context.xml的加载路径,然后将Userservice注入进来,代码如下:
package com.jackhua.mybatiSpring.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.jackhua.mybatiSpring.domain.User;
@ContextConfiguration(locations={"/config/spring-context.xml"})
public class UserServiceTest extends AbstractTestNGSpringContextTests{
@Autowired
private UserService userService;
@Test
public void getUserByUserName() {
User user = userService.getUserByUserName("tom");
Assert.assertNotNull(user);
Assert.assertEquals(user.getAge(), Integer.valueOf(6));
}
}
如果你的数据库和我设计的字段是相同的话,那么运行单元测试即可看到成功。
我的数据库表是vincent_user
(转载本文请注明出处 JAVA程序猿的工具箱(第一个专门教你使用JAVA工具的博客)