SpringBoot----利用JpaRepository实现数据的增删查改
1、新建一个maven工程,使用jdk1.8,在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.etc</groupId>
<artifactId>springboot4</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot4</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.7.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- SpringBoot web开发包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot 测试包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<!-- data jpa依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2、在com.etc.springboot4包下新建一个Application.java启动类如下:
package com.etc.springboot4;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* @Description:启动类
* @author zoey
* @date:2018年3月12日
*/
@SpringBootApplication
@ComponentScan(basePackages="com.etc.*")//指定要扫描的包
@EnableJpaRepositories(basePackages="com.etc.*")
@EntityScan(basePackages="com.etc.*")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("启动完成。。。。。。。。。。。");
}
/**
报错:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController':
Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.
BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed;
nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.etc.domain.User
解决办法:
在启动类Application.java类上添加注解:@EntityScan(basePackages="com.etc.*")
*/
/**
报错:
Description:
Field userRepository in com.etc.controller.UserController required a bean of type 'com.etc.domain.UserRepository' that could not be found.
Action:
Consider defining a bean of type 'com.etc.domain.UserRepository' in your configuration.
解决办法:
在启动类Application.java类上添加注解:@EnableJpaRepositories(basePackages="com.etc.*")
*/
3、新建src/main/resource源文件夹,在该文件夹下新建application.properties文件,配置一些参数如下:
###############################数据库配置:连接本地数据库###############################
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
4、在com.etc.domain包下新建User.java类如下:
package com.etc.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @Description:用户实体类:自动根据这个类在数据库中创建一个表
* @author zoey
* @date:2018年3月12日
*/
@Entity//根据这个注解在数据库表中新建一个表,表的字段使用属性名称
//@Table(name = "t_user2")//指定要创建的表的名称,如果不加这个注解,默认创建user表(User类的名称第一个字母小写)
public class User {
@Id
@GeneratedValue
private Long id;
@Column(nullable=false)
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name) {
super();
this.name = name;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
5、在com.etc.domain包下新建UserRepository.java类如下:
package com.etc.domain;
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 org.springframework.transaction.annotation.Transactional;
/**
* @Description:用户接口类:实现用户的增删查改方法
* @author zoey
* @date:2018年3月12日
*/
@Transactional//执行修改方法时一定要添加这个注解和@Modifying注解
public interface UserRepository extends JpaRepository<User, Long> {
@Modifying
@Query(value = "update user set name = :name where id = :id",nativeQuery = true)
void updateNameById(@Param("id") Long id, @Param("name") String name);
/**报错:
* java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
* 解决方式:
* 在修改方法上面添加@Modifying 注解
* 报错:
* javax.persistence.TransactionRequiredException: Executing an update/delete query
* 解决方式:
* 在UserRepository.java类上添加@Transactional注解
*/
}
6、在com.etc.controller包下新建UserController.java类如下:
package com.etc.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.etc.domain.User;
import com.etc.domain.UserRepository;
/**
* @Description:用户控制类,调用用户接口中的方法,实现对用户信息的增删查改
* @author zoey
* @date:2018年3月12日
*/
@RequestMapping("/users")
@RestController
@Transactional
public class UserController {
@Autowired
private UserRepository userRepository;
/**
* @Description:添加用户信息
* 访问地址:http://localhost:8080/users/save
* @return
* @author:zoey
* @date:2018年3月12日
*/
@RequestMapping("/save")
public String save() {
System.out.println("添加用户");
userRepository.save(new User("AAAA"));
userRepository.save(new User("BBBB"));
userRepository.save(new User("CCCC"));
return "save";
}
/**
* @Description:查找所有用户信息
* @return 返回用户列表 [{"id":1,"name":"AAAA"},{"id":2,"name":"BBBB"},{"id":3,"name":"CCCC"}]
* @author:zoey
* @date:2018年3月12日
*/
@RequestMapping("/findAll")
public List<User> findAll(){
System.out.println("查询所有用户");
List<User> userList = userRepository.findAll();
for(User user:userList) {
System.out.println("用户:"+user);
}
return userList;
}
/**
* @Description:根据用户ID查询用户信息
* 访问地址:http://localhost:8080/users/findById/xx
* @param id
* @return json数据 {"id":1,"name":"AAAA"}
* @author:zoey
* @date:2018年3月12日
*/
@RequestMapping("/findById/{id}")
public User findUserById(@PathVariable Long id){
System.out.println("查询用户");
User user = userRepository.findOne(id);
System.out.println("用户:"+user);
return user;
}
/**
* @Description:根据用户ID修改用户名
* 访问地址:http://localhost:8080/users/update?id=xx&name=xx
* @param id 传入的参数:用户ID
* @param name 传入的参数:用户名
* @return
* @author:zoey
* @date:2018年3月12日
*/
@RequestMapping("/update")
public String updateNameById(@RequestParam Long id,@RequestParam String name) {
System.out.println("修改用户");
userRepository.updateNameById(id,name);
return "update";
}
/**
* @Description:删除用户
* 访问地址:http://localhost:8080/delete?id=xx
* @param id 传入的参数:用户ID
* @return
* @author:zoey
* @date:2018年3月12日
*/
@RequestMapping("/delete")
public String delete(@RequestParam Long id) {
System.out.println("删除用户");
userRepository.delete(id);
return "delete";
}
}
运行:
http://localhost:8080/users/save
查找所有用户信息:
http://localhost:8080/users/findAll
根据用户ID查询用户信息:
http://localhost:8080/users/findById/1
修改用户信息:
http://localhost:8080/users/update?id=1&name=aaa