电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Spring boot開發web應用JPA過程解析

瀏覽:87日期:2023-08-10 18:43:24

我們使用了傳統的JDBC方式連接關系型數據庫,完成數據持久化操作,文章最后提到“雖然JdbcTemplate將創建連接、創建語句、關閉連接、關閉結果集和sql異常處理等做了很好的封裝,但是還有待完善,所以本節內容將web項目進行改造,支持更簡單的JPA方式。

JPA全稱Java Persistence API。JPA通過JDK 5.0注解或XML描述對象-關系表du的映射關系,并將運行期的實體對象持久化到數據庫中。

1.引入依賴

要使用JPA,需先引入相關依賴,JPA是Spring Data的子項目,具體依賴如下

<!--JPA--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

2.實體類改造

package com.kinglead.demo.entity; ​ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; ​ import javax.persistence.*; import java.io.Serializable; ​ @Data //添加getter、setter方法 @NoArgsConstructor //無參構造函數 @AllArgsConstructor //所以參數構造函數 @Entity //聲明為JPA實體 @Table(name = 't_user') //該標注與@Entity標注并列使用,用于指明數據庫的表名 public class User implements Serializable { private static final long serialVersionUID = -21070736985722463L; ​ @Id //指明主鍵 @GeneratedValue(strategy= GenerationType.AUTO) private Long id; ​ @Column(name = 'name', columnDefinition = '姓名') //指明字段 private String name; ​ @Column(name = 'password', columnDefinition = '密碼') //指明字段 private String password; ​ }

@Entity注解將User類聲明為JPA實體

@Table注解指明數據庫表名

@Id注解指明表的主鍵

@GeneratedValue注解指明主鍵生成策略,strategy= GenerationType.AUTO依賴數據庫字段生成ID

@Column注解指明表的字段

注:關于JPA實體還有很多注解,這里就不展開講解了,后續后時間專門寫一篇文章來講解。感興趣的同學也可以去官網繼續學習:https://spring.io/projects/spring-data-jpa

3.聲明JPA repository

package com.kinglead.demo.dao; ​ import com.kinglead.demo.entity.User; import org.springframework.data.jpa.repository.JpaRepository; ​ public interface UserRepository extends JpaRepository<User, Long>{ }

UserRepository接口需繼承JpaRepository接口,JpaRepository定義了很多CRUD的操作方法。繼承JpaRepository需要傳入2個參數,第一是持久化的實體類,第二是主鍵id的類型。如果實現了JpaRepository接口類,那么UserRepository根本不用再編寫實現類,因為Spring Data JPA會在項目啟動時自動幫我們生成。(另外也可以實現CrudRepository接口來聲明JPA repository,它與JpaRepository的最大不同是JpaRepository支持分頁查詢)

4.在repository添加自定義方法除了JpaRepository提供的CRUD才做外,我們也可以自定義方法,如findAllByNameAndPassword方法

package com.kinglead.demo.dao; ​ import com.kinglead.demo.entity.User; import org.springframework.data.jpa.repository.JpaRepository; ​ public interface UserRepository extends JpaRepository<User, Long> { ​ User findByNameAndPassword(String name, String password); ​ }

在這里自定義的findAllByNameAndPassword方法也不需要自己單獨編寫實現,只要自定義的方法名遵循規范(領域特定語言Domain-Specific Language DSL),JPA就能自動生成。

另外,如果規范約定不支持實際需求,可以在自定義方法上使用@Query注解,編寫原生SQL。如findAllByNameAndPassword方法也可以這樣聲明,當然針對這種簡單的查詢,不建議這么做,讓JPA自動處理就好。

@Query(value = 'select id,name,password from t_suer where name=? and password=?', nativeQuery = true) User findByNameAndPassword(String name, String password);

5.UserServiceImpl用戶服務實現改造

package com.kinglead.demo.service.impl; ​ import com.kinglead.demo.dao.UserRepository; import com.kinglead.demo.entity.User; import com.kinglead.demo.service.UserService; import org.springframework.stereotype.Service; ​ import javax.annotation.Resource; import java.util.List; ​ @Service public class UserServiceImpl implements UserService { ​ @Resource private UserRepository userRepository; ​ /** * 新增用戶 */ @Override public User insert(User user) { return userRepository.save(user); } ​ /** * 通過用戶名和密碼查詢用戶 */ @Override public User queryByNameAndPassword(User user) { return userRepository.findByNameAndPassword(user.getName(), user.getPassword()); } ​ /** * 查詢用戶列表 */ @Override public List<User> queryAll() { return userRepository.findAll(); } ​ }

6.其它

項目涉及到的其它代碼不變,保持與第三節一直即可。

測試下http://localhost:8080/user/userList,同樣能返回用戶列表

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 中山市派格家具有限公司【官网】 | 阿尔法-MDR2000无转子硫化仪-STM566 SATRA拉力试验机-青岛阿尔法仪器有限公司 | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 深圳市东信高科自动化设备有限公司 | 中国在职研究生招生信息网| 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 杭州双螺杆挤出机-百科| COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 合肥地磅_合肥数控切割机_安徽地磅厂家_合肥世佳电工设备有限公司 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 |