MyBatis 笔记
2017-08-02 本文已影响4人
svatyvabin
参数
参数可以使用 #{username}
或者 ${username}
来表示(示例为用户名的值),一般来说,直接使用 #
更方便,它会自动进行类型转换,而 $
是直接将值插入,不进行任何转换。
举个例子,语句 update t_user set username = #{username}
最终的语句是 update t_user set username = 'John'
,而使用 $
则为 update t_user set username = John
,显然语法不正确。
常用 tag
resultMap
association(property, resultMap, columnPrefix)
collection(property, ofType, resultMap, columnPrefix)
插入后设置自增主键ID
PostgreSQL 不支持使用useGeneratedKeys="true" keyProperty="id"
自动设置主键ID:
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
insert into Author (username, password) values
</insert>
所以需要使用 selectKey
的方式(keyProperty 指定写入到
parameterType 对应的属性名,resultType 是对应属性的类型):
<insert id="insertAuthor" parameterType="Author">
<selectKey order="AFTER" keyProperty="id" resultType="int">
SELECT currval('t_area_id_seq')
</selectKey>
insert into Author
(username, password)
values
(#{username}, #{password})
</insert>
这样你传入进来的对象的 id 属性就会在成功插入后赋值。
// 未设置 id
Author author = new Author();
author.setUsername("name");
author.setPassword("psw");
int insertedCount = mapper.insertAuthor(author); // 成功插入的数量
int id = author.getId(); // 被赋值的 id