Spring Data JPA 执行自定义sql


前言

spring data jpa 提供了良好的数据库操作接口,通过继承JpaRepository接口,可以很方便的提供对数据的操作。但在有些时候我们可能需要一些动态的查询条件,通过上面的方式就有些不方便了。下面提供了一种自定义sql的方式。


一、创建EntityManager实体对象

示例代码如下:

 @Bean(name = "entityManager")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) { // EntityManagerFactoryBuilder有jpa自动配置,并注入ioc中
        return Objects.requireNonNull(entityManagerFactory(builder).getObject()).createEntityManager();
    }

    @Bean(name = "entityManagerFactory")    //创建实体工厂
    public LocalContainerEntityManagerFactoryBean entityManagerFactory (EntityManagerFactoryBuilder builder) {
        return builder.dataSource(secondDataSource)
                .properties(getHibernateProperties())
                .packages("com.xxx.basic.entity")     //换成你自己的实体类所在位置
                .persistenceUnit("persistenceUnit")
                .build();
    }

二、引入EntityManager对象

EntityManager是javax.persistence包下的一个接口。从字面上解释是实体类的管理者,从注释上来看是:EntityManager对象与一个持久化的容器相关联,一个持久化容器由一组唯一的实体对象组成,持久化容器管理实体对象的生命周期,EntityManager Api 可以用来创建和删除实体对象,通过主键查找实体或者查询实体

<p> An <code>EntityManager</code> instance is associated with a persistence context. A persistence context is a set of entity instances in which for any persistent entity identity there is a unique entity instance. Within the persistence context, the entity instances and their lifecycle are managed. The <code>EntityManager</code> API is used to create and remove persistent entity instances, to find entities  by their primary key, and to query over entities.

 在ioc容器中通过@PersistenceContext或者@Autowired引入EntityManager对象,示例代码如下:

public class TestServiceImpl implements TestService {


    @PersistenceContext(name = "xxx") //name 对应于 spring data jpa中配置的EntityManager对象名
    private EntityManager entityManager; 


}

三、使用EntityManager进行查询

示例代码如下:

public List<UserInfo> queryUserInfoByUserNo(String userNo) {

        StringBuilder sqlBuilder = new StringBuilder(" SELECT  * FROM t_user  WHERE user_no= :userNo ");

        //拼接条件
        //....

        Query nativeQuery = entityManager.createNativeQuery(sqlBuilder.toString(), UserInfo.class);
        nativeQuery.setParameter("userNo",userNo);
        return nativeQuery.getResultList();
    }

总结

这篇文章主要介绍了spring data jpa 环境下,如何执行自定义sql,具体实现方式还有多种方式,欢迎各位大佬在评论区留言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值