Spring------Spring boot data jpa的使用方法
1.DoMain.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* 测试Spring Boot Data Jpa
*
*/
@SpringBootApplication //等同于 @Configuration @EnableAutoConfiguration @ComponentScan
public class DoMain
{
public static void main( String[] args )
{
SpringApplication.run(DoMain.class, args);
}
}
2.User.java
import java.sql.Date;
import java.util.List; import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* 用户实体类
*
*/
@Component
//@ConfigurationProperties(prefix="my",locations = "classpath:application.yml")
@ConfigurationProperties(prefix="my") //配合测试类@SpringBootTest()使用
@Entity
//@NamedQueries({
//@NamedQuery(name = "User.findByNameWithNamedQuery",
//query = "select c from User c where c.name = ?1")})
public class User {
@Id
private int id;
private String name;
private char sex;
private Date birthDate;
private int height;
@OneToMany(mappedBy="myUser",fetch=FetchType.EAGER)
private List<ContactBook> contact; public User(){} public User(int id ,String name,char sex,Date birthDate,int height,List<ContactBook> contact){
this.id = id;
this.name = name;
this.sex = sex;
this.birthDate = birthDate;
this.height = height;
this.contact = contact;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public List<ContactBook> getContact() {
return contact;
}
public void setContact(List<ContactBook> contact) {
this.contact = contact;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
} }
3.ContackBook.java
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* 通讯信息实体类
*
*/
@Entity
@Component
public class ContactBook {
@Id
private int id;
// @Column(name = "userId",nullable=false)
private int userId;
private int type;
private String contact; @ManyToOne
private User myUser; public ContactBook(){} public ContactBook(int id,int userId,int type,String contact){
this.id = id;
this.userId = userId;
this.type = type;
this.contact = contact;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
} }
4.UserRepository.java
import java.util.List; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import com.maven.demo.model.User; public interface UserRepository extends JpaRepository<User, Integer>{
//基于方法名的查询
public User readByName(String name); //基于方法名的查询,可分页的模糊查询
public List<User> findAllByNameLike(String name,Pageable pageable); /**
* @Modifying表明@Query是更新或删除语句
*/
@Modifying(clearAutomatically = true)
@Query("update User c set c.name=:newName where c.name like :qname")
public int updateAllByNameLike(@Param("qname") String name, @Param("newName") String newName); /**
* 使用了原生SQL,由于命名的原因,这里的原生SQL和JPQL看上去差别不大
*/
@Modifying(clearAutomatically = true)
@Query(value = "delete from User c where c.name like :qname",nativeQuery = true)
public int deleteAllByNameLike(@Param("qname") String name);
}
5.ContackBookRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import com.maven.demo.model.ContactBook;
public interface ContactBookRepository extends JpaRepository<ContactBook, Integer>{
}
6.BootDataTest.java(测试类)
import static org.junit.Assert.*; import java.sql.Date;
import java.util.ArrayList;
import java.util.List; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional; import com.maven.demo.interfaces.ContactBookRepository;
import com.maven.demo.interfaces.UserRepository;
import com.maven.demo.model.ContactBook;
import com.maven.demo.model.User; @RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class BootDataTest {
@Autowired
private UserRepository userDao; @Autowired
private ContactBookRepository bookDao; @Before
public void testInit() {
List<ContactBook> books = new ArrayList<ContactBook>();
ContactBook book = new ContactBook(1,2421,1,"123");
books.add(book);
bookDao.save(book); User user = new User(2421, "天恒",'男',new Date(1),168,books);
userDao.save(user); // for(int i = 0;i < 20;i++){
// User user = new User(2420 + i, "天恒" + i,'男',new Date(1),168,books);
// userDao.save(user);
// }
} @Test
@Transactional //需要添加事务,否则user获取不了里面List<ContactBook>的信息
public void testFindContactBookByUser(){
User user = userDao.readByName("天恒"); assertEquals(1, user.getContact().size());
} @Test
public void testfindAllByNameLike(){
// 排序条件,降序,
Sort sort = new Sort(Direction.DESC, new String[] { "name", "id" }); // 分页条件,第一页,每页10条
Pageable pagination = new PageRequest(0, 10, sort); List<User> list = userDao.findAllByNameLike("%天%",pagination);
assertEquals(1,list.size());
} @Test
@Transactional //需要添加这个注解才能更新
public void testUpdateAllByNameLike(){
userDao.updateAllByNameLike("%天恒%", "竹清");
User user = userDao.findOne(2421);
assertEquals("竹清", user.getName());
} @Test
@Transactional
public void testDeleteAllByNameLike(){
userDao.deleteAllByNameLike("%天恒%");
User user = userDao.findOne(2421);
assertNull(user);
} }
7.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.maven</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>demo</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source> <!-- Java版本,不要在build path里面修改 -->
<maven.compiler.target>1.8</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.0.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.4.0.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>1.4.0.RELEASE</version>
<optional>true</optional>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.4.0.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.4.0.RELEASE</version>
</dependency> <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.192</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
另附:pom.xml(使用parent标签的配置方法)(推荐)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent> <groupId>demo</groupId>
<artifactId>huawei</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>huawei</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source> <!-- Java版本 -->
<maven.compiler.target>1.8</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- 使用mysql作为数据库,这里已经使用了H2-->
<!--
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
-->
<!-- 连接池 -->
<!-- Spring Boot默认使用Tomcat连接池 -->
<!-- 也可以通过配置使用其他连接池 -->
<!--
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<scope>compile</scope>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </project>
Spring------Spring boot data jpa的使用方法的更多相关文章
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
问题描述 在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处. 解决办法 概念理解 举例:在公司的 ...
- Spring Data JPA 梳理 - 使用方法
1.下载需要的包. 需要先 下载Spring Data JPA 的发布包(需要同时下载 Spring Data Commons 和 Spring Data JPA 两个发布包,Commons 是 Sp ...
- Spring boot data jpa 示例
一.maven pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...
- Spring Data JPA 简单查询--方法定义规则
一.常用规则速查 1 And 并且2 Or 或3 Is,Equals 等于4 Between 两者之间5 LessThan 小于6 LessThanEqual 小于等于7 Gre ...
- 扩展spring data jpa的数据更新方法时注意事项
//此处必须加@Transactional,否则不能运行,报错 @Transactional @Modifying @Query("update ExamItem a set a.versi ...
- 74. Spring Data JPA方法定义规范【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 事情的起因:有人问过我们这个这个问题:为什么我利用Spring data jpa写的方法没有按照我想要的情况进行执行呢?我记得当时只是告诉他你你先 ...
- spring boot系列(五)spring boot 配置spring data jpa (查询方法)
接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...
- Spring Data JPA简单使用
用Spring Data JPA操作数据库 这份教程教你用Spring Data JPA从关系数据库mysql中存储和提取数据.总结来自https://spring.io/guides/gs/acce ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
随机推荐
- 使用 esxtop 识别存储性能问题
可以使用交互式 esxtop 实用程序提供连接到 VMware ESX 主机的各种设备的 I/O 衡量指标. 使用 esxtop 配置监控 要监控每个 HBA 的存储性能,请执行以下操作: 通过在命令 ...
- java 从数据库取值反射给变量
在 javaweb开发中,往往一些通用的属性都定义到常量类中,而常量类中的常量又怎么赋初始值呢,可以再配置文件,可以直接赋值,可以在webstart的时候从数据库查询出来数据赋值 从数据库查询数据出来 ...
- SharePoint自动化系列——通过PowerShell创建SharePoint Lists
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 代码如下(保存到本地ps1文件中,右键run with PowerShell即可): Add-PS ...
- spring通过配置xml文件集成quartz定时器
概述 Spring为创建Quartzde Scheduler.Trigger和JobDetail提供了方便的FactoryBean类,以便能够在Spring容器中享受注入的好处. 此外,Spring还 ...
- 应聘Java笔试时可能出现问题及其答案
有感:应聘Java笔试时可能出现问题及其答案 huij 前段时间因为要参加一个笔试,在准备期间在网上找到了两条关于笔试题目的文章,其中一篇为<<有感:应聘Java笔试时可能出现问题> ...
- 关于Java开发过程中质量提升-2自动化
开发人员写代码过程中就实现自动代码检视,编辑器会提示编码规范错误,并给出正确实例,写完代码只需要提交到SVN库,然后启动自动化构建(可配置代码提交SVN后自动触发),测试环境中的项目马上和当前SVN库 ...
- 设计和开发ETL系统(一)——ETL过程综述
在这部分将按照设计和实现ETL系统的流程展开,将上一个部分的那些子系统按照提取数据.清洗和一致化.向呈现服务器提交以及管理ETL环境等四个方面进行了分类.(是不是说对ETL主要就是掌握这四个方面的内容 ...
- LAN8710A/LAN8710Ai datasheet 记录
因为产品的双网口出现了问题,而且是AM335x 内部驱动,难度比较大,现从PHY 端开始分析相关原理,找到双网口不能使用的原因. 此篇是记录一些有关LAN8710A 这个PHY的一些特性. 各个功能模 ...
- Linux下Kill函数用法
http://www.cnblogs.com/winnxm/archive/2010/01/22/1654502.html 用于向任何进程组或进程发送信号. #include <sys/type ...
- Android——对话框1(一般、选择、自定义、进度条)
xml <Button android:layout_width="match_parent" android:layout_height="wrap_conten ...