springdatajpa命名规则_SpringDataJPA详解(一)

【102】

SpringDataJPA

SpringDataJPA 是springdata 项目下的一个模块。提供了一套基于JPA 标准操作数据库的简化方案。底层默认的是依赖 HibernateJPA 来实现的。

SpringDataJPA 的技术特点:我们只需要定义接口并集成 Spring DataJPA 中所提供的接 口就可以了。不需要编写接口实现类。

一、 创建 SpringDataJPA 项目

1 导入 jar 包

配置文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="Index of /schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:jpa="http://www.springframework.org/schema/data/jpa"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd Index of /schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/data/jpahttp://www.springframework.org/schema/data/jpa/spring-jpa.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">

class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBe an">

com.bjsxt.pojo

class="org.springframework.orm.jpa.JpaTransactionManager">

二、 SpringDataJPA 的接口继承结构

三、 SpringDataJPA 的运行原理

@PersistenceContext(name="entityManagerFactory")

private EntityManager em;

@Test

public void test1(){

//org.springframework.data.jpa.repository.support.SimpleJpaRepositor y@fba8bf//System.out.println(this.usersDao);//class com.sun.proxy.$Proxy29 代理对象 是基于 JDK 的动态代理方式 创建的//System.out.println(this.usersDao.getClass());JpaRepositoryFactory factory = new JpaRepositoryFactory(em);

//getRepository(UsersDao.class);可以帮助我们为接口生成实现类。//而 这个实现类是 SimpleJpaRepository 的对象//要求:该接口必须要是继承 Repository 接口UsersDao ud = factory.getRepository(UsersDao.class);

System.out.println(ud);

System.out.println(ud.getClass()); }

四、 Repository 接口

Repository 接口是 SpringDataJPA 中为我我们提供的所有接口中的顶层接口

Repository 提供了两种查询方式的支持

1)基于方法名称命名规则查询

2)基于@Query 注解查询

1 方法名称命名规则查询

规则:findBy(关键字)+属性名称(属性名称的首字母大写)+查询条件(首字母大写)

1.1创建接口

/** * Repository 接口讲解* @author Administrator* */

public interface UsersDao extends Repository {

List findByUsernameIs(String string);

List findByUsernameLike(String string);

List findByUsernameAndUserageGreaterThanEqual(String name,Integer age); }

1.2测试类

/** * Repository 接口测试* @author Administrator* */

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:applicationContext.xml")

public class RepositoryTest {

@Autowired private UsersDao usersDao;

/*** 需求:使用用户名作为查询条件*/ @Test public void test1(){

/*** 判断相等的条件,有三种表示方式* 1,什么都不写,默认的就是做相等判断* 2,Is* 3,Equal*/ List list = this.usersDao.findByUsernameIs("王五");

for (Users users : list) { System.out.println(users); } }

/*** 需求:根据用户姓名做 Like 处理* Like:条件关键字*/

@Test public void test2(){

List list = this.usersDao.findByUsernameLike("王%");

for (Users users : list) {

System.out.println(users); }

}

/** * 需求:查询名称为王五,并且他的年龄大于等于 22 岁*/

@Test public void test3(){

List list = this.usersDao.findByUsernameAndUserageGreaterThanEqual("王五", 22);

for (Users users : list) { System.out.println(users); } } }

2 基于@Query 注解的查询

2.1通过 JPQL 语句查询

JPQL:通过 Hibernate 的 HQL 演变过来的。他和 HQL 语法及其相似。

2.1.1创建接口

/** * Repository 接口讲解* @author Administrator* */

public interface UsersDao extends Repository {

//方法名称命名规则List findByUsernameIs(String string);

List findByUsernameLike(String string);

List findByUsernameAndUserageGreaterThanEqual(String name,Integer age);

//使用@Query 注解查询@Query(value="from Users where username = ?")

List queryUserByNameUseJPQL(String name);

@Query("from Users where username like ?")

List queryUserByLikeNameUseJPQL(String name);

@Query("from Users where username = ? and userage >= ?")

List queryUserByNameAndAge(String name,Integer age);

}

2.1.2测试类

/*** 测试@Query 查询 JPQL*/

@Test public void test4(){

List list = this.usersDao.queryUserByNameUseJPQL("王五");

for (Users users : list) {

System.out.println(users);

}

}

/*** 测试@Query 查询 JPQL*/

@Test public void test5(){

List list = this.usersDao.queryUserByLikeNameUseJPQL("王%");

for (Users users : list) {

System.out.println(users); }

}

/*** 测试@Query 查询 JPQL*/ @Test public void test6(){

List list = this.usersDao.queryUserByNameAndAge("王五",22);

for (Users users : list) {

System.out.println(users);

}

}

2.2通过 SQL 语句查询

2.2.1创建接口

/*** Repository 接口讲解* @author Administrator* */

public interface UsersDao extends Repository {

//方法名称命名规则List findByUsernameIs(String string);

List findByUsernameLike(String string);

List findByUsernameAndUserageGreaterThanEqual(String name,Integer age);

//使用@Query 注解查询@Query(value="from Users where username = ?")

List queryUserByNameUseJPQL(String name);

@Query("from Users where username like ?")

List queryUserByLikeNameUseJPQL(String name);

@Query("from Users where username = ? and userage >= ?")

List queryUserByNameAndAge(String name,Integer age);

//使用@Query 注解查询 SQL//nativeQuery:默认的是 false.表示不开启 sql 查询。是否对 value 中的语句做转义。

@Query(value="select * from t_users where username = ?",nativeQuery=true)

List queryUserByNameUseSQL(String name);

@Query(value="select * from t_users where username like ?",nativeQuery=true)

List queryUserByLikeNameUseSQL(String name);

@Query(value="select * from t_users where username = ? and userage >= ?",nativeQuery=true)

List queryUserByNameAndAgeUseSQL(String name,Integer age);

}

2.2.2测试类

/*** 测试@Query 查询 SQL*/

@Test public void test7(){

Listlist =this.usersDao.queryUserByNameUseSQL("王五");

for (Users users : list) {

System.out.println(users); } }

/*** 测试@Query 查询 SQL*/ @Test public void test8(){

List list = this.usersDao.queryUserByLikeNameUseSQL("王%");

for (Users users : list) {

System.out.println(users); }

}

/*** 测试@Query 查询 SQL*/ @Test public void test9(){

List list = this.usersDao.queryUserByNameAndAgeUseSQL(" 王五", 22);

for (Users users : list) {

System.out.println(users); } }

3 通过@Query 注解完成数据更新

3.1创建接口

@Query("update Users set userage = ? where userid = ?")

@Modifying

//@Modifying 当前语句是一个更新语句void updateUserAgeById(Integer age,Integer id);

3.2测试类

/*** 测试@Query update*/

@Test

@Transactional

@Rollback(false)

public void test10(){

this.usersDao.updateUserAgeById(24, 5); }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值