亲自动手搭建微服务框架和测试环境-7-JPA

1 JPA使用步骤

JPA=Java Persistence API,Java持久层API。JDK5引入JPA ORM目的:简化Java EE开发,整合ORM技术。JPA定义了JPQL(Java Persistence Query Language)。

成都创新互联服务项目包括洛宁网站建设、洛宁网站制作、洛宁网页制作以及洛宁网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,洛宁网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到洛宁省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

Spring Data JPA默认集成的JPA Provider是Hibernate。


a.在pom.xml中增加JPA依赖

        

            org.springframework.boot

            spring-boot-starter-data-jpa

        

 

b.然后增加MySQL依赖:

        

            mysql

            mysql-connector-java

        

c.在Model类前增加标注@Entity

@Entity

public class user {

d.在ID字段钱增加标注@Id和 @GeneratedValue

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private Integer id;

e.扩展数据仓库接口:

public interface UserRepository extends CrudRepository {}

f.在控制类前面增加标注

@Controller

@RequestMapping(path="/demo")

public class UserController {

g.在控制类仓库属性前面增加标注

@Autowired

private UserRepositoryrepository;

h.在控制类操作函数之中和前面增加标注

@GetMapping(path ="/add")

public @ResponseBody String addNewUser(@RequestParam Stringname,@RequestParam Stringemail) {

useru  =new user();

u.setName(name);

u.setEmail(email);

repository.save(u);

return "Saved";

}

 

    @Query("select id,username,sex,address from #{#entityName} u where u.username=:name")   

    List findUserModel(@Param("name") Stringusername);

 

i.在Application类前面增加标注

@SpringBootApplication

public class Application {

public static void main(String[]args) {

SpringApplication.run(Application.class,args);

}

}

J.在Application.properties中增加配置项

spring.jpa.hibernate.ddl-auto=create

spring.datasource.url=jdbc:mysql://localhost:3306/db_example

spring.datasource.username=springuser

spring.datasource.password=ThePassword

k.注解解说

@Entity说明此类是实体类,使用默认ORM规则,即class名即数据库表中表名,class字段名即表中的字段名。如果想改变这种默认规则,就要使用@Table来改变class名与数据库中表名的映射规则,@Column来改变class中字段名与db中表的字段名的映射规则。

@Query 这是JPA支持重量级查询方式,有两种方式:一种是JPQL的SQL语言方式,一种是原生SQL的语言。常用情景如下:

***like表达式:

@Query(value = "select id,username,sex,address fromUserModel b where b.name like %:name%")

List findByNameMatch(@Param("name") String name);

***原生SQL语言

@Query(value = "select * fromuserb where b.username=?1", nativeQuery = true)

List findByName(String name);

***使用@Param注解注入参数

@Query(value = "select id,username,sex,address from UserModel b where b.username = :name AND b.address=:address AND b.sex=:sex")

List findByNamedParam(@Param("name") String name, @Param("address") Stringaddress, @Param("sex") longsex);

***SPEL表达式

@Query(value = "select * from #{#entityName} b where b.name=?1", nativeQuery = true)
List findByName(String name);

l.JPA框架图

亲自动手搭建微服务框架和测试环境-7-JPA

m.JPQL语法

基本格式如下:

select 实体别名.属性名, 实体别名.属性名from实体名as实体别名where实体别名.实体属性op比较值

2 JPA查询方法和HQL查询语句对照

表达式

查询方法

hql查询语句

And

findByLastnameAndFirstname

… where x.lastname = ?1 and x.firstname = ?2

Or

findByLastnameOrFirstname

… where x.lastname = ?1 or x.firstname = ?2

Is,Equals

findByFirstname,findByFirstnameIs,findByFirstnameEqual

… where x.firstname = 1?

Between

findByStartDateBetween

… where x.startDate between 1? and ?2

LessThan

findByAgeLessThan

… where x.age < ?1

LessThanEqual

findByAgeLessThanEqual

… where x.age⇐ ?1

GreaterThan

findByAgeGreaterThan

… where x.age > ?1

GreaterThanEqual

findByAgeGreaterThanEqual

… where x.age >= ?1

After

findByStartDateAfter

… where x.startDate > ?1

Before

findByStartDateBefore

… where x.startDate < ?1

IsNull

findByAgeIsNull

… where x.age is null

IsNotNull,NotNull

findByAge(Is)NotNull

… where x.age not null

Like

findByFirstnameLike

… where x.firstname like ?1

NotLike

findByFirstnameNotLike

… where x.firstname not like ?1

StartingWith

findByFirstnameStartingWith

… where x.firstname like ?1 (parameter bound with appended %)

EndingWith

findByFirstnameEndingWith

… where x.firstname like ?1 (parameter bound with prepended %)

Containing

findByFirstnameContaining

… where x.firstname like ?1 (parameter bound wrapped in %)

OrderBy

findByAgeOrderByLastnameDesc

… where x.age = ?1 order by x.lastname desc

Not

findByLastnameNot

… where x.lastname <> ?1

In

findByAgeIn(Collection ages)

… where x.age in ?1

NotIn

findByAgeNotIn(Collection age)

… where x.age not in ?1

True

findByActiveTrue()

… where x.active = true

False

findByActiveFalse()

… where x.active = false

IgnoreCase

findByFirstnameIgnoreCase

… where UPPER(x.firstame) = UPPER(?1)

 

3 MyBatis和Hibernate的区别

SpringBoot都支持mybatis和Hibernate,实际上它们都属于ORM框架,整体架构也差不多,如下:

亲自动手搭建微服务框架和测试环境-7-JPA

亲自动手搭建微服务框架和测试环境-7-JPA

对比项

MyBatis

Hibernate

JDBC

支持

支持

JTA事务

支持

支持

SessionFactoryBuilder

支持

支持

SessionFactory

支持

支持

Session

支持

支持

开发难度

框架掌握简单

框架掌握复杂

SQL语句

支持原生SQL,便于性能优化

HQL,一般不需要编写原生SQL语句,性能较低

缓存

支持二级缓存,可能存在脏数据

支持二级缓存

可移植性

较差

较好

自动化

半自动

全自动

安全性

较差

较好

日志

较差

较好


文章名称:亲自动手搭建微服务框架和测试环境-7-JPA
分享网址:http://pwwzsj.com/article/gosgej.html