JPA 自定义sql语句

一、什么是JPA

JPA是Java Persistence API的简称,中文名Java持久层API,JDK 5.0注解或XML描述对象关系表的映射关系,并将运行期的实体[对象持久化]到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

二、insert 插入时规避值 为null的字段

/**
     *复杂JPA操作  使用@Query()自定义sql语句  根据业务id UId去更新整个实体
     * 删除和更新操作,需要@Modifying和@Transactional注解的支持
     *
     * 更新操作中 如果某个字段为null则不插入,否则插入【注意符号和空格位置】
     */
    @Transactional
    @Modifying
    @Query(value = "insert into bi_user (user_code,user_type) values (" +
            "CASE WHEN :#{#users.userCode} IS NULL THEN user_code ELSE :#{#users.userCode} END ," +
            "CASE WHEN :#{#users.userType} IS NULL THEN user_type ELSE :#{#users.userType} END ," +
            ")", nativeQuery = true)
    int insertAndFlush(@Param("users") Users users);

三、update 更新时规避值 为null的字段

/**
     *复杂JPA操作  使用@Query()自定义sql语句  根据业务id UId去更新整个实体
     * 删除和更新操作,需要@Modifying和@Transactional注解的支持
     *
     * 更新操作中 如果某个字段为null则不更新,否则更新【注意符号和空格位置】
     */
    @Transactional
    @Modifying
    @Query(value = "update bi_user a set " +
            "a.user_type = CASE WHEN :#{#users.userType} IS NULL THEN a.user_type ELSE :#{#users.userType} END ," +
            "a.realname = CASE WHEN :#{#users.realname} IS NULL THEN a.realname ELSE :#{#users.realname} END ," +
            "where a.user_code = :#{#users.userCode}", nativeQuery = true)
    int updateAndFlush(@Param("users") Users users);
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值