91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

親自動手搭建微服務框架和測試環境-7-JPA

發布時間:2020-05-22 14:19:56 來源:網絡 閱讀:242 作者:匆匆的那年 欄目:軟件技術
1 JPA使用步驟

JPA=Java Persistence APIJava持久層APIJDK5引入JPA ORM目的:簡化Java EE開發,整合ORM技術。JPA定義了JPQLJava Persistence Query Language)。

Spring Data JPA默認集成的JPA ProviderHibernate


a.pom.xml中增加JPA依賴

????????<dependency>

????????????<groupId>org.springframework.boot</groupId>

????????????<artifactId>spring-boot-starter-data-jpa</artifactId>

????????</dependency>

?

b.然后增加MYSQL依賴:

????????<dependency>

????????????<groupId>mysql</groupId>

????????????<artifactId>mysql-connector-java</artifactId>

????????</dependency>


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<user, Integer> {}


f.在控制類前面增加標注

@Controller

@RequestMapping(path="/demo")

public?class?UserController {


g.在控制類倉庫屬性前面增加標注

@Autowired

private?UserRepository repository;


h.在控制類操作函數之中和前面增加標注

@GetMapping(path = "/add")

public?@ResponseBody?String addNewUser(@RequestParam?String name, @RequestParam?String email) {

user u??= 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<UserModel> findUserModel(@Param("name") String username);

?

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支持重量級查詢方式有兩種方式一種是JPQLSQL語言方式,一種是原生SQL的語言。常用情景如下:

***like表達式:

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

List<UserModel> findByNameMatch(@Param("name") String name);

***原生SQL語言

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

List<UserModel> 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<UserModel> findByNamedParam(@Param("name") String name, @Param("address") String address, @Param("sex") long sex);

***SPEL表達式

@Query(value = "select * from #{#entityName} b where b.name=?1", nativeQuery = true)
List<UserModel> 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 MyBatisHibernate的區別

SpringBoot都支持mybatishibernate,實際上它們都屬于ORM框架,整體架構也差不多,如下:

親自動手搭建微服務框架和測試環境-7-JPA


親自動手搭建微服務框架和測試環境-7-JPA


對比項

MyBatis

Hibernate

JDBC

支持

支持

JTA事務

支持

支持

SessionFactoryBuilder

支持

支持

SessionFactory

支持

支持

Session

支持

支持

開發難度

框架掌握簡單

框架掌握復雜

SQL語句

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

HQL,一般不需要編寫原生SQL語句,性能較低

緩存

支持二級緩存,可能存在臟數據

支持二級緩存

可移植性

較差

較好

自動化

半自動

全自動

安全性

較差

較好

日志

較差

較好


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肇东市| 钟山县| 绩溪县| 新闻| 鹤庆县| 清水河县| 荆州市| 阳城县| 汉中市| 尉犁县| 青冈县| 舟曲县| 肇源县| 延寿县| 营山县| 准格尔旗| 山丹县| 江都市| 深水埗区| 龙泉市| 汕尾市| 霞浦县| 和林格尔县| 周口市| 镇远县| 罗平县| 团风县| 大安市| 红安县| 新沂市| 石台县| 壤塘县| 晋中市| 册亨县| 武宁县| 安吉县| 承德县| 银川市| 谢通门县| 江西省| 确山县|