zoukankan      html  css  js  c++  java
  • ssm框架整合入门系列——修改和测试mapper

    修改maper--添加自己的sql查询方法

    1. 修改EmployeeMapper.java 添加:
        List<Employee> selectByExample(EmployeeExample example);
    
        Employee selectByPrimaryKey(Integer empId);
        
        List<Employee> selectByExampleWithDept(EmployeeExample example);
    
        Employee selectByPrimaryKeyWithDept(Integer empId);
    
    1. 修改EmployeeMapper.xml 添加自己的自定义语句,如其中带注释部分:
      <resultMap type="com.liantao.crud.bean.Employee" id="WithDeptResultMap">
      	<id column="emp_id" jdbcType="INTEGER" property="empId" />
        <result column="emp_name" jdbcType="VARCHAR" property="empName" />
        <result column="gender" jdbcType="CHAR" property="gender" />
        <result column="email" jdbcType="VARCHAR" property="email" />
        <result column="d_id" jdbcType="INTEGER" property="dId" />
        <!-- 指定联合查询出的部门字段的封装 -->
        <association property="department" javaType="com.liantao.crud.bean.Department">
        	<id column="dept" property="deptId"></id>
        	<result column="dept_name" property="deptName"></result>
        </association>
      </resultMap>
      
      <sql id="WithDept_Column_List">
      	e.emp_id, e.emp_name, e.gender, e.email, e.d_id,d.dept_id,d.dept_name
      </sql>
      
      <!-- 
      	Employee selectByPrimaryKey(Integer empId);
        
        List<Employee> selectByExampleWithDepat(EmployeeExample example);
       -->
       <!-- 查询员工同时带部门信息 -->
    	<select id="selectByExampleWithDept" resultMap="WithDeptResultMap">
    	select
    	  <if test="distinct">
    	    distinct
    	  </if>
    	  <include refid="WithDept_Column_List" />
    	  FROM tbl_emp e
    	  LEFT JOIN tbl_dept d ON e.d_id=d.dept_id
    	  <if test="_parameter != null">
    	    <include refid="Example_Where_Clause" />
    	  </if>
    	  <if test="orderByClause != null">
    	    order by ${orderByClause}
    	  </if>
    	</select>
    	<!-- 查询员工不带部门信息的 -->
    	<select id="selectByPrimaryKeyWithDept" resultMap="WithDeptResultMap">
    		select 
    	    <include refid="WithDept_Column_List" />
    	    FROM tbl_emp e
    	  	LEFT JOIN tbl_dept d ON e.d_id=d.dept_id
    	    where emp_id = #{empId,jdbcType=INTEGER}
    	</select>
    	
    

    以上是mybatis sql 的知识

    1. 修改Employee.java,添加:
      //希望查询员工的同时部门信息也是查询好的
      	private Department department;
    

    以上修改,是项目功能要求所添加。

    测试

    src/test/java 目录新建MapperTest.java文件,添加代码:

    package com.liantao.crud.test;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.liantao.crud.dao.DepartmentMapper;
    
    /**
     * 测试dao层的工作
     * @author liantao.me
     * 推荐Spring的项目就可以使用Spring的单元测试,可以自动注入我们需要的组件
     * 1.导入SpringTest模块,在pom.xml添加pendency
     * 2.@ContextConfiguration指定Spring配置文件的位置
     * 3.直接autowired要使用的组件即可
     * 
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext.xml"})
    public class MapperTest {
    	
    	@Autowired
    	DepartmentMapper departmentMapper;
    	
    	/**
    	 * 测试DepartmentMapper
    	 */
    	@Test
    	public void testCRUD(){
    	/*
    	 * 原生测试方法
    		//1、创建Spring IOC容器
    		ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
    		//2、从容器中获取mapper
    		ioc.getBean(DepartmentMapper.class);
    	*/
    		System.out.println(departmentMapper);
    		
    	}
    	
    }
    
    

    其中包含了SpringTest模块的使用,所以在maven仓库 拿到相关依赖包,添加到pom.xml

    <!-- Spring Test -->
    	<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-test</artifactId>
    	    <version>4.3.7.RELEASE</version>
    	    <scope>test</scope>
    	</dependency>
    

    右键 run->JUnit Test
    运行结果如下说明成功:

    JUnit

    接着,分贝测试部门和员工插入方法测试:
    记得在DepartmentEmployee类中添加有参、无参构造函数~(myeclipse 右键source 下添加即可)
    比如Employee的:

    	public Employee() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public Employee(Integer empId, String empName, String gender, String email, Integer dId) {
    		super();
    		this.empId = empId;
    		this.empName = empName;
    		this.gender = gender;
    		this.email = email;
    		this.dId = dId;
    	}
    
    	//1.插入几个部门
    		departmentMapper.insertSelective(new Department(null,"开发部"));
    		departmentMapper.insertSelective(new Department(null,"测试部"));
    		
    		//2.生成员工数据,测试员工插入
    		employeeMapper.insertSelective(new Employee(null,"tom","M","tom@qq.com",1));
    

    添加代码:

    //1.插入几个部门
    		departmentMapper.insertSelective(new Department(null,"开发部"));
    		departmentMapper.insertSelective(new Department(null,"测试部"));
    		
    		//2.生成员工数据,测试员工插入
    		employeeMapper.insertSelective(new Employee(null,"tom","M","tom@qq.com",1));
    

    批量数据插入方法sqlSession:

    在applicationContext.xml下,添加:

    	<!-- 配置一个可以运行批量的sqlSession -->
    	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    		<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory"></constructor-arg>
    		<constructor-arg name="executorType" value="BATCH"></constructor-arg>
    	</bean>
    

    详细介绍sqlSession的文章。

    MapperTest.java测试类中,自动装配sqlSession:

    @Autowired 
    SqlSession sqlSession;
    

    使用方法

    //3.批量插入多个员工
    		EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
    		for(int i=0;i<1000;i++){
    			String uid = UUID.randomUUID().toString().substring(0,5)+i;
    			mapper.insertSelective(new Employee(null,uid,"M",uid+"@gmail.com",1));
    		}
    		System.out.println("批量插入员工数据完成!");
    

    UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。
    UUID简史
    SqlSession 介绍:地址

    运行,输出“批量插入员工数据完成!”即成功。可在数据库查看数据。

    END

  • 相关阅读:
    关于C语言字符串
    进程间通信方式总结
    数据结构(3)-----链表
    Oracle查看用户所在表空间
    oracle linux了解基本命令行
    关于分区技术的索引 index
    oracle闪回表详解
    转:深入学习Oracle分区表及分区索引
    第一章 基本的SQL语句 (SQL基础)
    linux根分区扩容
  • 原文地址:https://www.cnblogs.com/famine/p/9845671.html
Copyright © 2011-2022 走看看