MyBatis的discriminator鉴别器的作用

MyBatis的discriminator鉴别器的作用

DepartmentMapper.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="com.cn.mybatis.dao.DepartmentMapper"> 	<!-- public Department getDeptById(Integer id); --> 	<select id="getDeptById" resultType="com.cn.zhu.bean.Department"> 		select id,dept_name 		departmentName from tbl_dept where id=#{id}     </select>  </mapper>

EmployeeMapperPlus.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="com.cn.mybatis.dao.EmployeeMapperPlus">  	  	 	<!-- public Employee getEmpByIdStep(Integer id); --> 	<select id="getEmpByIdStep" resultMap="MyEmpDis"> 		select * from tbl_employee 		where id=#{id}  	</select> 	<!-- 		分布好处 可以使用延迟加载 Employee==>Dept 我们每次查询Employee对象的时候,都将一起查询出来。 		部门信息在我们使用的时候再去查询 分段查询的基础之上加上两个配置 	-->  	<!-- 		查询二 查询部门的时候将部门对应的所有员工信息也查询出来 public List<Employee> 		getEmpsByDeptId(Integer deptId); 	--> 	 	 	<!-- public List<Employee> getEmpsByDeptId(Integer deptId); --> 	<select resultType="com.cn.zhu.bean.Employee" id="getEmpsByDeptId"> 		select * from 		tbl_employee where d_id=#{deptId}  	  </select> 	<!-- 		鉴别器discriminator mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为 		封装Employee: 如果查出的是女生,就把部门信息查询出来,否则不查询 如果是男生,把last_name这一列的值赋值给email; 	--> 	<resultMap type="com.cn.zhu.bean.Employee" id="MyEmpDis"> 		<id column="id" property="id" /> 		<result column="last_name" property="lastName" /> 		<!-- 把last_name 赋值给email --> 		<result column="email" property="email" /> 		<result column="gender" property="gender" /> 		<!-- 			association 定义管理对象的封装规则 select: 表明当前属性是调用select 指定的方法 colum: 			指定将哪一列的值传给这个方法 流程 : 使用select 指定的方法(传入column指定的这列参数的值)查出对象 			并封装给property 指定的属性 		--> 		<!-- column 指定判定的列名  		   javaType:列值对应的java类型 		 --> 		<discriminator javaType="String" column="gender">  			<!-- 				0 是女生 resultType 指定封装的结果类型 如果是女性,就查询到employee的部门查询出来 			--> 			<case value="0" resultType="com.cn.zhu.bean.Employee"> 				<association property="dept" 					select="com.cn.mybatis.dao.DepartmentMapper.getDeptById" column="d_id"> 				</association> 			</case> 			<!-- 				1是男生 resultType 指定封装的结果类型 如果是女性,就查询到employee的部门查询出来 把last_name 				赋值给email 			--> 			<case value="1" resultType="com.cn.zhu.bean.Employee"> 				<id column="id" property="id" /> 				<result column="last_name" property="lastName" /> 				<!-- 把last_name 赋值给email --> 				<result column="last_name" property="email" /> 				<result column="gender" property="gender" /> 			</case> 		</discriminator>  	</resultMap> </mapper>

DepartmentMapper.java

package com.cn.mybatis.dao;  import java.util.List; import java.util.Map;   import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param;  import com.cn.zhu.bean.Department; import com.cn.zhu.bean.Employee;  public interface DepartmentMapper { 	public Department getDeptById(Integer id); 	public Department getDeptByIdPlus(Integer id); 	 	public Department getDeptByIdStep(Integer id); 	public List<Employee> getEmpsByDeptId(Integer deptId);  }    

EmployeeMapperPlus.java

package com.cn.mybatis.dao;  import java.util.List; import java.util.Map;   import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param;  import com.cn.zhu.bean.Employee;  public interface EmployeeMapperPlus { 	public Employee getEmpById(Integer id); 	public Employee getEmpAndDept(Integer id); 	public Employee getEmpByIdStep(Integer id);  } 

Department.java

package com.cn.zhu.bean;  import java.util.List;  public class Department { 	private 	Integer  id; 	private  String  departmentName; 	private List<Employee> emps; 	 	 	 	public List<Employee> getEmps() { 		return emps; 	} 	public void setEmps(List<Employee> emps) { 		this.emps = emps; 	} 	public Integer getId() { 		return id; 	} 	public void setId(Integer id) { 		this.id = id; 	} 	public String getDepartmentName() { 		return departmentName; 	} 	public void setDepartmentName(String departmentName) { 		this.departmentName = departmentName; 	} 	@Override 	public String toString() { 		return "Department [departmentName=" + departmentName + ", id=" + id 				+ "]"; 	} 	 } 

Employee.java

