在Hibernate中,如果想要更新某一个对象,就需要发送所有的字段给持久化对象,然而实际应用中,大多数情况下都是更新的某一个或几个字段。如果更新的每一条数据都要将其所有的属性都更新一遍,那么其执行效率是非常差的。
有没有办法让程序只更新需要更新的字段呢?
为了解决上述情况中的问题,MyBatis中提供了< set>元素来完成这一工作。 < set>元素主要用于更新操作,其主要作用是在动态包含的SQL语句前输出一个SET关键字,并将SQL语句中最后一个多余的逗号去除。
代码
update t_customer
username=#sername,
jobs=#{jobs},
phone=#{phone},
where id=#{id}
在上述配置的SQL语句中,使用了< set>和< if>元素相结合的方式来组装update语句。 其中< set>元素会动态前置SET关键字,同时也会消除SQL语句中最后一个多余的逗号; < if>元素用于判断相应的字段是否传入值,如果传入的更新字段非空,就将此字段进行动态 SQL 组装,并更新此字段,否则此字段不执行更新。
测试/**
* 更新客户
*/
@Test
public void updateCustomerTest() {
// 获取SqlSession
SqlSession sqlSession = MybatisUtils.getSession();
// 创建Customer对象,并向对象中添加数据
Customer customer = new Customer();
customer.setId(3);
customer.setPhone("13311111234");
// 执行SqlSession的更新方法,返回的是SQL语句影响的行数
int rows = sqlSession.update("com.itheima.mapper"
+ ".CustomerMapper.updateCustomer", customer);
// 通过返回结果判断更新操作是否执行成功
if (rows > 0) {
System.out.println("您成功修改了" + rows + "条数据!");
} else {
System.out.println("执行修改操作失败!!!");
}
//提交事务
sqlSession.commit();
// 关闭SqlSession
sqlSession.close()
}
效果图: