您的位置:首页 > 编程语言 > Java开发

spring-mybatis整合测试

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

文章的编写思路会陆续讲解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);
}

}


经过测试,数据正常被插入到数据库中。希望能对大家有所帮助,后续陆续更新新的内容添加进去。另外如果大家有什么需要的话,可以单独给我留言,我会陆续更新技术性的东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息