2022全面升级Vue3+TS 仿知乎专栏企业级项目含资料

#1

download:2022全面升级Vue3+TS 仿知乎专栏企业级项目含资料

JPA在跳羚中的基本应用
1.Jpa是什么?
JPA,顾名思义,就是Java持久性API的意思。JDK 5.0注释或XML描述了对象和关系表之间的映射关系,并在运行时将实体对象保存到数据库中。
2.优势
2.1标准化
JPA是JCP发布的Java EE标准之一,所以任何声称符合JPA标准的框架都遵循相同的架构,提供相同的访问API,这保证了基于JPA开发的企业应用只需稍加修改就可以在不同的JPA框架下运行。
2.2支持容器级特性
JPA框架支持容器级的事务,比如大数据集、事务、并发等。,使得JPA超越了简单持久性框架的限制,在企业应用中发挥更大的作用。
2.3简单方便
JPA的主要目标之一是提供一个更简单的编程模型:在JPA框架下创建实体就像创建Java类一样简单,没有任何约束和限制,只需要使用javax.persistence.Entity进行注释。JPA的框架和接口也非常简单,没有太多不同的规则和设计模式,开发者很容易掌握。JPA是基于非侵入性原理设计的,因此可以很容易地与其他框架或容器集成。
2.4查询能力
JPA的查询语言是面向对象的,而不是面向数据库的。它用面向对象的自然语法构造查询语句,可以看作是Hibernate HQL的等价物。JPA定义了唯一的JPQL (Java持久性查询语言)。JPQL是EJB QL的扩展,它是一种实体查询语言。操作对象是实体,而不是关系数据库的表,可以支持批量更新和修改、JOIN、GROUP BY、HAVING等高级查询功能。,通常只有SQL可以提供。它甚至可以支持子查询。
2.4高级功能
JPA可以支持高级的面向对象特性,比如继承、多态和类之间的复杂关系。这种支持使开发人员能够最大限度地使用面向对象的模型来设计企业应用程序,而不必处理这些特性在关系数据库本身中的持久性。
Spring Boot Jpa把我们从DAO层的操作中解放出来,基本上所有的CRUD都可以通过它来实现。
3.代码实现。
添加依赖项和配置
pom.xml

springframework.boot
弹簧-启动-启动器-数据-jpa

关系型数据库
MySQL-连接器-java

复制代码
应用程序.属性
spring . data source . URL = JDBC:MySQL://localhost:3306/test?server time zone = UTC & use unicode = true & character encoding = utf-8 & use SSL = true
spring.datasource .用户名=root
spring . data source . password = root
spring . data source . driver-class-name = com . MySQL . CJ . JDBC . driver

spring . JPA . properties . hibernate . hbm 2 DDL . auto = create
spring . JPA . properties . hibernate . dialect = org . hibernate . dialect . MySQL 5 innodb dialect
#sql\u8F93\u51FA
spring.jpa.show-sql=true

format \ u4e 00 \ u 4 E0 bsql \ u8FDB \ u884C \ u8f 93 \ u51FA

spring . JPA . properties . hibernate . format _ SQL = true
复制代码
一.基本调查
基本上有两种查询:
一是默认情况下已经实现了Spring数据,
一种是根据查询方法自动解析成SQL。
预生成方法
默认情况下,Spring Boot Jpa预先生成了一些凝乳的基本方法,如添加、删除、更改等。
1继承JpaRepository
公共接口UserRepository扩展JpaRepository {
}
复制代码
使用默认方法。
@测试
public void testBaseQuery()引发异常{
User User = new User();
user repository . find all();
user repository . findone(1l);
userRepository.save(用户);
userRepository.delete(用户);
user repository . count();
user repository . exists(1l);
// …
}
复制代码
自定义查询
自定义简单查询是根据方法名自动生成SQL,
的主要语法是findxxby、readaxxby、queryxxby、countxxby、getxxby,后跟属性名:
用户findByUserName(字符串用户名);
复制代码
也用一些加一些关键字And,or。
用户findByUserNameOrEmail(字符串用户名,字符串电子邮件);
复制代码
修改、删除和计数是类似的语法。
Long deleteById(长id);
长计数用户名(字符串用户名)
复制代码
在基本的SQL系统中,可以使用关键字,比如:LIKE、IgnoreCase、OrderBy。
List findByEmailLike(字符串邮件);
用户findByUserNameIgnoreCase(字符串用户名);
list findByUserNameOrderByEmailDesc(字符串email);
复制代码
具体的关键字、用法和生成SQL如下表所示。

