Spring数据访问的几种写法

常见的数据访问的写法大概有以下几种:

  • Native SQL
  • JPQL
  • Criteria API
  • Spring Data JPA
  • 其他框架(jooq、MyBatis等)

Native SQL

List<User> results = entityManager
    .createNativeQuery("select * from user where name = :name", User.class)
    .setParameter("name", "tony56")
    .getResultList();

Native SQL 算是最简单,也最直观的使用方法了。EntityManger是JSR标准里面提供的,所以不需要依托任何框架就可以使用。

JPQL

List<User> results = entityManager
        .createQuery("from User where name = :name", User.class)
        .setParameter("name", "tony56")
        .getResultList();

JPQL跟Native SQL相比,其实也是大同小异。只是把select部分省略了。

Criteria API

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
query.where(cb.equal(root.get("name"), "tony56"));
List<User> results = entityManager
        .createQuery(query)
        .getResultList();

Criteria API 其实功能很强大,但是就是写起来太复杂。理解起来也比较费劲。在项目中实际使用的其实很少。

Spring Data JPA

Spring框架中提供的一个功能。用法很简单。只需要继承JpaRepository,并且加上 @Repository 的注释就OK。然后可以按照命名规则去定义方法了。
其实一般的小项目,

@Repository
interface UserRepository : JpaRepository<User, Int> {
    fun findByEmail(email: String): User?
    @Query("select u from User u where u.name like %:name% order by u.id asc")
    fun findByName(name: String): List<User>
}

Jooq

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

Close Bitnami banner
Bitnami