spring-mybatis整合测试

1 篇文章 0 订阅

写这篇文章思考很久,网上有各种资料提供了这些基础的知识讲解,但是总是在应用的时候存在各种各样小问题。今天开始对目前软件市场比较流行的一些技术进行整理,希望对大家能有所帮助

文章的编写思路会陆续讲解spring、springMVC、apache shiro、mybatis、druid等目前主流的一些技术及整合。

 

今天主要说的是spring框架和mybatis框架的整合及单元测试方式。

 

mybatis是一个非常好用的轻量级的持久层框架,主要分三层架构完成持久层的功能开发

> 基础支持层:和数据库交互进行实际的数据操作

> 数据操作层:API调用数据操作进行数据的CRUD操作

> API接口层:提供给应用程序调用的API

 

spring是一个容器框架,作为托盘容器,是目前软件开发市场最常用也是最流行的框架。

 

spring和mybatis的整合在网上有各种各样的资源和资料,但是整合大部分存在多多少少的问题。这里进行一些简单的整合和测试,主要以功能的单元测试为案例进行整合说明

 

一 创建测试数据库

# 创建数据库
CREATE DATABASE mybatis;

USE mybatis;

# 创建用户表
CREATE TABLE user(
  userId INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号,主键',
  username VARCHAR(100) COMMENT '用户账号',
  password VARCHAR(100) COMMENT '用户密码',
  salt VARCHAR(100) COMMENT '盐值',
  nickname VARCHAR(100) COMMENT '用户昵称',
  available BOOL COMMENT '是否有效'
);

# 创建角色表
CREATE TABLE role(
  roleId INT AUTO_INCREMENT PRIMARY KEY COMMENT '角色编号,主键',
  rname VARCHAR(50) COMMENT '角色名称',
  rdesc VARCHAR(100) COMMENT '角色描述',
  available BOOL COMMENT '是否有效'
);

# 创建资源表
CREATE TABLE resource(
  resourceId INT AUTO_INCREMENT PRIMARY KEY COMMENT '资源编号,主键',
  url VARCHAR(200) COMMENT '资源请求地址',
  permission VARCHAR(100) COMMENT '权限名称',
  permdesc VARCHAR(100) COMMENT '权限描述',
  available BOOLEAN COMMENT '是否有效'
);

# 创建用户-角色关联表
CREATE TABLE user_role(
  urId INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户-角色关联编号',
  u_id INT COMMENT '用户编号',
  r_id INT COMMENT '角色编号'
);

# 创建角色-权限关联表
CREATE TABLE role_permission (
  rpId INT AUTO_INCREMENT PRIMARY KEY COMMENT '角色-权限关联编号',
  r_id INT COMMENT '角色编号',
  permission VARCHAR(100) COMMENT '权限名称'
);


二 项目搭建

1. 创建java项目_Java Project

2. 导入需要的jar包

> spring相关jar包[spring-aop/spring-aspectj/spring-beans/spring-context/spring-core/spring-expression/spring-intrument/spring-jdbc/spring-orm/spring-test/spring-tx]

> aop相关jar包[aopalliance/aspectjrt/aspectweaver]

> commons-logging

> druid连接池jar包[druid]

> 数据库驱动[mysql-connect-java]

> mybatis相关jar包[mybatis/mybatis-spring]

3.创建spring-mybatis.xml配置文件

三 编辑spring-mybatis.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

	<!-- 1.配置数据源 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close"> 
		<!-- 基本属性 url、user、password -->
		<property name="url"
			value="jdbc:mysql://localhost:3306/mybatis" />
		<property name="username" value="root" />
		<property name="password" value="root" />
		<property name="connectionProperties" value="com.mysql.jdbc.Driver"></property>

		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="1" />
		<property name="minIdle" value="1" />
		<property name="maxActive" value="20" />

		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="60000" />

		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000" />

		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="300000" />

		<property name="validationQuery" value="SELECT 'x'" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />

		<!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> <!-- 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。 -->
		<property name="poolPreparedStatements" value="false" />
		<property name="maxPoolPreparedStatementPerConnectionSize"
			value="20" />

		<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
		<property name="filters" value="stat" />

	</bean>

	<!-- 2.配置SqlSessionFactry -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="typeAliasesPackage" value="com.laomu.mybatis.model"></property>
	</bean>
	
	<!-- 3.配置自动扫描映射—— -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.laomu.mybatis.mapper"></property>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>

	<!-- 4.配置事务管理 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>


 


