表、实体类、myBatisConfig.xml文件、以及测试类请看MyBatis之一对一关联 ,没必要再复制一遍这些内容
嵌套resultMap:
[html] view plain copy <?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="sysUser3"> <resultMap type="com.chensan.sys.entity.SysUser3" id="sys_user3" autoMapping="true"> <id property="id" column="id"/> <result property="company" column="company"/> <result property="salary" column="salary"/> <association property="idCard" column="card_id" resultMap="idCard1Mapper"/> </resultMap> <resultMap type="com.chensan.identity.entity.IdCard1" id="idCard1Mapper" autoMapping="true"> <result property="cardNo" column="card_no"/> <result property="userName" column="user_name"/> </resultMap> <!-- 一对一:一个用户对应一份身份信息 --> <!-- 方式二:嵌套resultMap查询 --> <select id="getUserIdCard1" parameterType="int" resultMap="sys_user3"> SELECT * FROM `sys_user3` t1, `id_card1` t2 WHERE t1.`card_id`=t2.`id` AND t1.`id`=#{id} </select> </mapper> 嵌套select语句: [html] view plain copy <?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="sysUser3"> <!-- 一对一:一个用户对应一份身份信息 --> <!-- 方式二:嵌套select语句查询 --> <select id="getUserIdCard1" parameterType="int" resultMap="sys_user3"> SELECT * FROM `sys_user3` WHERE `id`=#{id} </select> <select id="getCardInfo" parameterType="int" resultMap="idCard1Mapper"> SELECT * FROM `id_card1` WHERE `id`=#{id} </select> <resultMap type="com.chensan.sys.entity.SysUser3" id="sys_user3" autoMapping="true"> <id property="id" column="id"/> <result property="company" column="company"/> <result property="salary" column="salary"/> <association property="idCard" column="card_id" select="getCardInfo"/> </resultMap> <resultMap type="com.chensan.identity.entity.IdCard1" id="idCard1Mapper" autoMapping="true"> <result property="cardNo" column="card_no"/> <result property="userName" column="user_name"/> </resultMap> </mapper>association直接写result和association引用resultMap应该算是差不多的用法,然后嵌套select语句查询为另一种方式,那么select语句这种方式是否可不用resultMap,而把result放在association呢?事实证明,行不通。被实体属性与数据表列不同名的,列出对应关系仍为null(功力尚欠,这个问题就暂不做深究);
实例如下:
[html] view plain copy <?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="sysUser3"> <!-- 一对一:一个用户对应一份身份信息 --> <select id="getUserIdCard1" parameterType="int" resultMap="sys_user3"> SELECT * FROM `sys_user3` WHERE `id`=#{id} </select> <select id="getCardInfo" parameterType="int" resultType="com.chensan.identity.entity.IdCard1"> SELECT * FROM `id_card1` WHERE `id`=#{id} </select> <resultMap type="com.chensan.sys.entity.SysUser3" id="sys_user3" autoMapping="true"> <id property="id" column="id"/> <result property="company" column="company"/> <result property="salary" column="salary"/> <association property="idCard" column="card_id" javaType="com.chensan.identity.entity.IdCard1" autoMapping="true" select="getCardInfo"> <result property="cardNo" column="card_no"/> <result property="userName" column="user_name"/> </association> </resultMap> </mapper>
始终觉得嵌套select语句查询的条件不够灵活
