日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式

發布時間:2024/7/23 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring Data JPA的運行原理:

@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()); }

然后我們再次說下Spring Data的介紹,這樣好帶入查詢:

Spring Data是什么?

Spring Data是一個用于簡化數據庫訪問,并支持云服務的開源框架。其主要目標是使得對數據的訪問變得方便快捷。

Spring Data JPA能干什么?

可以極大的簡化JPA的寫法,可以在幾乎不用寫實現的情況下,實現對數據的訪問和操作,除了CRUD外,還包括如分頁、排序等一些常用的功能。

Spring Data JPA提供的接口,Spring Data JPA的核心概念:

1:Repository:最頂層的接口,是一個空的接口,目的是為了統一所有Repository的類型,且能讓組件掃描的時候自動識別。

2:CrudRepository :是Repository的子接口,提供CRUD的功能

3:PagingAndSortingRepository:是CrudRepository的子接口,添加分頁和排序的功能

4:JpaRepository:是PagingAndSortingRepository的子接口,增加了一些實用的功能,比如:批量操作等。

5:JpaSpecificationExecutor:用來做負責查詢的接口

6:Specification:是Spring Data JPA提供的一個查詢規范,要做復雜的查詢,只需圍繞這個規范來設置查詢條件

Repository 接口:

Repository 接口是 Spring Data JPA 中為我我們提供的所有接口中的頂層接口。

Repository 提供了兩種查詢方式的支持

1)基于方法名稱命名規則查詢

2)基于@Query 注解查詢

一、方法名稱命名規則查詢

規則:findBy(關鍵字)+屬性名稱(屬性名稱的首字母大寫)+查詢條件(首字母大寫)

如果打錯字了,還是啥的,評論修正下哈(手動滑稽),其實還有很多的,只是我把一些常用的拿出來了。

結構:

Dao層的UsersDao 接口:

import com.msk.pojo.Users; import org.springframework.data.repository.Repository;import java.util.List;/** Repository接口* @author Administrator**/ public interface UsersDao extends Repository<Users, Integer> {List<Users> findByUsernameIs(String string);List<Users> findByUsernameLike(String string);List<Users> findByUsernameAndUserageGreaterThanEqual(String name, Integer age); }

實體bean Users:

package com.msk.pojo;import java.io.Serializable;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name="t_users") public class Users implements Serializable{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)//strategy=GenerationType.IDENTITY 自增長@Column(name="userid")private Integer userid;@Column(name="username")private String username;@Column(name="userage")private Integer userage;public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getUserage() {return userage;}public void setUserage(Integer userage) {this.userage = userage;}@Overridepublic String toString() {return "Users [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";}}

Test測試類:

package com.msk.test;import com.msk.dao.UsersDao; import com.msk.pojo.Users; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.List;/*** Repository接口測試* @author Administrator**/ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class RepositoryTest {@Autowiredprivate UsersDao usersDao;/*** 需求:使用用戶名作為查詢條件*/@Testpublic void test1(){/*** 判斷相等的條件,有三種表示方式* 1,什么都不寫,默認的就是做相等判斷* 2,Is* 3,Equal*/List<Users> list = this.usersDao.findByUsernameIs("莫名其妙");for (Users users : list) {System.out.println(users);}}/*** 需求:根據用戶姓名做Like處理* Like:條件關鍵字*/@Testpublic void test2(){List<Users> list = this.usersDao.findByUsernameLike("莫%");for (Users users : list) {System.out.println(users);}}/*** 需求:查詢名稱為莫淞凱,并且他的年齡大于等于22歲*/@Testpublic void test3(){List<Users> list = this.usersDao.findByUsernameAndUserageGreaterThanEqual("莫名其妙", 23);for (Users users : list) {System.out.println(users);}} }

配置文件:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/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/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/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/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 配置讀取properties文件的工具類 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置c3p0數據庫連接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="jdbcUrl" value="${jdbc.url}"/><property name="driverClass" value="${jdbc.driver.class}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!-- Spring整合JPA 配置EntityManagerFactory--><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource"/><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><!-- hibernate相關的屬性的注入 --><!-- 配置數據庫類型 --><property name="database" value="MYSQL"/><!-- 正向工程 自動創建表 --><property name="generateDdl" value="true"/><!-- 顯示執行的SQL --><property name="showSql" value="true"/></bean></property><!-- 掃描實體的包 --><property name="packagesToScan"><list><value>com.msk.pojo</value></list></property></bean><!-- 配置Hibernate的事務管理器 --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"/></bean><!-- 配置開啟注解事務處理 --><tx:annotation-driven transaction-manager="transactionManager"/><!-- 配置springIOC的注解掃描 --><context:component-scan base-package="com.msk"/><!-- Spring Data JPA 的配置 --><!-- base-package:掃描dao接口所在的包 --><jpa:repositories base-package="com.msk.dao"/> </beans>

jdbc.properties:

jdbc.url=jdbc:mysql://localhost:3306/test jdbc.driver.class=com.mysql.jdbc.Driver jdbc.username=root jdbc.password=root

二、基于@Query 注解的查詢

通過 JPQL 語句查詢

JPQL:通過Hibernate的HQL演變過來的,它和HQL語法及其相似。

接口中:

//使用@Query注解查詢 @Query(value="from Users where username = ?") List<Users> queryUserByNameUseJPQL(String name); //參數名是隨意定義,如果你只是一個參數,只要寫一個問號,它直接會參數綁定,沒問題,如果你具有多個參數的話,它解析起來,是從左至右的去綁定@Query("from Users where username like ?") List<Users> queryUserByLikeNameUseJPQL(String name);@Query("from Users where username = ? and userage >= ?") List<Users> queryUserByNameAndAge(String name,Integer age);

測試類:

/*** 測試@Query查詢 JPQL*/ @Test public void test4(){List<Users> list = this.usersDao.queryUserByNameUseJPQL("莫名其妙");for (Users users : list) {System.out.println(users);} }/*** 測試@Query查詢 JPQL*/ @Test public void test5(){List<Users> list = this.usersDao.queryUserByLikeNameUseJPQL("莫%");for (Users users : list) {System.out.println(users);} }/*** 測試@Query查詢 JPQL*/ @Test public void test6(){List<Users> list = this.usersDao.queryUserByNameAndAge("莫名其妙", 23);for (Users users : list) {System.out.println(users);} }

總結

以上是生活随笔為你收集整理的在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。