- public Map<String, Object> getUserInfoById(Long userId) {
- return this.sqlSession.selectOne("user.queryUserInfoByUserId", userId);
- }
- <select id="queryUserInfoByUserId" parameterType="java.lang.Long" resultType="java.util.HashMap">
- SELECT
- userId, username, password, address, birthday, sex
- FROM
- puser
- WHERE
- 1 = 1
- <if test="userId != null">
- AND userId = #{userId}
- </if>
- ORDER BY
- userId DESC
- </select>
- org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userId' in 'class java.lang.Long'
对于这类单个入参然后用 if 判断的,mybatis 有自己的内置对象。如果你在 if 判断里面写的是你的入参的对象名,那么就会抛出上述的异常。三、mybatis 的查询数据包含上送的数据字段
这里面注意几点:一、parameterType 的类型可以为缩写的形式 map;二、SELECT 中可以有 #{ActivityType} AS ActivityType 的写法;三、LEFT JOIN 前端的 FROM 里面的数据需要括号。
四、mybatis 的批量插入传递额外的数据
- <select id="getOtherActivity" parameterType="map" resultType="map">
- SELECT
- a.ActivitySeq,
- a.ActivityName,
- a.ActivityDes,
- a.ActivityBeginDate,
- a.ActivityEndDate,
- a.ActivityStatus,
- b.ActivityChannel,
- c.ToolName,
- c.ToolType,
- c.ToolDesc,
- #{ActivityType} AS ActivityType
- FROM
- (A_ACTIVITY a, A_ACTIVITY_CHANNEL b, T_TOOL c)
- LEFT JOIN
- <choose>
- <when test="ActivityType != null and ActivityType == 2">
- A_CONVERT d
- </when>
- <when test="ActivityType != null and ActivityType == 3">
- A_DISTRIBUTION d
- </when>
- <when test="ActivityType != null and ActivityType == 6">
- A_MISSION d
- </when>
- </choose>
- ON
- d.ActivitySeq = a.ActivitySeq AND
- d.ToolSeq = c.ToolSeq
- WHERE
- a.ActivitySeq = b.ActivitySeq
- <if test="ActivityNo != null">
- AND a.ActivitySeq = #{ActivityNo}
- </if>
- ORDER BY
- a.ActivitySeq DESC
- </select>
我们的需求是在批量插入的时候,有些数据是一定的,不需要在遍历的列表里面。
- public String batchInsertMap() {
- Map<String, Object> parmMap = new HashMap<>();
- parmMap.put("personId", "1");
- List<Map<String, String>> list = new ArrayList<>();
- for (int i = 0; i < 3; i ++) {
- Map<String, String> map = new HashMap<>();
- map.put("content", "comment " + i);
- list.add(map);
- }
- parmMap.put("list", list);
- // 批量插入数据
- int rowCounts = this.sqlSession.insert("user.insertBatchComments", parmMap);
- return rowCounts + "";
- }
mybatis 的 sql 语句如下:
友情链接
- <insert id="insertBatchComments" parameterType="map">
- INSERT INTO comment
- (person_id, content)
- VALUES
- <foreach collection="list" item="item" index="index" separator=",">
- (
- #{personId},
- #{item.content}
- )
- </foreach>
- </insert>
来源: http://www.bubuko.com/infodetail-2440589.html