mybatis文件映射之鉴别器discriminator标签

mybatis文件映射之鉴别器discriminator标签,第1张

概述mybatis可以使用鉴别器判断某列的值,然后根据某列的值改变封装行为。 比如说: 如果是女生(gender=0)我们将部门信息提取出来,否则不提取; 如果是男生(gender=1),把last_na

mybatis可以使用鉴别器判断某列的值,然后根据某列的值改变封装行为。

比如说:

如果是女生(gender=0)我们将部门信息提取出来,否则不提取;

如果是男生(gender=1),把last_name的值赋值给email;

EmployeeMapper.xml

    <resultMap type="com.gong.mybatis.bean.Employee" ID="MyEmpdis">        ID column="ID" property="ID"/>        result ="last_name"="lastname"="gender"="gender"="email"="email"discriminator javaType="string" column>            case value="0" resultType="com.gong.mybatis.bean.Employee">                association property="dept" select="com.gong.mybatis.dao.DepartmentMapper.getDeptByID"                column="d_ID"</associationcase="1"/>                />            discriminator>    resultMapselect ID="getEmpByIDStep" resultMap>        select * from tbl_employee where ID=#{ID}    select>

说明:distriminator中的javaType指定数据库中字段对应着java中的属性的类型,column属性为列名称。case标签中value属性标识数据库中列的值,resultType指定封装的结果类型,不可少。

DepartmentMapper.xml

    ="getDeptByID"="com.gong.mybatis.bean.Department"        select * from tbl_department where ID=#{ID}    >

进行测试:

package com.gong.mybatis.test;import java.io.IOException; java.io.inputStream; java.util.List; java.util.Map; org.apache.ibatis.io.Resources; org.apache.ibatis.session.sqlSession; org.apache.ibatis.session.sqlSessionFactory; org.apache.ibatis.session.sqlSessionFactoryBuilder; org.junit.Test; com.gong.mybatis.bean.Department; com.gong.mybatis.bean.Employee; com.gong.mybatis.dao.DepartmentMapper; com.gong.mybatis.dao.EmployeeMapperPlus;public class TestMybatis2 {        public sqlSessionFactory getsqlSessionFactory() throws IOException {        String resource = "mybatis-config.xml";        inputStream is = Resources.getResourceAsstream(resource);        return new sqlSessionFactoryBuilder().build(is);    }    @Test    voID test()  IOException {        sqlSessionFactory sqlSessionFactory = getsqlSessionFactory();        sqlSession openSession = sqlSessionFactory.openSession();        try {            EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.);            Employee employee = mapper.getEmpByIDStep(3);            System.out.println(employee.getLastname());            System.out.println(employee.getDept());            openSession.commit();        } finally {            openSession.close();        }            }}

首先测试的是gender=0的情况:

DEBUG 01-20 20:47:37,503 ==> Preparing: select * from tbl_employee where ID=? (BaseJdbcLogger.java:145)
DEBUG 01-20 20:47:37,590 ==> Parameters: 3(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 20:47:37,757 <== Total: 1 (BaseJdbcLogger.java:145)
小红
DEBUG 01-20 20:47:37,759 ==> Preparing: select * from tbl_department where ID=? (BaseJdbcLogger.java:145)
DEBUG 01-20 20:47:37,760 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 20:47:37,763 <== Total: 1 (BaseJdbcLogger.java:145)
Department [ID=1,deptname=开发部]

可以查到部门的信息。

接下来是gender=1的情况:

Employee employee = mapper.getEmpByIDStep(1);

DEBUG 01-20 20:53:32,581 ==> Preparing: select * from tbl_employee where ID=? (BaseJdbcLogger.java:145)
DEBUG 01-20 20:53:32,647 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 20:53:32,708 <== Total: 1 (BaseJdbcLogger.java:145)
xiximayou
null

发现部门信息是查不到的。

再进行gender=1时的情况:

            Employee employee = mapper.getEmpByIDStep(1);            System.out.println(employee);            System.out.println(employee.getDept());

DEBUG 01-20 20:54:39,440 ==> Preparing: select * from tbl_employee where ID=? (BaseJdbcLogger.java:145)
DEBUG 01-20 20:54:39,480 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 20:54:39,555 <== Total: 1 (BaseJdbcLogger.java:145)
Employee [ID=1,lastname=xiximayou,gender=1,email=xiximayou,dept=null]
null

email被修改,且部门信息查不到。

gender=0的情况:

        Employee employee = mapper.getEmpByIDStep(3);        System.out.println(employee);        System.out.println(employee.getDept());

DEBUG 01-20 20:56:19,177 ==> Preparing: select * from tbl_employee where ID=? (BaseJdbcLogger.java:145)
DEBUG 01-20 20:56:19,221 ==> Parameters: 3(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 20:56:19,384 <== Total: 1 (BaseJdbcLogger.java:145)
DEBUG 01-20 20:56:19,385 ==> Preparing: select * from tbl_department where ID=? (BaseJdbcLogger.java:145)
DEBUG 01-20 20:56:19,386 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 20:56:19,389 <== Total: 1 (BaseJdbcLogger.java:145)
Employee [ID=3,lastname=小红,gender=0,email=xiaohong@qq.com,dept=Department [ID=1,deptname=开发部]]
Department [ID=1,deptname=开发部]

email未被修改,且可以查到部门的信息。

总结

以上是内存溢出为你收集整理的mybatis文件映射之鉴别器discriminator标签全部内容,希望文章能够帮你解决mybatis文件映射之鉴别器discriminator标签所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1219019.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存