真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中SpringDataJPA的使用

 簡介:

創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有10多年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),上千家客戶的共同信賴。提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站開發(fā)、網(wǎng)站定制、賣友情鏈接、建網(wǎng)站、網(wǎng)站搭建、成都響應(yīng)式網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)

 Spring Data JPA 的目標(biāo)是通過讓一些必須的工作變得更簡單,來顯著提高數(shù)據(jù)訪問層的實(shí)現(xiàn)。作為一個(gè)開發(fā)者,你寫你的倉庫界面,包括自定義查詢方法,而 Spring 給你提供自動(dòng)實(shí)現(xiàn)。

 特性:

 對(duì)建立基于Spring 和 JPA 的庫的支持

 支持 Querydsl predicates 和安全類型的 JPA 查詢

 Transparent auditing of domain class

 Pagination 支持, 動(dòng)態(tài)查詢執(zhí)行, 可以集成自定義數(shù)據(jù)訪問代碼

 在 @Query 注明查詢引導(dǎo)時(shí)驗(yàn)證

 支持基于 XML 的實(shí)體映射

 引入 @EnableJpaRepositories.,實(shí)現(xiàn)基于JavaConfig based 倉庫配置

1. Spring Data JPA

通常,在Java語言中,我們?yōu)轫?xiàng)目提供數(shù)據(jù)支持時(shí),常常用到的ORM(Object Relation Mapping)框架有:MyBatis(iBatis)或Hibernate。通常在使用時(shí),我們需要寫大量配置文件,比如mapper文件,hibernate cfg文件等。

Spring Data Jpa集成在SpringBoot中,因?yàn)镾pringBoot是一款習(xí)慣大于配置的微服務(wù)框架。所以Spring Data Jpa減少了傳統(tǒng)ORM框架中的大量配置,轉(zhuǎn)而使用讓數(shù)據(jù)訪問類(DAO)實(shí)現(xiàn)接口的方式定義數(shù)據(jù)查詢方式,當(dāng)然,我們也可以利用Spring Data Jpa提供的@Query注解實(shí)現(xiàn)SQL自定義,但是因?yàn)镾pring Data Jpa結(jié)合了Hibernate中的特性,所以自定義SQL語句時(shí),必須使用HQL(Hibernate Query Language)語句。

2. 配置數(shù)據(jù)源

#application.yml

spring:

datasource:

driver-class-name: com.MySQL.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/db_88ys

username: huangwei

password: 123456789

3. 定義實(shí)體

在定義實(shí)體時(shí),我們需要使用到大量Spring Data Jpa提供的注解,這些注解都來源于(javax.presistence.*)。

package com.demo.analysis.entity;

import lombok.Data;

import javax.persistence.*;

@Data //lombok注解,提供相應(yīng)屬性的getter,setter

@Entity //表明該類是實(shí)體類

@Table(name = "tb_user") //說明該實(shí)體所對(duì)應(yīng)的數(shù)據(jù)表表名稱,不添加則說明數(shù)據(jù)表和類名相同

public class User {

@Id //表明該屬性對(duì)應(yīng)數(shù)據(jù)庫中的id主鍵

@GeneratedValue(strategy = GenerationType.IDENTITY) //指定主鍵生成策略:自增

private Integer id;

@Column(name = "username") //指定該屬性所對(duì)應(yīng)數(shù)據(jù)庫中的字段名稱

private String username;

@Column(name = "password")

private String password;

public User(Integer id) {

this.id = id;

}

public User(Integer id, String username, String password) {

this.id = id;

this.username = username;

this.password = password;

}

}

4. 定義數(shù)據(jù)訪問接口

package com.demo.analysis.dao;

import com.demo.analysis.entity.User;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.jpa.repository.Query;

import org.springframework.stereotype.Repository;

// 在繼承JpaRepository時(shí),我們需要傳入兩個(gè)泛型,第一個(gè)是所對(duì)應(yīng)的實(shí)體類,第二個(gè)是實(shí)體類中主鍵的類型

@Repository

public interface IUserDao extends JpaRepository {

// 這里我們自定義查詢語句,必須使用HQL,即(Hibernate Query Language)

@Query(value = "select new User(u.id, u.username, u.password) from User u where u.username=:username")

User findUserByUserName(String username);

}

5. 數(shù)據(jù)訪問接口調(diào)用鄭州人流醫(yī)院哪家好 http://m.zzzy120.com/

在接口調(diào)用過程中,我們會(huì)常常出現(xiàn)Iterable類型的參數(shù),這是我們需要將參數(shù)轉(zhuǎn)換為集合類,如List或Set。

package com.demo.analysis.controller;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import com.demo.analysis.dao.IUserDao;

import com.demo.analysis.entity.User;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

import java.util.List;

@RestController

public class UserController {

@Autowired

private IUserDao userDao;

// 查找全部

@RequestMapping(value = "/users", method = RequestMethod.GET)

public List getAllUsers() {

return userDao.findAll();

}

// 按id批量查找

@RequestMapping(value = "/users/{ids}", method = RequestMethod.GET)

public List getUsersByIds(@PathVariable("ids") String ids) {

return userDao.findAllById(this.getIdListFromString(ids));

}

// 自定義SQL,按用戶名查詢

@RequestMapping(value = "/user/{username}", method = RequestMethod.GET)

public User getUserByUserName(@PathVariable("username") String username) {

return userDao.findUserByUserName(username);

}

// 保存單個(gè)用戶

@RequestMapping(value = "/user", method = RequestMethod.POST)

public User saveUser(User user) {

return userDao.save(user);

}

// 保存多個(gè)用戶,這里傳入的Json數(shù)據(jù)需要轉(zhuǎn)換Json數(shù)組,并最終轉(zhuǎn)換成相應(yīng)實(shí)體類

@RequestMapping(value = "/users", method = RequestMethod.POST)

public List saveUsers(String users) {

JSONArray jsonArray = JSONObject.parseArray(users);

List userList = new ArrayList<>();

for (int i = 0; i < jsonArray.size(); i++) {

userList.add(jsonArray.getObject(i, User.class));

}

return userDao.saveAll(userList);

}

// 刪除單個(gè)用戶

@RequestMapping(value = "/user", method = RequestMethod.DELETE)

public void deleteUser(Integer id) {

userDao.deleteById(id);

}

// 按id刪除多個(gè)用戶

@RequestMapping(value = "/users", method = RequestMethod.DELETE)

public void deleteUsersByIds(String ids) {

List users = new ArrayList<>();

this.getIdListFromString(ids).forEach(id -> {users.add(new User(id));});

userDao.deleteInBatch(users);

}

// 將以,隔開的id轉(zhuǎn)換為List

private List getIdListFromString(String ids) {

List integers = new ArrayList<>();

for (String s : ids.split(",")) {

integers.add(Integer.valueOf(s));

}

return integers;

}

}


當(dāng)前題目:Java中SpringDataJPA的使用
文章起源:http://weahome.cn/article/iiegcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部