写这篇文章思考很久,网上有各种资料提供了这些基础的知识讲解,但是总是在应用的时候存在各种各样小问题。今天开始对目前软件市场比较流行的一些技术进行整理,希望对大家能有所帮助
文章的编写思路会陆续讲解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);
}
}
经过测试,数据正常被插入到数据库中。希望能对大家有所帮助,后续陆续更新新的内容添加进去。另外如果大家有什么需要的话,可以单独给我留言,我会陆续更新技术性的东西。