MyBatis-insert, update and delete

来源:互联网 发布:永久开启事件 mysql 编辑:程序博客网 时间:2024/04/26 13:59

insert, update and delete

数据变更语句 insert,update 和 delete 在它们的实现中非常相似:       

<insert  id="insertAuthor"  parameterType="domain.blog.Author"  flushCache="true"  statementType="PREPARED"  keyProperty=""  keyColumn=""  useGeneratedKeys=""  timeout="20"><update  id="insertAuthor"  parameterType="domain.blog.Author"  flushCache="true"  statementType="PREPARED"  timeout="20"><delete  id="insertAuthor"  parameterType="domain.blog.Author"  flushCache="true"  statementType="PREPARED"  timeout="20">
Insert, Update and Delete Attributes属性描述id在命名空间中唯一的标识符,可以被用来引用这条语句。parameterType将会传入这条语句的参数类的完全限定名或别名。             parameterMap这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数 映射和 parameterType 属性。               flushCache将其设置为 true,不论语句什么时候被带哦用,都会导致缓存被清 空。默认值:false。             timeout这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最 大等待值。默认不设置(驱动自行处理)。             statementTypeSTA TEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBatis使用选择使用 Statement,PreparedStatement 或 CallableStatement。 默认值:PREPARED。             useGeneratedKeys( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQL Server 这样的数据库管理系统的自动递增字段)内部生成的主键。 默认值:false。             keyProperty(仅对 insert 有用)标记一个属性,MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。 默认:不设置。             keyColumn(仅对 insert 有用)标记一个属性,MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。 默认:不设置。             databaseIdIn case there is a configured databaseIdProvider, MyBatis will load all statements with nodatabaseId               attribute or with a databaseId that matches the current one. If case the same statement              if found with and without thedatabaseId the latter will be discarded.             

下面就是 insert,update 和 delete 语句的示例:

<insert id="insertAuthor" parameterType="domain.blog.Author">  insert into Author (id,username,password,email,bio)  values (#{id},#{username},#{password},#{email},#{bio})</insert><update id="updateAuthor" parameterType="domain.blog.Author">  update Author set    username = #{username},    password = #{password},    email = #{email},    bio = #{bio}  where id = #{id}</update><delete id="deleteAuthor" parameterType="int">  delete from Author where id = #{id}</delete>

如前所述,插入语句有一点多,它有一些属性和子元素用来处理主键的生成。       

首先,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server) ,那么 你可以设置 useGeneratedKeys=”true”,而且设置 keyProperty 到你已经做好的目标属性上。 例如,如果上面的 Author 表已经对 id 使用了自动生成的列类型,那么语句可以修改为:       

<insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys="true"    keyProperty="id">  insert into Author (username,password,email,bio)  values (#{username},#{password},#{email},#{bio})</insert>

MyBatis 有另外一种方法来处理数据库不支持自动生成类型,或者可能 JDBC 驱动不支 持自动生成主键时的主键生成问题。       

这里有一个简单(甚至很傻)的示例,它可以生成一个随机 ID(可能你不会这么做,但是这展示了 MyBatis 处理问题的灵活性,因为它并不真的关心 ID 的生成):       

<insert id="insertAuthor" parameterType="domain.blog.Author">  <selectKey keyProperty="id" resultType="int" order="BEFORE">    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1  </selectKey>  insert into Author    (id, username, password, email,bio, favourite_section)  values    (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})</insert>

在上面的示例中,selectKey 元素将会首先运行,Author 的 id 会被设置,然后插入语句 会被调用。 这给你了一个简单的行为在你的数据库中来处理自动生成的主键,而不需要使你 的 Java 代码变得复杂。       

selectKey 元素描述如下:       

<selectKey  keyProperty="id"  resultType="int"  order="BEFORE"  statementType="PREPARED">
selectKey Attributes属性描述keyPropertyselectKey 语句结果应该被设置的目标属性。             resultType结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。             order这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那 么它会首先选择主键,设置 keyProperty 然后执行插入语句。 如果 设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。             statementType和前面的相 同,MyBatis 支持 STA TEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型。
原创粉丝点击