关键字samplejpql snippetandfindbylastname and first name…其中x.lastname =?1和x.firstname =?2OrfindByLastnameOrFirstname…其中x.lastname =?1或x.firstname =?2Is,EqualsfindByFirstnameIs,findByFirstnameEquals…其中x.firstname =?1 between findbystartdatebetween…其中x.startDate between?1和?2 lesssthanhfindbyagelessthan…其中x.age <?1 lesssaneequalfindbyagelessthan equal…x . age⇐在哪里?1 greaterthanfindbyagegreaterthan…其中x.age >?1 greaterthanequalfindbyagegreaterthanequal…其中x.age >=?1AfterfindByStartDateAfter…其中x.startDate >?1BeforefindByStartDateBefore…其中x.startDate <?1IsNullfindByAgeIsNull…其中x.age为nullIsNotNull,NotNullfindByAge(Is)NotNull…其中x.age不为nullLikefindByFirstnameLike…其中x.firstname like?1 notlikefindbyfirst name not like…其中x.firstname不喜欢?1 startingwithfindbyfirst name starting with…其中x.firstname喜欢?1(参数绑定有追加的%)EndingWithfindByFirstnameEndingWith…其中x.firstname like?1(用前缀%绑定的参数)包含findbyfirst name包含…其中x.firstname like?1(参数绑定包装在% OrderByfindByAgeOrderByLastnameDesc…其中x.age =?1 order by x.lastname descnotfindbylastname not…其中x . last name?1InfindByAgeIn(收藏年龄)x.age在哪里?1NotInfindByAgeNotIn(收藏年龄)…其中x.age不在?1 ruefindbyactivetrue()…其中x . active = true false findbyactivefalse()…其中x . active = false ignorecasefindbyfirstnameignorecase…其中UPPER(x . first name)= UPPER(?1)
二。复杂的查询
在实际开发中,需要使用分页、删除选择、链接表等查询时,需要特殊的方法或自定义SQL。
分页查询
分页在实际使用中很常见,Spring Boot Jpa已经帮我们实现了分页功能。在查询方法中,我们需要传入参数Pageable。当查询中有多个参数时,建议将Pageable作为最后一个参数。
Page findALL(可分页可分页);
Page findByUserName(字符串用户名,可分页可分页);
复制代码
Pageable是Spring封装的分页实现类。使用时需要传入页数,页数和排序规则。
@测试
public void testPageQuery()引发异常{
int page=1,size = 10
排序sort =新排序(方向。DESC,《本我》);
pageable pageable = new page request(页面、大小、排序);
userRepository.findALL(可分页);
user repository . findbysusername(" testName “,可分页);
}
复制代码
受限查询
有时候我们只需要查询前N个元素,或者只取前一个实体。
用户findFirstByOrderByLastnameAsc();
用户findTopByOrderByAgeDesc();
page query first 10 by last name(String last name,Pageable Pageable);
List findFirst10ByLastname(字符串姓氏,排序排序);
list find top 10 by lastname(String last name,可分页可分页);
复制代码
自定义SQL查询
其实Spring Data感觉大部分SQL都是可以按照方法名定义来实现的,但是因为某些原因我们想用自定义SQL来查询。
Spring数据也得到完美支持;
在SQL的查询方法上使用@Query标注,如涉及删除、修改时添加@ Modifying。还可以添加@Transactional对事物的支持,查询超时设置等。根据需要。
@修改
@ Query(” update User u set u . username =?1其中u.id =?2")
int modifyByIdAndUserId(字符串用户名,长id);

@事务性
@修改
@Query(“从id =?1”)
void deleteByUserId(长id);

@Transactional(timeout = 10)
@Query(“select u from User u其中u.emailAddress =?1”)
用户findByEmailAddress(字符串email address);
复制代码
多表查询
Spring Boot Jpa中实现多表查询有两种方式。第一种方式是使用Hibernate的级联查询,第二种方式是创建一个结果集的接口来接收链接表查询的结果。这里主要采用第二种方式。
首先,您需要定义结果集的接口类。
公共界面酒店摘要{

city get city();

string getName();

double getAverageRating();

默认整数getAverageRatingRounded() {
return getAverageRating() == null?null:(int)math . round(getAverageRating());
}

}
复制代码
查询的方法返回类型被设置为新创建的接口。
@Query("select h.city as city,h.name as name,avg(r . rating)as averaging rating "
+"从酒店h左侧外部连接h.reviews r,其中h.city =?1组按h”)
Page findByCity(City city,可分页可分页);

@Query(“select h.name as name,avg(r.rating) as averageRating "
+“从酒店h左侧外部加入h.reviews r group by h”)
Page findByCity(可分页可分页);
复制代码
使用
page hotels = this . hotel repository . findbycity(new page request(0,10,方向。ASC,“名称”));
对于(酒店摘要摘要:酒店){
system . out . println(” Name "+summay . getname());
}
复制代码
在运行过程中,Spring会自动为接口产生一个代理类(HotelSummary)来接收返回的结果,并以getXX的形式获得代码摘要。