黑马程序员技术交流社区

标题: 【哈尔滨校区】Spring-data-jpa的简单总结&我的感悟 [打印本页]

作者: 爱吃猫的天蓝怪    时间: 2018-1-3 21:44
标题: 【哈尔滨校区】Spring-data-jpa的简单总结&我的感悟
本帖最后由 爱吃猫的天蓝怪 于 2018-1-4 11:42 编辑

【Spring-data-jpa的诞生】
Spring-data-jpa的诞生的缘由是为了整合第三方ORM框架,我们都知道Spring-data-jpa封装了Hibernate,Hibernate是一支很大的部队,使用很广泛,也很方便,能力也很强,同时Hibernate也是和JPA整合的比较良好,我们可以认为JPA是标准,事实上也是,JPA几乎都是接口,实现都是Hibernate在做。
上面阐述了JPA和Hibernate的关系,那么Spring-data-jpa又是个什么呢?
Spring涉及的方面很广,最主要的是体现在与第三方的工具的整合上。而在与第三方整合这方面,Spring做了持久化这一块的工作,Spring希望把持久化这块内容也拿下。于是就有了Spring-data-**这一系列。


【Spring-data-jpa的作用】
在Dao中我们使用Spring-data-jpa。那么ORM框架本身提供的功能有什么呢?答案是基本的CRUD,如果使用原生的框架,业务逻辑代码我们一般会自定义,会自己去写SQL语句,然后执行。在这个时候,Spring-data-jpa的威力就体现出来了,ORM提供的能力他都提供,ORM框架没有提供的业务逻辑功能Spring-data-jpa也提供,全方位的解决用户的需求。使用Spring-data-jpa进行开发的过程中,常用的功能,我们不需要写一条sql语句,当然spring-data-jpa也提供自己写sql的方式,这个就看个人怎么选择,都可以。


【Spring-data-jpa的简单登陆功能演示】
1导入架包
spring-data-commons 一套标准 API  
spring-data-jpa 基于整合 JPA 实现  

2 Spring配置文件
为了节省篇幅,这里我只写出与Spring-data-jpa有关的配置结构。
base-package属性,代表你的Repository接口的位置

3简单代码实现
假设我们写一个登陆功能。步骤如下。
3.1
写一个UserRepository接口继承jpaRepository类

为什么要这么做呢?原因是:spring-data-jpa提供基础的CRUD工作,同时也提供业务逻辑的功能,所以我们的Repository接口只要做一项工作,继承spring-data-jpa提供的基础CRUD功能的接口,比如JpaRepository接口。
3.2
前面提到spring-data-jpa能够帮助你完成业务逻辑代码的处理,那他是怎么处理的呢?这里我们根本不需要UserDaoImpl这个类,只需要在UserRepository接口中定义一个方法

3.3
然后在service中调用这个方法就完事了,所有的逻辑只需要这么一行代码,一个没有实现的接口方法。
那么这一能力是如何实现的呢?原理是:spring-data-jpa会根据方法的名字来自动生成sql语句,我们只需要按照方法定义的规则即可,上面的方法findByNameAndPassword,spring-data-jpa规定,方法都以findBy开头

通过上面,基本CRUD和基本的业务逻辑操作都得到了解决,我们要做的工作少到仅仅需要在UserRepository接口中定义几个方法,其他所有的工作都由spring-data-jpa来完成。


【Spring-data-jpa的条件查询】
1根据方法命名规则自动生成
基于一列查询等值查询findBy列名

例如: findByName(String name);
基于一列模糊查询 findBy 列名 Like  
例如: findByNameLike(String name)  
基于两列等值查询findBy 列名 And 列名
例如: findByUsernameAndPassword(String username, String password )

2不按命名规则写的查询方法,可以配置@Query 绑定JPAL语句或者 SQL 语句


3不按命名规则写的查询方法配置@Query 没写语句 ,实体类 @NamedQuery定义

4 带有条件的修改和删除操作
使用@Query 注解完成,搭配使用@Modifying 标记修改、删除操作

注意:使用单体测试,测试 DAO ,要添加事务,设置事务不回滚



【其他和看法】
这半年来的的学习,让我从一个java小白变成现在的半个小白,感觉自己的知识确实是有在提高,感谢黑马各位老师和同学。时间过得真快,转眼就要毕业了,在这儿认识了很多比自己优秀却依然很努力的人,见到了太多各行各业有各种故事的朋友们,见到了每一个努力挣扎却依旧拼命热爱生活的人,我们折腾,我们执拗,我们知道自己想要什么,也更加清楚应该怎么去踏实的实现它。三年之后,你能对自己“我没有浪费过一天时间”’。那么你就会成为高手。10年后你还能这么说,那你就是大牛
最后总结一下我学习的过程。希望大家共同进步。
java语言基础(语法,基础类库)→Web基础(Web服务器和HTTP协议基本原理,HtmI/JS/CSS基础)→Java Web基础(Servlet/JSP/过滤器/监听器/JDBC/Web服务器Tomcat)→数据库基础SQL基础→后台MVC框架(Struts2,hibernate,spring)→分层设计思想及设计模式,面向接口设计→Spring IOC(控制反转)及业务逻辑,数据访问逻辑分层→→SSH框架集成→实际项目运用。
然后就是一些工具的应用,例如配置的SVN,Git,构建的Maven等
以上,就是我印象中的学习过程。【好的网站】
推荐一些网站 ,都是用来学习java的
一:理论基础类课程
1.中国大学MOOC(慕课)_最好的在线课程学习平台
2.大学计算机专业 - 网易云课堂
3.网易公开课
4.Computer Science Courses | Coursera
二:视频学习网站
1.慕课网-程序员的梦工厂
2.网易云课堂 - 领先的实用技能学习平台
三:实战类学习网站
1.实验楼 - 做实验,学编程
2.Catalog
3.| FreeCodeCamp中文社区
四:刷题类网站
1.【IT题库】笔试练习_C++Java前端笔试面试题_牛客网
2.Contest | LeetCode OJ
五:推荐社区
1.Build software better, together
2.Stack Overflow
3.SegmentFault (中文论坛)
【百度云盘分享】
来之前在淘宝十块钱买的资料......分享好了....
https://pan.baidu.com/s/1c232uDa 没设密码...


作者: 爱吃猫的天蓝怪    时间: 2018-1-3 21:48
审核完了没?...
作者: 黑马与你同在    时间: 2018-1-4 14:41
总结的非常好,而且还给了一些
作者: heimalala    时间: 2018-1-5 00:03
赞赞赞赞赞




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2