`
喧嚣求静
  • 浏览: 580300 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring data jpa 动态更新@DynamicUpdate

    博客分类:
  • java
 
阅读更多

 

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 中的 @DynamicInsert.pdf

    Spring Data JPA 中的 @DynamicInsert

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    2. **Entity Management**:Spring Data JPA 提供了对实体(Entity)的管理,包括实体的创建、更新、删除等操作。开发者可以通过 `EntityManager` 和 `EntityManagerFactory` 进行这些操作,但 Spring Data JPA 提供...

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    Spring Data JPA 笔记

    例如,Spring Data JPA支持自动化的查询生成,只需定义Repository接口,无需编写任何实现代码,就可以执行CRUD(创建、读取、更新、删除)操作。此外,它还支持复杂的查询方法命名,如findByXXX,根据方法名自动构建...

    使用Spring Data Jpa为我们提供的@EntityGraph.docx

    在Spring Data JPA中,当我们处理复杂的数据查询时,可能会遇到N+1查询问题,即在获取一个实体及其关联对象时,数据库会执行多次查询,每次查询一个关联对象。为了解决这个问题,JPA提供了@EntityGraph注解,配合...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...

    后端 Java Spring Data Jpa @Transactional 介绍

    在Java后端开发中,Spring框架提供了强大的事务管理能力,特别是在使用Spring Data JPA时,`@Transactional`注解使得事务处理变得简单易用。这个注解是Spring框架中的核心部分,它允许开发者声明性地控制事务边界,...

    Spring Data JPA从入门到精通

    4. **Repository接口**:Spring Data JPA的核心是Repository接口,通过继承自定义的Repository接口,开发者可以声明CRUD(创建、读取、更新、删除)操作以及自定义查询方法。 5. **Entity实体**:在Spring Data JPA...

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    Spring Data JPA中文文档[1.4.3].zip

    Spring Data JPA是Java开发中的一个关键框架,它简化了与关系型数据库的交互,特别是基于Java Persistence API (JPA)。这个框架是Spring生态系统的组成部分,为开发者提供了声明式数据访问的方式,允许通过简单的...

    Spring Data JPA.zip

    **Spring Data JPA 深度解析** Spring Data JPA 是 Spring Framework 的一个重要模块,它为 Java Persistence API (JPA) 提供了便捷的数据访问层。这个框架简化了数据库操作,使得开发人员能够以声明式的方式处理...

    spring data jpa 教程

    使用 Spring Data JPA,可以快速搭建起一个基本的数据访问层,实现常见的 CRUD(创建、读取、更新、删除)操作。同时,Spring Data JPA 也支持一些高级特性,例如分页和排序,使得数据处理更加灵活。 第二章:Jpa...

    Spring Data JPA Demo

    Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互,JPA 是Java 开发者用来管理和持久化应用程序数据的一种标准。在这个“Spring Data JPA Demo”项目中,我们将深入探讨如何利用...

    Spring Data JPA入门项目02

    在本项目"Spring Data JPA入门项目02"中,我们将深入探讨如何使用Spring Data JPA进行查询操作,包括排序和分页。Spring Data JPA是Spring Framework的一个模块,它为Java Persistence API (JPA) 提供了一种更加便捷...

    spring data jpa简单案例

    通过使用 Spring Data JPA,我们可以避免编写大量重复的 CRUD(创建、读取、更新、删除)操作代码,只需专注于业务逻辑。 ### 1. 引入依赖 首先,我们需要在项目中引入 Spring Data JPA 的相关依赖。如果你使用的...

    springdatajpa.pdf

    开发者需要做的,只是定义好接口,然后使用SpringDataJPA提供的各种注解和方法名规则来完成对数据的CRUD(创建Create、读取Retrieve、更新***e、删除Delete)操作。 在接口中定义的方法名,SpringDataJPA会根据命名...

Global site tag (gtag.js) - Google Analytics