四 创建实体测试类及映射文件

User.java【com.laomu.mybatis.model】

package com.laomu.mybatis.model;
/**
 * @author IT老牟
 * @version V1.00
 * @time 2016年5月21日-上午10:52:57
 * @see qq:1007821300
 * @see qq交流群:185745030
 * @see 用户实体类
 * @see copyright
 */
public class User {
	private int userId;// 用户编号
	private String username;// 用户账号
	private String password;// 用户密码
	private String salt;// 盐值
	private String nickname;// 昵称
	private Boolean available;// 是否有效

	public User(String username, String password, String salt, String nickname, Boolean available) {
		super();
		this.username = username;
		this.password = password;
		this.salt = salt;
		this.nickname = nickname;
		this.available = available;
	}

	public User(int userId, String username, String password, String salt, String nickname, Boolean available) {
		super();
		this.userId = userId;
		this.username = username;
		this.password = password;
		this.salt = salt;
		this.nickname = nickname;
		this.available = available;
	}

	public User() {
		super();
		// TODO Auto-generated constructor stub
	}

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSalt() {
		return salt;
	}

	public void setSalt(String salt) {
		this.salt = salt;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public Boolean getAvailable() {
		return available;
	}

	public void setAvailable(Boolean available) {
		this.available = available;
	}

}

接口文件UserMapper.java【com.laomu.mybatis.mapper】

package com.laomu.mybatis.mapper;

import java.util.List;

import com.laomu.mybatis.model.User;

/**
 * @author IT老牟
 * @version V1.00
 * @time 2016年5月21日-上午10:53:58
 * @see qq:1007821300
 * @see qq交流群:185745030
 * @see 映射接口文件
 * @see copyright
 */
public interface UserMapper {
	
	public int add(User user);
	
	public int delete(int id);
	
	public int update(User user);
	
	public User findById(int id);
	
	public List<User> findAll();
}


定义SQL映射文件userMapper.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">
<!-- 
	注意:这里的namespace的值必须和映射接口的全限定名称一致
 -->
<mapper namespace="com.laomu.mybatis.mapper.UserMapper">
	<!-- 
	增加数据
		注意:这里的id必须和映射接口中对应的方法名称一致
	 -->
	 <insert id="add">
	 	INSERT INTO user(username, password, salt, nickname, available) 
	 	VALUES (#{username},#{password},#{salt},#{nickname},#{available});
	 </insert>
	 
	 <delete id="delete">
	 	DELETE FROM users WHERE userId = #{userId}
	 </delete>
	 
	 <update id="update">
	 	UPDATE users SET username = #{username} , password = #{password},
	 		salt = #{salt}, nickname = #{nickname}, available = #{available} WHERE userId = #{userId}
	 </update>
	 
	 <select id="findById" resultType="com.laomu.mybatis.model.User">
	 	SELECT * FROM users WHERE userId = #{userId}
	 </select>
	 
	 <select id="findAll">
	 	SELECT * FROM users
	 </select>
</mapper>



 

五 使用Spring测试方案进行单元测试

创建测试类:MyBatisTest.java【com.laomu.mybatis.test】

package com.laomu.mybatis.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.laomu.mybatis.mapper.UserMapper;
import com.laomu.mybatis.model.User;

@RunWith(SpringJUnit4ClassRunner.class)// 添加spring测试方案
@ContextConfiguration("/spring-mybatis.xml")// 指定spring配置文件位置
public class MyBatisTest {
	
	@Autowired
	private UserMapper userMapper;
	
	@Test
	public void testInsert() {
		User user = new User("admin", "admin", "saltstr", "老牟", true);
		
		userMapper.add(user);
	}

}


经过测试,数据正常被插入到数据库中。希望能对大家有所帮助,后续陆续更新新的内容添加进去。另外如果大家有什么需要的话,可以单独给我留言,我会陆续更新技术性的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值