[TOC]

# jpa


## 生成通用模板
实现自定义方法有两种方法:
1. 根据衍生规则进行实现,此种情况简单;查询方法衍生规则 http://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#repositories.query-methods.query-creation  
2. 自己编写接口 OrderRepositoryExt
    - 在接口中添加自定义方法
    - OrderRepository继承此接口
    - OrderRepositoryImpl 实现此接口,这个实现类命名规则是一定的,在OrderRepository的基础上加Impl;spring基础会探测到此种情况,注入OrderRepository就可以了


### OrderRepository
```
public interface OrderRepository extends PagingAndSortingRepository<OrderEntity, String>, QueryDslPredicateExecutor<OrderEntity>, OrderRepositoryExt {
    /**
     * 根据渠道号和订单编号查询订单
     *
     * @param orderNo
     * @param chanNo
     * @return
     */
    public OrderEntity findFirstByOrderNoAndChanNo(String orderNo, String chanNo);
}
```
### OrderRepositoryExt
```
public interface OrderRepositoryExt {
 
    public OrderEntity findByOrderNo(String orderNo);
}
```

### OrderRepositoryImpl
```
public class OrderRepositoryImpl implements OrderRepositoryExt {
 
    @Autowired
    private OrderRepository orderRepository;
 
    @Override
    public OrderEntity findByOrderNo(String orderNo) {
        QOrderEntity qOrderEntity = QOrderEntity.orderEntity;
        Predicate predicate = qOrderEntity.orderNo.eq(orderNo);
        return orderRepository.findOne(predicate);
    }
}
```
### 使用方法
```
@RestController
@RequestMapping("/test")
public class OrderController {
    private static Logger log = LoggerFactory.getLogger(OrderController.class);
 
    @Autowired
    private OrderRepository repository;
 
 
    @RequestMapping("/orders")
    public Object order() {
        OrderEntity orderEntity = new OrderEntity();
        orderEntity.setId(UUID.randomUUID().toString());
        orderEntity.setAccountId("111");
        orderEntity.setAmount(new BigDecimal(10));
        orderEntity.setChanNo("1111");
        orderEntity.setCreateAt(new Date());
        orderEntity.setOrderNo(UUID.randomUUID().toString());
        orderEntity.setOrderStatus("execed_success");
        orderEntity.setOrderType("INVEST");
        orderEntity.setProductId("2222");
        orderEntity.setTransactTime(new Date());
        orderEntity.setProductName("12312");
        orderEntity.setUpdateAt(new Date());
        repository.save(orderEntity);
 
        log.info("save-{}", JSONUtil.toJson(repository.findFirstByOrderNoAndChanNo(orderEntity.getOrderNo(), orderEntity.getChanNo())));
 
        orderEntity.setProductName("update");
        repository.save(orderEntity);
        log.info("update-{}", JSONUtil.toJson(repository.findByOrderNo(orderEntity.getOrderNo())));
 
        log.info("all ={}", JSONUtil.toJson(repository.findAll()));
        List<String> ids = new ArrayList<>();
        ids.add("11111");
        return null;
    }
```


## 手动编写hql查询
实体对象idea识别不出来

jpa,querydsl的更多相关文章

  1. Spring Boot JPA - Querydsl

    https://lufficc.com/blog/spring-boot-jpa-querydsl

  2. Spring Data JPA 和MyBatis比较

    现在Dao持久层的解决方案中,大部分是采用Spring Data JPA或MyBatis解决方案,并且传统企业多用前者,互联网企业多用后者. Spring Data JPA 是Spring Data ...

  3. Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先我并不推荐使用jpa作为ORM框架,毕竟对于负责查询的时候还是不太灵活,还是建议使用mybatis,自己写sql比较好.但是如果公司用这个就没办法了,可以 ...

  4. JPQ整合Querydsl入门篇

    # JPQ整合Querydsl入门篇  不知道你们喜不喜欢用JPA ,我本人是很喜欢 不要和我说JPA不适合复杂查询等等的,你要知道现在都是微服务,只要你服务器拆分够细表设计够合理,都是服务之间调能用 ...

  5. 为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate

    一.前言 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template. Hibe ...

  6. Spring Boot (七): Mybatis极简配置

    Spring Boot (七): Mybatis极简配置 1. 前言 ORM 框架的目的是简化编程中的数据库操作,经过这么多年的发展,基本上活到现在的就剩下两家了,一个是宣称可以不用写 SQL 的 H ...

  7. Spring Data JPA进阶——Specifications和Querydsl

    Spring Data JPA进阶--Specifications和Querydsl 本篇介绍一下spring Data JPA中能为数据访问程序的开发带来更多便利的特性,我们知道,Spring Da ...

  8. Spring Data JPA教程, 第五部分: Querydsl(未翻译)

    The fourth part of my Spring Data JPA tutorialdescribed how you can implement more advanced queries ...

  9. 如何在Spring Data JPA中引入Querydsl

    一.环境说明 基础框架采用Spring Boot.Spring Data JPA.Hibernate.在动态查询中,有一种方式是采用Querydsl的方式. 二.具体配置 1.在pom.xml中,引入 ...

随机推荐

  1. 清空sql 日志

    USE [master] GO ALTER DATABASE 库名 SET RECOVERY SIMPLE GO USE 库名 GO ,,TRUNCATEONLY) GO USE [master] G ...

  2. 什么是以太坊私钥储存(Keystore)文件

    进入keystore管理以太坊私钥的障碍很大,主要是因为以太坊客户端在直接的命令行或图形界面下隐藏了大部分的密码复杂性. 例如,用geth: $ geth account new Your new a ...

  3. Hibernate是如何延迟加载的

    Hibernate是如何延迟加载的 2011-12-24 13:58 242人阅读 评论(0) 收藏 举报 hibernatespringinterceptordao数据库integer Hibern ...

  4. POI中HSSF和XSSF操作Excel

    POI中HSSF和XSSF操作Excel   在公司实习快一个月了,这段时间公司业务要用JAVA操作复杂的Excel报表.刚开始的Excel还好,没有涉及到复杂的图表,所以使用JXL操作Excel,但 ...

  5. HEOI2016 树

    传送门 这道题还是很简单的,可以树剖,然后还有看大佬暴力模拟AC的????!! 我们就执行俩操作,一个是单点修改,这个随便修,然后就是查询一个点,离他最近的被打过标记过的祖先.这个可以这么想,我们先q ...

  6. str函数isdigit、isdecimal、isnumeric的区别

    s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...

  7. 《10 minutes to pandas》(转)

    原文出处:http://pandas.pydata.org/pandas-docs/stable/10min.html 10 Minutes to pandas This is a short int ...

  8. UI:sqlite数据库

    使用sqllite的时候一些笔记 数据库(管理类),在工程 general 导入 动态链接库 libsqllite3.0.dylib  在.h文件里引入导入 sqllite3.h 头文件 在.h里面声 ...

  9. 06_传智播客iOS视频教程_源文件后缀名和main函数

    OC与C语言的不同. 把OC程序运行起来,CPU只会找main函数.并且只会执行main函数当中的代码.当main函数的代码执行完毕之后这个程序就自动结束掉了. main函数的参数是可以让我们在运行程 ...

  10. Find offset of first/last found substring

    DATA: TEXT TYPE STRING VALUE 'RO_LL_OVER BEET_HOVEN', MOFF TYPE I VALUE '-1'. FIND FIRST OCCURRENCE ...