mybatis 通过配置父类数据源连接和关闭数据,进行junit单元测试
来源:https://blog.csdn.net/Bigbig_lyx/article/details/80646005
解决问题,单元测试没经过单独配置,每个测试方法中要添加配置数据源
一:配置父类
import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass; /**
* 提供配置数据源连接和关闭数据连接
*/
public class BaseMapper { private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void init(){
try{
Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch(IOException ignore){
ignore.printStackTrace();
}
} public SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
} }
一:新建单元测试类UserMapperTestEx.java,继承自测试基类BaseMapperTest.java
package tk.mybatis.simple.mapper; import java.lang.reflect.Proxy;
import java.util.Date;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import junit.framework.Assert;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser; public class UserMapperTestEx extends BaseMapperTest{ @Test
public void testSelectById(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user = userMapper.selectById(1l);
printCountryList(user);
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} private void printCountryList(SysUser user){
System.out.printf("%-4d%4s%4s\n",
user.getId(),
user.getUserEmail(),
user.getUserPassword(),
user.getUserEmail(),
user.getUserInfo(),
user.getHeadImg(),
user.getCreateTime()
);
} @Test
public void selectById(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user = userMapper.selectById(1l);
Assert.assertNotNull(user);
Assert.assertEquals("admin", user.getUserName());
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void selectByAll(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysUser> userList = userMapper.selectAll();
Assert.assertNotNull(userList);
Assert.assertTrue(userList.size()>0);
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void selectRolesByUserId1(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysRole> roleList = userMapper.selectRolesByUserId1(1l);
Assert.assertNotNull(roleList);
for(SysRole role:roleList){
System.out.println(role.toString1());
}
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void selectRolesByUserId2(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysRole> roleList = userMapper.selectRolesByUserId2(1l);
for(SysRole role:roleList){
System.out.println(role.toString2());
}
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void insert(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user=new SysUser();
user.setUserName("liuyx");
user.setUserPassword("eazytec@123");
user.setUserEmail("liuyexiang@byosoft.com.cn");
user.setUserInfo("liuyx info");
user.setHeadImg(new byte[]{1,2,3,4,5,6,7,8,9,0});
user.setCreateTime(new Date());
int result=userMapper.insert(user);
Assert.assertEquals(1, result);
Assert.assertNull(user.getId());
} finally {
// TODO: handle finally clause
//为了不影响其他操作,设置为回滚,数据库自增长序列仍在进行,
//默认的sqlSessionFactory.openSession()是不自动提交的
//不手动执行commit就不会提交到数据库中
//sqlSession.rollback();
sqlSession.commit();
sqlSession.close();
}
} @Test
public void insert2(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user=new SysUser();
user.setUserName("liuyx");
user.setUserPassword("eazytec@123");
user.setUserEmail("liuyexiang@byosoft.com.cn");
user.setUserInfo("liuyx info");
user.setHeadImg(new byte[]{1,2,3,4,5,6,7,8,9,0});
user.setCreateTime(new Date());
int result=userMapper.insert2(user);
Assert.assertEquals(1, result);
Assert.assertNotNull(user.getId());
} finally {
// TODO: handle finally clause
//sqlSession.rollback();
sqlSession.commit();
sqlSession.close();
}
} @Test
public void update(){
SqlSession sqlSession=getSqlSession(); try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
SysUser user = userMapper.selectById(1001l);
System.out.println("获取id为1001的用户userName,更新前为:" + user.getUserName());
user.setUserName("test" + new Date().toString());
user.setUserEmail("test@byosoft.com.cn");
int result = userMapper.updateById(user);
user = userMapper.selectById(user.getId());
System.out.println("获取id为1001的用户userName为,更新后为:" + user.getUserName());
} finally {
// TODO: handle finally clause
sqlSession.commit();
sqlSession.close();
}
} @Test
public void delete(){
SqlSession sqlSession=getSqlSession(); try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//int result = userMapper.deleteById(1003l);
int result2=userMapper.deleteByUser(userMapper.selectById(1004l));
} finally {
// TODO: handle finally clause
sqlSession.commit();
sqlSession.close();
}
} /**
* 多参数sql
*/
@Test
public void selectRolesByUserIdAndRoleEnabled(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysRole> roleList = userMapper.selectRolesByUserIdAndRoleEnabled(1l, 1,"admin","test");
for(SysRole role:roleList){
System.out.println(role.toString1());
}
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} /**
* 简单实现动态代理
*/
@Test
public void testProxy(){
SqlSession sqlSession=getSqlSession();
MyMapperProxy userMapperProxy=new MyMapperProxy(UserMapper.class, sqlSession);
UserMapper userMapper=(UserMapper) Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class[] {UserMapper.class},
userMapperProxy
);
System.out.println("testProxy");
List<SysUser> user=userMapper.selectAll();
}
}
mybatis 通过配置父类数据源连接和关闭数据,进行junit单元测试的更多相关文章
- springboot入门系列(四):SpringBoot和Mybatis配置多数据源连接多个数据库
SpringBoot和Mybatis配置多数据源连接多个数据库 目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑.在SpringBo ...
- 【Mybatis】MyBatis之配置自定义数据源(十一)
本例是在[Mybatis]MyBatis之配置多数据源(十)的基础上进行拓展,查看本例请先学习第十章 实现原理 1.扩展Spring的AbstractRoutingDataSource抽象类(该类充当 ...
- [教程] Spring+Mybatis环境配置多数据源
一.简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功 ...
- springboot 2.1.3 + mybatis + druid配置多数据源
在一些大型的项目中,通常会选择多数据库来满足一些业务需求,此处讲解使用springboot.mybatis和druid来配置多数据源 1.依赖配置 pom文件引入相关依赖 <dependency ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
- 【Mybatis】MyBatis之配置多数据源(十)
在做项目的过程中,有时候一个数据源是不够,那么就需要配置多个数据源.本例介绍mybatis多数据源配置 前言 一般项目单数据源,使用流程如下: 单个数据源绑定给sessionFactory,再在Dao ...
- Spring系列 之数据源的配置 数据库 数据源 连接池的区别
Spring系列之数据源的配置 数据源,连接池,数据库三者的区别 连接池:这个应该都学习过,比如c3p0,druid等等,连接池的作用是为了提高程序的效率,因为频繁的去创建,关闭数据库连接,会对性能有 ...
- Confluence 6 新 Confluence 安装配置一个数据源连接
如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...
- Spring Boot + MyBatis + Pagehelper 配置多数据源
前言: 本文为springboot结合mybatis配置多数据源,在项目当中很多情况是使用主从数据源来读写分离,还有就是操作多库,本文介绍如何一个项目同时使用2个数据源. 也希望大家带着思考去学习!博 ...
随机推荐
- python 验证客户端的合法性
目的:对连接服务器的客户端进行判断 # Server import socket import hmac import os secret_key = bytes('tom', encoding='u ...
- path_info和get_full_path()的区别
1.get_full_path() 获取的url路径包含参数 2.path_info 获取的路径不包含参数 注意:获取的路径都不包含协议 IP 和端口 3.补充 sesssion http://127 ...
- 1.HelloWorld 仪式感
HelloWorld: 1.随便新建一个文件夹,存放代码. 2.新建一个java文件 文件后缀改为 .java Hello.java 系统可能没显示文件后缀名,我们需要手动打开 3.编写代码 publ ...
- CTF中关于XXE(XML外部实体注入)题目两道
题目:UNCTF-Do you like xml? 链接:http://112.74.37.15:8008/ hint:weak password (弱密码) 1.观察后下载图片拖进WINHEX发现提 ...
- 深入NodeJS模块os - 与操作系统“打交道”
读了 os 模块的文档,研究了几个有意思的问题:
- xlwings excel(四)
前言 当年看<别怕,Excel VBA其实很简单>相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人.而后,发现出了第二版,买之收藏.之后,发现Python这一编程语言,简直是逆天, ...
- 个人第四次作业--Alpha项目测试
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https://www.cn ...
- Python中的 if __name__ == '__main__' 是什么意思?
最近在看Python代码的时候,因为是Python初学者,看到这个if __name__ == '__main__' 的判断,并且下面还有代码语句,看了其他地方的说明,还是没搞明白是什么意思, 在看到 ...
- 红黑树(依照4阶B树C++实现)
我在编写红黑树的时候类比这2-3-4树的原理来书写 语言标准:C++11 在Ubuntu 18.04上通过编译和测试 从刚开始只听说过这个概念,到学习,再到编出代码,然后在进行测试,最后完成代码一共花 ...
- JVM第一弹
JVM第一弹 基本概念 JVM是可运行java代码的假想计算机,包括一套字节码指令集,一组寄存器,一个栈,一个垃圾回收.堆和一个存储方法域.JVM是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...