MyBatis 笔记

参数

参数可以使用 #{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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,671评论 0 4
  • 一、输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型、HashMap、pojo的包装...
    yjaal阅读 973评论 0 2
  • 主要内容: 开发中数据模型的分析流程 一对一查询 一对多查询 一、开发中数据模型的分析流程 一般在开发中我们会直接...
    yjaal阅读 2,208评论 5 8
  • 由于之前我们已经有了hibernate的基础,所以这里很多细节就不再提及。 一、基本架构 这里从网络上找了几张my...
    yjaal阅读 1,587评论 0 7
  • 那年,当我跌落生命的低谷时,漫无目的地去西南旅行。 我没有目的,我只是想活下去,想寻找到生命的力量。 我像个吉普赛...
    自由心空阅读 358评论 1 6