ResultMap

Mybatis 查询结果和sql执行结果不符

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-11 16:09:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 问题 使用mybatis查询数据,看到执行sql的日志,同时也打印了查询的结果个数为3,可是通过 selectList 得到的 List list 却只有1条数据; 分析 一开始以为是缓存导致,因为mybatis有缓存,而且缓存的结果是可以改变的,可是二级缓存默认关闭,一级缓存必须在同一个 sqlsession对象的生命周期内, 这两个条件都排查了,没问题。 解决 然后,看到了select 的返回值是 resultMap , 沿着 resultMap 去看数据结构发现里面指定了一个字段为ID,问题就在这里,该表的主键是联合主键,有多个字段一起作为key, 所以查询的结果可不一定就是以这个ID作为识别记录的key,因为查询的结果ID都是一样的,所以Mybatis在封装ResultRow的时候只会有一条。 问题前(联合主键只指定了一个字段作为ID): <resultMap id ="TodoTask" type ="map" > <id column ="businessId" property ="businessId" ></id> <result column ="businessName" property ="businessName" ></result> <result column =

mybatis 嵌套查询子查询column传多个参数描述

十年热恋 提交于 2019-12-11 16:01:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> mybatis 嵌套查询子查询column传多个参数如下: 1、图解 2、代码示例 备注:注意,相同颜色的单词都是有关联的。 <resultMap id="blogResult" type="Blog"> <association property="author" column="{ id =author_id, likename =author_name }" javaType="Author" select=" selectAuthor "/> </resultMap> <select id="selectBlog" resultMap="blogResult" parameterType="java.lang.String"> SELECT author_id,author_name FROM BLOG WHERE ID = #{id} </select> <select id=" selectAuthor " resultType="Author" parameterType=" java.util.HashMap "> SELECT * FROM AUTHOR WHERE 1=1 <if test=" id != null and id != '' "> and ID = #{id} </if>

MyBatis返回类型resultType和resultMap

纵然是瞬间 提交于 2019-12-01 08:14:29
MyBatis的返回参数类型分两种 1. 对应的分类为: 1.1.resultMap: 1.2.resultType: 2 .对应返回值类型: 2.1.resultMap:结果集 2.2.resultType:int,string ,long ,class 3. 注意点: 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。 3.1 当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时 候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。 3.2 当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。 4.案例 4.1:resultMap案例 [html] view plain copy < select id = "selectByPrimaryKey" resultMap = "BaseResultMap" parameterType = "java.lang.Long" > select <

MyBatis3之java.util.Date类型如何映射到mysql的datetime类型

老子叫甜甜 提交于 2019-12-01 08:14:09
<update id="updateOrderStatus" parameterType="hashmap"> <![CDATA[ UPDATE HS_TOSS_ORDER SET T_STATUS = #{status,jdbcType=INTEGER}, T_UPDATETIME = #{updateTime} where T_ID = #{orderId,jdbcType=VARCHAR} ]]> </update> 理论上不用显示的定义jdbcType,只有当字段可为NULL时才需要jdbcType属性;另外如果字段类型为日期时间类型,显示的指定jdbcType,可以更准确的表述SQL,因为java只有一个Date类型,而大多数数据库有多个时间日期类型。 一般情况下,日期时间类型的字段,resultMap 和 参数中不显示的指定时,mybatis会自动做类型映射成DATETIME(yyyy/MM/dd HH:MM:SS);如果指定jdbcType="DATE",则存入数据库和取出的时间格式yyyy/MM/dd mybatis中 jdbcType 时间类型 当jdbcType = DATE 时, 只传入了 年月日 jdbcType = TIMESTAMP , 年月日+ 时分秒 jdbcType 是否必须: 使用时, 没有加jdbcType 正常, 加上jdbcType原因