<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
compile( //hibernate 'org.springframework.boot:spring-boot-starter-data-jpa', 'org.hibernate:hibernate-java8', 'mysql:mysql-connector-java', //springmvc 'org.springframework.boot:spring-boot-starter-web', "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", "com.kingboy:common:$commonVersion" )
server: port: 8080 spring: application: name: kingboy-springboot-data datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql:///jpa?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 schema: classpath:shema.sql data: classpath:data.sql jpa: hibernate: ddl-auto: none
scheme.sql:建表語句,我沒有使用hibernate的建表
CREATE TABLE IF NOT EXISTS `user` ( `id` bigint(20) NOT NULL, `age` int(11) DEFAULT NULL, `birth` datetime DEFAULT NULL, `password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `realname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `username` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
data.sql:一些假資料,每次重啟清空重新插入
DELETE FROM `user`; INSERT INTO `user` VALUES ('1', '56', '2016-09-12 12:12:00', 'king123', '小明', 'boy'), ('2', '12', '1993-08-12 07:12:00', 'king123', '小南', 'kingboy'), ('3', '11', '1992-05-12 23:12:00', 'king123', '小孩', 'boyking'), ('4', '2', '2006-12-13 20:12:00', 'king123', '金子', 'kiboy'), ('5', '66', '2012-09-12 05:12:00', 'king123', '哈嘍小金', 'baby'), ('6', '12', '2000-02-13 06:12:00', 'king123', 'Baby', 'xiaohong'), ('7', '24', '2017-12-12 11:12:00', 'king123', '小金', 'king');
@Entity public class User { @Id private Long id; private String username; private String realname; private String password; private Integer age; @JsonFormat(pattern = "yyyy-MM-dd HH:mm") private LocalDateTime birth; //Setter Getter ... }
寫一個類繼承JpaRepository<T, ID>,需要寫兩個泛型,第一個代表要儲存的實體型別,第二個代表主鍵型別,例如寫一個User類的倉儲如下:
public interface UserRepository extends JpaRepository<User, Long> { }
我們來看一下JpaRepository的繼承結構(如下),其實就可以發現仍然是JPA的一套Reposiroty,那我們其實就可以用JPA的一套介面操作進行資料的增刪改查,
spring會自動根據方法名為我們生成對應的代理類去實現這些方法。
先來看看JpaRepository已經實現的一些基礎方法,這些方法的名稱已經具有很好的說明解釋了,那麼大家自己看看,很容易就能理解
jpa自帶的這些方法肯定是不能滿足我們的業務需求的,那麼我們如何自定義方法呢?我們只要使用特定的單詞對方法名進行定義,那麼Spring就會對我們寫的方法名進行解析,
生成對應的範例進行資料處理,有木有很簡單?那麼接下來就使用Spring官方檔案中的範例進行演示。
先來看下官方關鍵字的說明
邏輯操作 | 在定義方法時使用的關鍵詞 |
---|---|
AND | And |
OR | Or |
AFTER | After , IsAfter |
BEFORE | Before , IsBefore |
CONTAINING | Containing , IsContaining , Contains |
BETWEEN | Between , IsBetween |
ENDING_WITH | EndingWith , IsEndingWith , EndsWith |
EXISTS | Exists |
FALSE | False , IsFalse |
GREATER_THAN | GreaterThan , IsGreaterThan |
GREATER_THAN_EQUALS | GreaterThanEqual , IsGreaterThanEqual |
IN | In , IsIn |
IS | Is , Equals , (or no keyword) |
IS_EMPTY | IsEmpty , Empty |
IS_NOT_EMPTY | IsNotEmpty , NotEmpty |
IS_NOT_NULL | NotNull , IsNotNull |
IS_NULL | Null , IsNull |
LESS_THAN | LessThan , IsLessThan |
LESS_THAN_EQUAL | LessThanEqual , IsLessThanEqual |
LIKE | Like , IsLike |
NEAR | Near , IsNear |
NOT | Not , IsNot |
NOT_IN | NotIn , IsNotIn |
NOT_LIKE | NotLike , IsNotLike |
REGEX | Regex , MatchesRegex , Matches |
STARTING_WITH | StartingWith , IsStartingWith , StartsWith |
TRUE | True , IsTrue |
WITHIN | Within , IsWithin |
舉幾個方法的栗子:
使用範例 | 說明 |
---|---|
findByNameAndPrice(String name,Double price) | 根據使用者名稱和價格進行查詢 |
findByNameOrPrice(String name,Double price) | 根據使用者名稱或者價格進行查詢 |
findByName(String name) | 根據使用者名稱進行查詢 |
findByNameNot(String name) | 查詢使用者名稱!=name的使用者 |
findByPriceBetween(Double a, Double b) | 查詢價格區間 |
findByPriceLessThan(Double price) | 查詢價格小於price,不包含price |
findByPriceGreaterThan(Double price) | 查詢價格大於price,不包含price |
findByPriceBefore(Double price) | 查詢價格小於price,包含price |
findByPriceAfterDouble price | 查詢價格大於price,包含price |
findByNameLike(String name) | 根據使用者名稱查詢??????這個我實驗了下,是完全匹配查詢,並沒有模糊查詢 |
findByNameStartingWith(String name) | 使用者名稱以name開頭的使用者 |
findByNameEndingWith(String name) | 使用者名稱以name結尾的使用者 |
findByNameContaining(String name) | 使用者名稱包含name的使用者,相當於sql中的like %name% |
findByNameIn(Collectionnames) | 查詢使用者名稱在名稱列表的使用者 |
findByNameNotIn(Collectionnames) | 查詢使用者名稱不在名稱列表的使用者 |
findByAvailableTrue | 查詢avaliable屬性為true的使用者 |
findByAvailableFalse | 查詢avaliable屬性為false的使用者 |
findByAvailableTrueOrderByNameDesc() | 查詢avaliable屬性為true的使用者,並按使用者名稱排序 |
如果需要分頁功能的話,只需要在方法的最後一個引數加上Pageable就可以了,下面的範例中有演示
下面寫幾個範例進行演示,只把倉儲層的列出來了,整體執行是測試過的,沒問題,如果需要整體程式碼請到本文頂部的github倉庫檢視。
public interface UserRepository extends JpaRepository<User, Long> { /** * 查詢使用者名稱為username的使用者 * @param username * @return */ List<User> findByUsername(String username); /** * 查詢使用者名稱為username的使用者,帶分頁 * @param username * @return */ List<User> findByUsername(String username, Pageable pageable); /** * 查詢使用者名稱為username並且真實姓名為realname的使用者 * @param username * @param realname */ List<User> findByUsernameAndRealname(String username, String realname); /** * 查詢使用者名稱為username或者姓名為realname的使用者 */ List<User> findByUsernameOrRealname(String username, String realname); /** * 查詢使用者名稱不是username的所有使用者 * @param username * @return */ List<User> findByUsernameNot(String username); /** * 查詢年齡段為ageFrom到ageTo的使用者 * @param ageFrom * @param ageTo * @return */ List<User> findByAgeBetween(Integer ageFrom, Integer ageTo); /** * 查詢生日小於birthTo的使用者 */ List<User> findByBirthLessThan(LocalDateTime birthTo); /** * 查詢生日段大於birthFrom的使用者 * @param birthFrom * @return */ List<User> findByBirthGreaterThan(LocalDateTime birthFrom); /** * 查詢年齡小於或等於ageTo的使用者 */ List<User> findByAgeBefore(Integer ageTo); /** * 查詢年齡大於或等於ageFrom的使用者 * @param ageFrom * @return */ List<User> findByAgeAfter(Integer ageFrom); /** * 使用者名稱模糊查詢 * @param username * @return */ List<User> findByUsernameLike(String username); /** * 查詢以start開頭的使用者 * @param start * @return */ List<User> findByUsernameStartingWith(String start); /** * 查詢以end結尾的使用者 * @return */ List<User> findByUsernameEndingWith(String end); /** * 查詢使用者名稱包含word的使用者 * @param word * @return */ List<User> findByUsernameContaining(String word); /** * 查詢名字屬於usernames中的使用者 * @param usernames * @return */ List<User> findByUsernameIn(Collection<String> usernames); /** * 查詢名字不屬於usernames中的使用者 * @param usernames * @return */ List<User> findByUsernameNotIn(Collection<String> usernames); /** *最後來個複雜點的:查詢年齡小於ageTo,姓名以start開頭,id大於idTo的使用者,並且按照年齡倒序 * @return */ List<User> findByAgeBeforeAndUsernameStartingWithAndIdGreaterThanOrderByAgeDesc(Integer ageTo, String start, Long idTo); }
我們可以使用@Query註解進行查詢,這樣要求我們自己寫查詢語句,需要會hqlS查詢才可以,其實也很簡單,不會寫查就是了。
注意:hql的方式仍然可以在引數最後一個加Pageable進行分頁,但是nativeQuery不可以。
public interface BookRepository extends ElasticsearchRepository<Book, String> { /** * 使用@Query和hql進行查詢 * @param name * @return */ @Query("from User where username = :name") List<User> findByNameHQL(@Param(value = "name") String name, Pageable pageable); /** * 使用原生sql進行查詢 * @param name * @return */ @Query(value = "select * from user where username = :name", nativeQuery = true) List<User> findByNameNative(@Param(value = "name") String name); }
5.這種通過介面方法的方式也可以進行聯表查詢,以後有機會再補充
以上就是spring jpa整合依賴的環境準備及實體類倉庫編寫教學的詳細內容,更多關於spring jpa整合環境實體類倉庫編寫教學的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45