mybatis中的mapper

  插入后返回主键、关联查询、多参

xml格式

插入后返回主键

“keyProperty”表示返回的 id 要保存到对象的那个属性中,“useGeneratedKeys”表示主键 id 为自增长

1
2
<insert id="insertUser" parameterType="com.hfy.db.bean.User" useGeneratedKeys="true" keyProperty="id">
</insert>

数据库为 Oracle 时

1
2
3
4
5
6
7
8
<insert id="insert" parameterType="com.test.User">
<selectKey resultType="INTEGER" order="BEFORE" keyProperty="userId">
SELECT SEQ_USER.NEXTVAL as userId from DUAL
</selectKey>
insert into user (user_id, user_name, modified, state)
values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR},
#{modified,jdbcType=TIMESTAMP}, #{state,jdbcType=INTEGER})
</insert>

由于 Oracle 没有自增长一说法,只有序列这种模仿自增的形式,所以不能再使用“useGeneratedKeys”属性。而是使用将 ID 获取并赋值到对象的属性中,insert 插入操作时正常插入 id

多个参数

  对于接口中多个请求参数,没有封装成对象

1
2
3
4
5
6
7
8
9
10
11
12
13
// dao中:
OrderDetail selectByTypeAndDate(@Param("type")Integer type, @Param("date")String date);
// mapper中:
<select id="selectByTypeAndDate" resultMap="orderDetailResult" >
SELECT * FROM order_detail
WHERE type = #{type}
<c:if test="type == 1">
and minPlayTime > #{date}
</c:if>
<c:if test="type == 2">
and maxPlayTime < #{date}
</c:if>
</select>

关联查询  

1
2
3
4
5
6
<resultMap type="com.hfy.db.bean.Order" id="OrderResult">
<result property="id" column="id" />
<!-- 配置关联关系 -->
<association property="user" column="userId"
select="com.hfy.dao.UserDao.selectById"></association>
</resultMap>

MyBatis参数传入集合之foreach动态sql http://blog.csdn.net/small____fish/article/details/8029030/

注解格式

插入后返回主键

1
2
@Insert("")
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "user.id", resultType = int.class, before = false)

MyBatis注解select in参数

1
2
3
4
5
6
7
/**
*
* @param ids '1,2,3'
* @return
*/
@Select("select * from user where id in (${ids})")
List<UserInfo> getUserbyIds(@Param("ids")String ids);

MyBatis注解list参数

注解中想使用xml中的<if>标签,需要用<script>标签将其包起来

1
2
3
4
5
6
7
8
9
10
11
12
<script>
insert into tb_image_temp(
<foreach collection='keys' item='item' open='(' separator=',' close=')'>
${item}
</foreach>
) values(
<foreach collection='values' item='item' open='(' separator=',' close=')'>
#{item}
</foreach>
)
</script>

MyBatis注解map参数

1
2
3
4
5
6
7
8
@Update("<script>\n" +
" update ${tableName} set " +
" <foreach collection='map' index='key' item='item' open='' separator=',' close='' >\n" +
" ${key} = #{item}\n" +
" </foreach>\n" +
" where id = #{id}\n" +
"</script>")
void updateImage(@Param("tableName") String tableName, @Param("map") Map<String, Object> map, @Param("id") Integer id);

结果映射

1
2
3
4
5
6
7
8
9
10
@Select("")
@Results({
@Result(property ="groupId",column = "groupId"),
//查询关联对象
@Result(property = "adminGroup",
column = "groupId",
one = @One(select = "com.cyf.db.mapper.AdminGroupMapper.getGroupById")
)
})
List<ManageAccount> getManageAccount(@Param("manageAccount") ManageAccount manageAccount);
文章目录
  1. 1. xml格式
    1. 1.1. 插入后返回主键
    2. 1.2. 多个参数
    3. 1.3. 关联查询  
  2. 2. 注解格式
    1. 2.1. 插入后返回主键
    2. 2.2. MyBatis注解select in参数
    3. 2.3. MyBatis注解list参数
    4. 2.4. MyBatis注解map参数
    5. 2.5. 结果映射
|