import org.springframework.beans.BeanUtils; @Transactional public User update(User record){ User old=this.findById(record.getId()); record.preUpdate(); BeanUtils.copyProperties(record, old, BeanUtilsExt.getNullPropertyNames(record)); return userDAO.save(old); }
public class BeanUtilsExt { public static String[] getNullPropertyNames (Object source) { final BeanWrapper src = new BeanWrapperImpl(source); java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); Set<String> emptyNames = new HashSet<String>(); for(java.beans.PropertyDescriptor pd : pds) { Object srcValue = src.getPropertyValue(pd.getName()); if (srcValue == null) emptyNames.add(pd.getName()); } String[] result = new String[emptyNames.size()]; return emptyNames.toArray(result); } }
以方法可以实现动态更新
Hibernate: select sendtaskhi0_.id as id1_1_0_, sendtaskhi0_.create_date as create_d2_1_0_, sendtaskhi0_.create_user as create_u3_1_0_, sendtaskhi0_.update_date as update_d4_1_0_, sendtaskhi0_.credit_id as credit_i5_1_0_, sendtaskhi0_.cus_mobile as cus_mobi6_1_0_, sendtaskhi0_.cus_name as cus_name7_1_0_, sendtaskhi0_.g_id as g_id8_1_0_, sendtaskhi0_.id_card as id_card9_1_0_, sendtaskhi0_.list_id as list_id10_1_0_, sendtaskhi0_.response_msg as respons11_1_0_, sendtaskhi0_.request_id as request12_1_0_, sendtaskhi0_.sub_merch as sub_mer13_1_0_, sendtaskhi0_.task_content as task_co14_1_0_, sendtaskhi0_.task_g_date as task_g_15_1_0_, sendtaskhi0_.task_his_id as task_hi16_1_0_, sendtaskhi0_.task_num as task_nu17_1_0_, sendtaskhi0_.task_r as task_r18_1_0_, sendtaskhi0_.task_s_date as task_s_19_1_0_, sendtaskhi0_.task_status as task_st20_1_0_, sendtaskhi0_.task_type as task_ty21_1_0_, sendtaskhi0_.tts as tts22_1_0_ from c_send_task_his sendtaskhi0_ where sendtaskhi0_.id=? Hibernate: select sendtaskhi0_.id as id1_1_0_, sendtaskhi0_.create_date as create_d2_1_0_, sendtaskhi0_.create_user as create_u3_1_0_, sendtaskhi0_.update_date as update_d4_1_0_, sendtaskhi0_.credit_id as credit_i5_1_0_, sendtaskhi0_.cus_mobile as cus_mobi6_1_0_, sendtaskhi0_.cus_name as cus_name7_1_0_, sendtaskhi0_.g_id as g_id8_1_0_, sendtaskhi0_.id_card as id_card9_1_0_, sendtaskhi0_.list_id as list_id10_1_0_, sendtaskhi0_.response_msg as respons11_1_0_, sendtaskhi0_.request_id as request12_1_0_, sendtaskhi0_.sub_merch as sub_mer13_1_0_, sendtaskhi0_.task_content as task_co14_1_0_, sendtaskhi0_.task_g_date as task_g_15_1_0_, sendtaskhi0_.task_his_id as task_hi16_1_0_, sendtaskhi0_.task_num as task_nu17_1_0_, sendtaskhi0_.task_r as task_r18_1_0_, sendtaskhi0_.task_s_date as task_s_19_1_0_, sendtaskhi0_.task_status as task_st20_1_0_, sendtaskhi0_.task_type as task_ty21_1_0_, sendtaskhi0_.tts as tts22_1_0_ from c_send_task_his sendtaskhi0_ where sendtaskhi0_.id=? Hibernate: update c_send_task_his set update_date=?, cus_mobile=?, cus_name=? where id=? Hibernate: select sendtaskhi0_.id as id1_1_, sendtaskhi0_.create_date as create_d2_1_, sendtaskhi0_.create_user as create_u3_1_, sendtaskhi0_.update_date as update_d4_1_, sendtaskhi0_.credit_id as credit_i5_1_, sendtaskhi0_.cus_mobile as cus_mobi6_1_, sendtaskhi0_.cus_name as cus_name7_1_, sendtaskhi0_.g_id as g_id8_1_, sendtaskhi0_.id_card as id_card9_1_, sendtaskhi0_.list_id as list_id10_1_, sendtaskhi0_.response_msg as respons11_1_, sendtaskhi0_.request_id as request12_1_, sendtaskhi0_.sub_merch as sub_mer13_1_, sendtaskhi0_.task_content as task_co14_1_, sendtaskhi0_.task_g_date as task_g_15_1_, sendtaskhi0_.task_his_id as task_hi16_1_, sendtaskhi0_.task_num as task_nu17_1_, sendtaskhi0_.task_r as task_r18_1_, sendtaskhi0_.task_s_date as task_s_19_1_, sendtaskhi0_.task_status as task_st20_1_, sendtaskhi0_.task_type as task_ty21_1_, sendtaskhi0_.tts as tts22_1_ from c_send_task_his sendtaskhi0_ order by sendtaskhi0_.id desc limit ? Hibernate: select count(sendtaskhi0_.id) as col_0_0_ from c_send_task_his sendtaskhi0_
第二场景下是spring boot,但没试验成功,这里也贴出来
@SpringBootApplication @EnableJpaRepositories(repositoryFactoryBeanClass = ExtJpaRepositoryFactoryBean.class) public class CallerCentApplication { public static void main(String[] args) { SpringApplication springApplication =new SpringApplication(CallerCentApplication.class); //springApplication.addListeners(new ApplicationEventListener()); springApplication.run(args); } }
附件中贴出代码包
相关推荐
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
在很多情况下,我们使用Spring-Data- Jpa,一些简单的查询,我们都喜欢用定义方法查询,而不是写JPQL。JPA为我们提供了一组注解:使用Spring-Data- Jpa为我们提供的@EntityGraph,或@EntityGraph和@NamedEntityGraph...
Spring Data JPA中文文档1.4.3
'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观...
spring注解完整版+spring data jpa官方文档中文翻译+JPA2.0官方文档 文档内容齐全 值得参考学习
使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速开发迭代,可用于开发模板,项目经过测试,可完美运行! 使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速...
spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码
技术架构:SpringMVC3+Spring3.1.2+Spring Data JPA+Maven 声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&...
仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot+Spring Data JPA.zip仓库管理系统,SpringBoot...
NULL 博文链接:https://mixo44.iteye.com/blog/1797079
Spring Data JPA中文文档[1.4.3].zip
Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架...
3. 与Spring全家桶结合紧密: 4. 成熟的框架和架构 常⻅的SQL性能问题,如何优雅处理? 2. 错综复杂的关联关系如何应对? 3. 万恶的LazyException本质是什么? 4. ⾼并发⾼性能要求的API服务要⽤JPA吗?
我們使用Spring Framework裡,在Service 的 Method 給予@Transactional 系統就會去管理transaction,我們是在哪裡做了甚麼設定嗎? 為什麼下的這個Annotation成功會commit失敗會rollback呢? Transaction 管理做了...
Spring Data JPA Demo
基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的...
第一章:Spring Data JPA入门 包括:是什么、能干什么、有什么、HelloWorld等 第二章:JpaRepository基本功能 包括:代码示例JpaRepository提供的CRUD功能,还有翻页、排序等功能 第三章:JpaRepository的查询 ...
spring data jpa 的Specifications动态查询 单条件查询 多条件查询 分页查询