MyBatis update标签
下面我们通过一个示例演示 update 标签的用法。
1. 在 WebsiteMapper.xml 中添加以下更新语句,代码如下。
!--update 标签-- update id= updateWebsite parameterType= string update website set name = #{name} /update
2. 在 WebsiteMapper 接口中增加一个 updateWebsite() 方法,代码如下。
int updateWebsite(String name);
参数为 String 类型的字符串;返回值为 int 类型,表示执行 sql 语句后受影响的记录的行数。
3. 测试代码如下。
int i = websiteMapper.updateWebsite( C语言中文网 System.out.println( 共更新了 + i + 条记录
4.执行测试代码,控制台输出如下。
共更新了 9 条记录
通过控制台输出可知,该更新语句执行后,共影响了 9 条数据库记录。
update 标签常用属性update 标签常用属性如下表。
执行 SQL 时使用的 statement 类型, 默认为 PREPARED,可选值:STATEMENT,PREPARED 和 CALLABLE。
注意:update 标签中没有 resultType 属性,只有查询操作才需要对返回结果类型进行相应的指定。
传递多个参数
在上面的示例中,我们在更新语句中只使用了一个 String 类型的参数,而在实际的开发过程中,大多数时候,我们的更新语句都需要使用多个参数,Mybatis 为我们提供以下 3 种方式,来实现给映射器传递多个参数:
使用 Map 传递参数
我们可以将参数封装到一个 Map 对象中,然后传递给 MyBatis 的映射器,示例如下。
1. 在 WebsiteMapper 接口中,定义一个 updateWebsiteByMap() 方法,并使用 Map 传递参数,代码如下。
int updateWebsiteByMap(Map String, Object params);
2. 在 WebsiteMapper.xml 使用 update 标签定义一个 update 语句,并接收通过 Map 传递的参数,代码如下。
!--更新语句接收 Map 传递的参数-- update id= updateWebsiteByMap parameterType= map update website set name = #{name},url= #{url} where id = #{id} /update
3. 测试代码如下。
//使用 Map 向 update 标签传递参数 Map String, Object params = new HashMap (); params.put( id , 1); params.put( name , 编程帮 params.put( url , www.biancheng.net int i = websiteMapper.updateWebsiteByMap(params); System.out.println( 通过 Map 传递参数,共更新了 + i + 条记录
4. 执行测试代码,控制台输出如下。
通过 Map 传递参数,共更新了 1 条记录使用注解传递参数
我们还可以使用 MyBatis 提供的 @Param 注解给注解器传递参数,示例如下。
1. 在 WebsiteMapper 接口中,定义一个 updateWebsiteByParam() 方法,并使用 @Param 注解传递参数,方法如下。
int updateWebsiteByParam(@Param( name ) String name, @Param( url ) String url, @Param( id ) Integer id);
2. 在 WebsiteMapper.xml 中使用 update 标签定义一个 update 语句,并接收通过 @Param 注解传递的参数,配置如下。
!--更新语句接收 @Param 注解传递的参数-- update id= updateWebsiteByParam update website set name = #{name},url= #{url} where id = #{id} /update
3. 测试代码如下。
// 使用@Param 注解传递参数到更新语句中 String name = 编程帮2 String url = www.biancheng.net Integer id = 2; int i = websiteMapper.updateWebsiteByParam(name, url, id); System.out.println( 通过 @Param 注解传递参数,共更新了 + i + 条记录
4. 执行测试代码,控制台输出如下。
通过 @Param 注解传递参数,共更新了 1 条记录使用 JavaBean 传递参数
在参数过多的情况下,我们还可以将参数通过 setter 方法封装到 JavaBean(实体类)对象中传递给映射器。
1. 在 WebsiteMapper 接口中,定义一个 updateWebsiteByJavaBean() 方法,并使用 JavaBean 传递参数,方法如下。
int updateWebsiteByJavaBean(Website website);
2. 在 WebsiteMapper.xml 中使用 update 标签定义一个 update 语句,并接收通过 JavaBean 传递的参数,配置如下。
!--更新语句接收 JavaBean 传递的参数-- update id= updateWebsiteByJavaBean parameterType= net.biancheng.www.po.Website update website set name = #{name},url= #{url} where id = #{id} /update
3. 测试代码如下。
//使用 JavaBean 传递参数到更新语句中 Website website = new Website(); website.setName( 编程帮3 website.setUrl( www.biancheng.net website.setId(3); int i = websiteMapper.updateWebsiteByJavaBean(website); System.out.println( 通过 JavaBean 传递参数,共更新了 + i + 条记录
4. 执行测试代码,控制台输出如下。
通过 JavaBean 传递参数,共更新了 1 条记录
以上 3 种方式的区别如下:
使用 Map 传递参数会导致业务可读性的丧失,继而导致后续扩展和维护的困难,所以在实际应用中我们应该果断废弃该方式。 使用 @Param 注解传递参数会受到参数个数的影响。当 n 5 时,它是最佳的传参方式,因为它更加直观;当 n 5 时,多个参数将给调用带来困难。 当参数个数大于 5 个时,建议使用 JavaBean 方式。
相关文章
- Data Access 之 MyBatis(三) - SQL Mapping XML(Part B)
- 求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。
- mybatis 缓存的使用, 看这篇就够了「建议收藏」
- mybatis的常用动态sql标签
- mybatis trim标签
- Java神操作之利用Mybatis的resultMap的id标签进行分组映射「建议收藏」
- MyBatis框架:第十一章:mybatis 逆向工程
- MyBatis框架:第十一章:mybatis 逆向工程
- MyBatis框架:第九章:动态SQL语句
- SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发
- MyBatis框架:第二章:传统mybatis的hello world 示例
- MyBatis学习笔记之Mapper文件的foreach标签详解
- hibernate二级缓存注解-mybatis的二级缓存和hibernate的三级缓存
- MyBatis逆向工程 Generator
- Mybatis插件better-mybatis-generator的下载与使用
- MyBatis配置文件 —— 相关标签详解
- SQL数据分表Mybatis Plus动态表名优方案
- 深入浅析mybatis oracle BLOB类型字段保存与读取
- 把EXCEL用程序导入到ORACLE中(SpringMVC+MyBatis)详解编程语言
- MyBatis foreach标签
- MyBatis set标签
- MyBatis where标签
- MyBatis执行SQL的两种方式