package com.cn.zhu.bean;  import org.apache.ibatis.type.Alias;  @Alias("emp") public class Employee { 	private Integer id; 	private String lastName; 	private String email; 	private String gender; 	private Department dept; 	 	public Employee() { 		super(); 		// TODO Auto-generated constructor stub 	} 	 	public Employee(Integer id, String lastName, String email, String gender) { 		super(); 		this.id = id; 		this.lastName = lastName; 		this.email = email; 		this.gender = gender; 	}  	 	public Department getDept() { 		return dept; 	}  	public void setDept(Department dept) { 		this.dept = dept; 	}  	public String getLastName() { 		return lastName; 	}  	public void setLastName(String lastName) { 		this.lastName = lastName; 	}  	 	public Integer getId() { 		return id; 	}  	public void setId(Integer id) { 		this.id = id; 	}  	public String getEmail() { 		return email; 	} 	public void setEmail(String email) { 		this.email = email; 	} 	public String getGender() { 		return gender; 	} 	public void setGender(String gender) { 		this.gender = gender; 	} 	@Override 	public String toString() { 		return "Employee [email=" + email + ", gender=" + gender + ", id=" + id 		+ ", lastName=" + lastName + "]"; 	}  } 

mybatis-config.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> 	<!-- 		1. mybatis可以使用properties来引入外部properties配置文件的内容 resource: 引入类路径下的资源 		url: 引入网路路径或者磁盘路径下的资源 	--> 	<properties resource="dbconfig.properties"></properties> 	<!-- 		2 settings包含很多设置项 setting:用来设置每一个设置项 name 设置项名 value 设置项取值 	--> 	<settings> 		<setting name="mapUnderscoreToCamelCase" value="true" /> 		<!-- 懒加载 ,延迟加载--> 		<!--<setting name="lazyLoadingEnabled" value="true"/>  		--><!-- 立即加载 --><!-- 		<setting name="aggressiveLazyLoading" value="false"/> 	--></settings>  	<!-- 		3 typeAliases: 别名处理器,可以为我们的java类型起个别名 别名不区分大小写 	--> 	<typeAliases> 		<!-- 			typeAlias : 为某个java类型起个别名 type: 指定要起别名的类型全类名 默认别名就是类名小写,employee 			alias 指定新的类名 		--> 		<!-- 			<typeAlias type="com.cn.zhu.bean.Employee" alias="emp"/> 		--> 		<!-- 			package: 为 某个包下的所有类批量起别名 name: 指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认名(类名小写)) 		--> 		<package name="com.cn.zhu.bean" /> 		<!--3  批量起别名情况下,使用@Alias注解为某个类型指定新的别名 --> 	</typeAliases>  	<!-- 		4 environments: 环境们 ,mybatis可以配置多种环境,default指定使用某种环境 environment 		配置一个具体的环境信息,必须有两个标签,id 当前环境唯一标识 transactionManager 事务管理器 type 事务管理器的类型 		jdbc(jdbcTransactionFactory)|MANAGED(manged) 自定义事务管理器 		,实现TransactionFactory接口,type指定全类名 dataSource:数据源 type: 	--> 	<!-- 		<environments default="test"> <environment id="test"> 		<transactionManager type="JDBC"></transactionManager> <dataSource 		type=""></dataSource> </environment> </environments> 	--> 	<environments default="development"> 		<environment id="development"> 			<transactionManager type="JDBC" /> 			<dataSource type="POOLED"> 				<property name="driver" value="${jdbc.driver}" /> 				<property name="url" value="${jdbc.url}" /> 				<property name="username" value="${jdbc.username}" /> 				<property name="password" value="${jdbc.password}" /> 			</dataSource> 		</environment> 	</environments> 	<!-- 		5 databaseIdProvider 支持多数据库厂商 type="Db_venDor" 作用就是得到数据库厂商的标识 		mybatis就能根据数据库厂商 MYsql oracle sql sever 	--> 	<!-- 		<databaseIdProvider type="DB_VENDOE"> 为不同的数据库厂商起别名字 <property 		name="MySql" value="mysql"/> <property name="Oracle" value="oracle"/> 		<property name="SQL Server" value="sqlserver"/> </databaseIdProvider> 	--> 	<!-- 		将我们写好的sql映射文件一定要注册到全局配置文件中 mapper: 注册一个sql文件 注册配置文件 		resource:引用类路径下的sql映射文件 注册接口 class: 引用(注册)接口 1. 		有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下 2 没有sql映射文件 ,所有的sql文件是利用注解方式 	-->  	<!-- 		<mappers> <mapper resource="mybatis/mapper/EmployeeMapper.xml" /> 		</mappers> 	-->  	<mappers> 		<mapper resource="mybatis/mapper/EmployeeMapperPlus.xml" /> 		<mapper resource="mybatis/mapper/DepartmentMapper.xml" /> 	</mappers>  	<!-- 		<mappers> <mapper 		class="com.cn.mybatis.dao.CopyOfEmployeeMapperAnnotation"/> </mappers> 	--> </configuration>


dbconfig.properties

jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root


在这里进行模拟程序

	<!-- 				0 是女生 resultType 指定封装的结果类型 如果是女性,就查询到employee的部门查询出来 			--> 			 			<!-- 				1是男生 resultType 指定封装的结果类型 如果是女性,就查询到employee的部门查询出来 把last_name 				赋值给email 			--> 
<!-- 				0 是女生 resultType 指定封装的结果类型 如果是女性,就查询到employee的部门查询出来 			-->

@Test 	public void test05() throws IOException{ 		SqlSessionFactory sqlsessionFactory=getSqlSessionFactory(); 		// 1  获取到的sqlsession不会自动提交数据 		SqlSession openSession=sqlsessionFactory.openSession();  		try{  			EmployeeMapperPlus mapper=openSession.getMapper(EmployeeMapperPlus.class); 			//级联查询  			/*		Employee empAndDept=mapper.getEmpAndDept(1);             System.out.println(empAndDept.getLastName());*/ 			//System.out.println(empAndDept.getDept()); 			// 分布查询getEmpByIdStep 			Employee  employee=mapper.getEmpByIdStep(1); 			System.out.println(employee); 			System.out.println(employee.getDept());  		}finally{ 			openSession.commit(); 		} 	}

<!-- 				1是男生 resultType 指定封装的结果类型 如果是女性,就查询到employee的部门查询出来 把last_name 				赋值给email 			-->

数据库

增删改查,集合的遍历,鉴别器使用,分布查询等  完整代码

百度网盘-链接不存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值