Spring 整合 MyBatis

环境: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工具的博客)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值