4JUnit单元测试与单表的CURD操作

1、JUnit单元测试

可以同时存在多个测试方法,每一个测试方法都可以单独运行,不受其他测试方法的影响。
@Test的设置:
方法名可以任意取,但必须是public void,需要在方法头上加注解@Test表明此方法可进行单元测试,第一次使用时需要导入JUnit。
@Test的使用:
需要测试哪一个方法时,就把鼠标光标放在此方法名上,然后在运行。不能放在其他位置。
@Before的使用:
使用@Before的方法会在需要测试的方法执行之前执行,此方法一般用于搭建测试方法的执行环境。
@After的使用:
使用@Before的方法会在需要测试的方法执行之前执行,此方法一般用于资源的释放。
之前的测试类:

public class MyView {
	public static void main(String[] args) {
		IStudentService service = new StudentServiceImpl();
		Student student = new Student("口口", 23);
		service.addStudent(student);
    }
}

这样的弊端就是要测试某一项功能,就需要注释其他的代码,否则代码会全部执行。
使用JUnit单元测试之后:

public class MyView {
	IStudentService service;
	//此方法一般用于搭建测试方法的执行环境
	@Before
	public void Before() {
		System.out.println("=========before=========");
		service = new StudentServiceImpl();
	}
	//此方法一般用于资源的释放
	@After
	public void After() {
		System.out.println("--------after-----------");
	}
	@Test
	public void test01() {
		Student student = new Student("张三", 23);
		service.addStudent(student);
	}
}

当增删改查的语句多的之后,好处就体现出来了。

2、单表的CURD

现在的结构如图所示:
在这里插入图片描述
实体类Student.java:

@NoArgsConstructor
@Getter
@Setter
@ToString
public class Student {//使用了lombok.jar包
	private Integer id;
	private String name;
	private Integer age;
	public Student(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}
}

dao层IStudentDao.java接口:

public interface IStudentDao {
	void insertStudent(Student student);//插入
	void deleteById(int id);//删除
	void updateStudent(Student student);//修改
	Student selectById(int id);//根据id查询
}

dao层StudentDaoImpl.java实现类:

public class StudentDaoImpl implements IStudentDao {
	private SqlSession session;
	@Override
	public void insertStudent(Student student) {
		try {
			SqlSession session = MyBatisUtil.getSqlSession();
			//4、操作
			session.insert("insertStu",student);
			//5、提交
			session.commit();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (session != null) {
				//6、关闭
				session.close();
			}
		}
	}
	@Override
	public void deleteById(int id) {
		try {
			SqlSession session = MyBatisUtil.getSqlSession();
			//4、操作
			session.delete("deleteById",id);
			//5、提交
			session.commit();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (session != null) {
				//6、关闭
				session.close();
			}
		}
		
	}
	@Override
	public void updateStudent(Student student) {
		try {
			SqlSession session = MyBatisUtil.getSqlSession();
			//4、操作
			session.update("updateStudent",student);
			//5、提交
			session.commit();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (session != null) {
				//6、关闭
				session.close();
			}
		}
		
	}
	@Override
	public Student selectById(int id) {
		Student student = null;
		try {
			SqlSession session = MyBatisUtil.getSqlSession();
			//4、操作
			student = session.selectOne("selectById",id);
			//5、提交
			session.commit();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (session != null) {
				//6、关闭
				session.close();
			}
		}
		return student;
	}
}

目前还有很多重复的代码,不过之后使用mapper的动态代理就可以解决这个问题
mapper.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">
 <mapper namespace="test">
 	
<!--  	增删改的parameterType属性可以省略 -->
 	<insert id="insertStu">
 		insert into student(name,age) value (#{name}, #{age})
 	</insert>
 	<delete id="deleteById" parameterType="Student">
 		delete from student where id=#{id}
 	</delete>
 	<update id="updateStudent">
 		update student set name=#{name},age=#{age} where id=#{id}
 	</update>
 	<!-- resultType指定的是需要将结果集封装成指定的对象 -->
 	<select id="selectById" resultType="Student">
 		select * from student where id=#{id}
 	</select>
 </mapper>

service层的IStudentService.java接口:

public interface IStudentService {

	void addStudent(Student student);//添加
	void removeById(int id);//删除
	void modifyStudent(Student student);//修改
	Student findById(int id);//根据id查询
	
}

service层的StudentServiceImpl.java实现类:

public class StudentServiceImpl implements IStudentService {
	IStudentDao dao = new StudentDaoImpl();
	@Override
	public void addStudent(Student student) {
		dao.insertStudent(student);
	}
	@Override
	public void removeById(int id) {
		dao.deleteById(id);
		
	}
	@Override
	public void modifyStudent(Student student) {
		dao.updateStudent(student);
		
	}
	@Override
	public Student findById(int id) {
		return dao.selectById(id);
	}
	
	
}

view层的MyView.java(作为测试类):

public class MyView {

IStudentService service;
	
	//此方法一般用于搭建测试方法的执行环境
	@Before
	public void Before() {
		System.out.println("=========before=========");
		service = new StudentServiceImpl();
	}
	//此方法一般用于资源的释放
	@After
	public void After() {
		System.out.println("--------after-----------");
	}
	@Test
	public void test01() {
		Student student = new Student("张三", 23);
		service.addStudent(student);
	}
	@Test
	public void test02() {
		service.removeById(50);
	}
	@Test
	public void test03() {
		Student student = new Student("王五",22);
		student.setId(49);
		service.modifyStudent(student);
	}
	@Test
	public void test04() {
		Student stu = service.findById(53);
		System.out.println(stu);
	}
	
}

工具类MyBatisUtil.java:

public class MyBatisUtil {
		
	private static SqlSessionFactory factory;
	public static SqlSession getSqlSession() throws IOException {
		
		if (factory == null) {
			//将主配置文件加载到内存
			InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
			factory = new SqlSessionFactoryBuilder().build(inputStream);
		}
		SqlSession session = factory.openSession();
		return session;
	}
}

属性文件jdbc.properties:

jdbc.src=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///exam
jdbc.user=root
jdbc.password=991018

日志文件log4j.properties:

##define an appender named console
log4j.appender.console=org.apache.log4j.ConsoleAppender
#The Target value is System.out or System.err
log4j.appender.console.Target=System.out
#set the layout type of the apperder
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
#log level: fatal error warn info debug trace
log4j.appender.console.layout.ConversionPattern=[%-5p] %m%n

##define a logger
#fatal error warn info debug trace
#log4j.rootLogger=debug,console
log4j.logger.test=trace,console

主配置文件mybatis.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<!-- 注册属性文件 -->
	<properties resource="jdbc.properties"/>
	<!-- 为实体类取别名 -->
	<typeAliases>
		<package name="com.beans"/>
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.src}" />
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.user}" />
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 注册映射文件 -->
	<mappers>
		<mapper resource="com/dao/mapper.xml" />
	</mappers>
</configuration>

lib文件夹下的jar包有
log4j-1.2.17.jar
lombok-1.16.18.jar
mybatis-3.4.5.jar
mysql-connector-java-5.1.7-bin.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚定你坚定的步伐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值