JPA使用

dao Interface继承Repository接口

可以直接继承Repository也可以继承下面的子接口
CrudRepository 
(Spring Data提供)
继承Repository,提供增删改查方法,可以直接调用。
PagingAndSortingRepository
(Spring Data提供)
继承CrudRepository,增加了分页查询和排序两个方法
JpaRepository
(Spring Data JPA提供)
继承PagingAndSortingRepository,是针对JPA技术的接口,提供flush(),saveAndFlush(),deleteInBatch()等方法

继承后可以对数据库进行crud操作。

jpa查询Query的操作

1、解析方法名

持久层接口中定义如下:

public interface UserRepository extends Repository<User, Long> {

List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);

}

将会解析为如下的query

select u from User u where u.emailAddress = ?1 and u.lastname = ?2


解析时能被识别的keyword和包含这些keyword的方法会被解析成什么样的Query,如下表所示。

Keyword

Sample

JPQL snippet

And

findByLastnameAndFirstname

… where x.lastname = ?1 and x.firstname = ?2

Or

findByLastnameOrFirstname

… where x.lastname = ?1 or x.firstname = ?2

Between

findByStartDateBetween

… where x.startDate between 1? and ?2

LessThan

findByAgeLessThan

… where x.age < ?1

GreaterThan

findByAgeGreaterThan

… where x.age > ?1

IsNull

findByAgeIsNull

… where x.age is null

IsNotNull,NotNull

findByAge(Is)NotNull

… where x.age not null

Like

findByFirstnameLike

… where x.firstname like ?1

NotLike

findByFirstnameNotLike

… where x.firstname not like ?1

OrderBy

findByAgeOrderByLastnameDesc

… where x.age = ?1 order by x.lastname desc

Not

findByLastnameNot

… where x.lastname <> ?1

In

findByAgeIn(Collection<Age> ages)

… where x.age in ?1

NotIn

findByAgeNotIn(Collection<Age> age)

… where x.age not in ?1


也可以使用@Query

@Repository
public interface ILoanCifPactDao extends JpaRepository<LoanCifPactVo, Serializable>,JpaSpecificationExecutor<LoanCifPactVo>{
@Query(nativeQuery=true,value="SELECT  * FROM S_LOAN_CIF_PACT  WHERE ID_NUM=?1 ORDER BY BEGIN_DATE " )
public List<LoanCifPactVo> findPactFixNday2day(String idnum);
}

注意:

1:方法的参数个数必须和@Query里面需要的参数个数一致。

2:如果是like,后面的参数需要前面或者后面加“%”

如果要生成更新类的Query语句,在@Query之前添加@Modifying即可。

@Modifying

@Query("update User u set u.firstname = ?1 where u.lastname = ?2")

int setFixedFirstnameFor(String firstname, String lastname);

注意:

1:方法的返回值应该是int,表示更新语句所影响的行数。

2:在调用的地方必须加事务,没有事务不能正常执行。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值