Mybatis完整测试代码(进阶动态代理)

   上篇文章的代码是Mybatis入门代码。下面介绍Mybatis的动态代理。在后续的Mybatis的开发都是使用动态代理。

   一 动态代理Q&A

    Q : 为什么需要动态代理?

    A : 传统的方法中,我们Dao需要一个接口,一个实现类,在我们的Test层里面需要new一个实现类的对象,使用实现类的

          方法,当然了,这个方法回去调用mapper.xml对应的id标签。这个过程过程冗余,而动态代理帮我们,在Test层直接

          对mapper.xml中的方法进行操作。也就是我们不需要Dao层的实现类了。

   二 测试代码

    2.1 工程目录:

   可以看到我们的Dao层没有了实现类。

   

   2.2 test层的myTest代码:

   这里关键的就是@before的语句,后续的test代码都是单表查询的实例,有兴趣可以试试。几个点说一下:

    1)第一步获取sqlseesion

    2)第二步获取获取映射,这里的getMapper括号内的参数后续会用到

    3)记得提交事务,特别是增删改要记得提交。

package test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import beans.Student;
import dao.IStudentDao;
import utils.myUtils;

public class myTest {
	
	private IStudentDao sdao;
	private SqlSession sqlsession;

	@Before
	public void before() {
		sqlsession = myUtils.getsqlsession();
		sdao = sqlsession.getMapper(IStudentDao.class);
	}
	
	@After
	public void after() {
		if(sqlsession!=null) {
			sqlsession.close();
		}
	}
	
	@Test
	public void test1() {
		Student student = new Student("张si",23,93.2);
		sdao.insertStudent(student);
		sqlsession.commit();
	}
	
	@Test
	public void test2() {
		Student student = new Student("黄update",23,93.2);
		sdao.insertStudentCacheId(student);
		System.out.println(student);
		sqlsession.commit();
	}
	
	@Test
	public void test3() {
		sdao.deletStudentById(21);
		sqlsession.commit();
	}
	
	@Test
	public void test4() {
		Student student = new Student("黄update",23,93.2);
		student.setId(15);
		sdao.updateStudent(student);
		sqlsession.commit();
	}
	
	@Test
	public void test5() {
		List<Student> students = sdao.selectAllStudents();
		for(Student xx : students) {
			System.out.println(xx);
		}
		sqlsession.commit();
	}
	
	@Test
	public void test6() {
		Map<String, Object> students = new HashMap<String, Object>();
		students = sdao.selectAllStudentMap();
		System.out.println(students.get("张三"));
		sqlsession.commit();
	}
	
	@Test
	public void test7() {
		Student student = sdao.selectStudentById(6);
		System.out.println(student);
		sqlsession.commit();
	}
	
	@Test
	public void test8() {
		String a = "张";
		List<Student> student = sdao.selectAllStudentsByName(a);
		for(Student xx : student) {
			System.out.println(xx);
		}
		sqlsession.commit();
	}		
}

2.3 Mapper文件:

关键的就是:

<mapper namespace="dao.IStudentDao">

<?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="dao.IStudentDao">
	<insert id="insertStudent" parameterType="Student">
		insert into student(sname,age,score) value(#{sname},#{age},#{score})
	</insert>	
	<!--获取id值到student的成员变量  -->
	<insert id="insertStudentCacheById" parameterType="Student">
		insert into student(sname,age,score) value(#{sname},#{age},#{score})
		<selectKey resultType="int" keyProperty="id" order="AFTER">
			select @@identity
		</selectKey>
	<!--根据id值进行删除 -->	
	</insert>
	<delete id="deletStudentById"  parameterType="Student">
		delete from student where id=#{xxx}
	</delete>	
	<!--根据id值进行修改-->	
	<update id="updateStudent" parameterType="Student">
		update student set sname=#{sname},age=#{age},score=#{score} where id=#{id}
	</update>
	<!--选择所有student  -->
	<select id="selectAllStudents" resultType="Student">
		select sname,age,score from student
	</select>
	
	<select id="selectStudentById" resultType="Student">
		select id,sname,age,score from student where id=#{ddd}
	</select>
	
	<!--模糊查询  -->
	<select id="selectAllStudentsByName" resultType="Student">
		select id,sname,age,score from student where sname like '%' #{name} '%'
	</select>
</mapper>

   三 总结

    代码很简单:

   1 sqlsession.getmapper()

   2 namespace="Dao全名"

   完成以上两个代码就能实现,同过接口直接访问映射文件的sql操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值