mysql update mapper_深入MyBatis Mapper映射文件:insert,update,delete

insert,update,delete元素用来映射DML语句,是MyBatis中最常用的元素之一.insert,update和delete元素配置和select非常接近:

id="insertUser"

parameterType="org.fkit.domain.User"

flushCache="true"

statementType="PREPARED"

keyProperty=""

keyColumn=""

useGeneratedKeys=""

timeout="20" >

id="updateUser"

parameterType="org.fkit.domain.User"

flushCache="true"

statementType="PREPARED"

timeout="20">

id="deleteUser"

paramenterType="org.fkit.domain.User"

flushCache="true"

statementType="PREPARED"

timeout="20">

insert,update和delete元素的属性大多和select一致,他们特有的属性描述如下:

useGeneratedKeys:这会令MyBatis使用JDBC的getGeneratedKeys方法来获取由数据库内部生成的主键,默认值为false

keyProperty(仅对insert和update有效):唯一标记一个属性,Mysql会通过getGeneratedKeys的返回值 或者通过insert语句的selectKey子元素设置他的键值,默认为unset,如果希望得到多个生成的列,也可以是以逗号分隔的属性名称列表.

keyColumn(仅对insert和update有效)通过生成的键值设置表中的列名,这个设置仅对某些数据库是必须的,当主键列不是表中的第一列时需要设置,如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表

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

INSERT INTO TB_USER (username,password) VALUES(#{username},#{password})

UPDATE TB_USER SET username=#{username},password=#{password} WHERE id=#{id}

DELETE FROM TB_USER where id=#{id}

而插入语句的配置规则更丰富,因为在插入语句执行时很多时候是需要返回插入成功的数据生成的主键值的,所以元素里面有一些额外的属性和子元素用来处理主键的生成,而且根据数据库的主键生成策略不同,配置也有多种方式.

首先,如果数据库支持自动生成主键字段,那么可以设置useGemeratedKeys=”true”然后再把keyProperty设置到目标属性上就可以了.例如如果上面的TB_USER表已经对id使用了自动生成的列类型,那么语句可以修改为:

INSERT INTO TB_USER (username,password) VALUES(#{username},#{password})

对于不支持自动生成类型的数据库或不支持自动生成主键的JDBC驱动来说,MyBatis有另外一种方法来生成主键:

select SEQUENCE_TB_USER.nextval as id from dual

INSERT INTO TB_USER (id,username,password) VALUES(#{id},#{username},#{password})

在上面的示例中,selectKey元素将会首先运行,其通过查询SEQUENCE序列,TB_USER的id会被设置,然后插入语句会被调用

selectKey元素描述如下:

keyProperty="id"

resultType="int"

order="BEFORE"

statementType="PREPARED">

keyProperty:selectKey语句结果应该被设置的目标属性(一般会设置到id属性上),如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表

keyColumn:匹配属性的返回结果集中的列名称,入股偶希望得到多个生成的列,也可以是逗号分隔的属性名称列表

resultType:结果类型,MyBatis通常可以推算出来,但是为了更加确定,建议明确写出,MyBatis允许任何简单类型用作主键类型,包括字符串.如果希望作用于多个生成的列,这可以使用一个包含期望属性的Object或一个Map

order:可以被设置为BEFORE或AFTER,如果设置为AFTER,那么先执行插入语句,然后是selectKey元素

statementType:与前面相同,MyBatis支持STATEMENT,PREPAREF和CALLAVLE语句的映射类型,分别代表Statement,PreparedStatement和CallableStatement类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值