Spring Boot (4) Connect MySQL by Spring Data JPA

Spring Boot (4) Connect MySQL by Spring Data JPA

This section describes how to connect MySQL by Spring Data JPA (Java Persistence API). Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered applications that use data access technologies.

1. Creating the POM

<?xml version="1.0" encoding="UTF-8"?>
<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.my.study.springboot</groupId>
	<artifactId>mysql</artifactId>
	<version>0.0.1-RELEASE</version>
	<properties>
		<!-- Generic properties -->
		<java.version>1.8</java.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<!-- Need to set Hibernate version explicitly, because java 8 date and time not mapped properly with default version -->
		<hibernate.version>5.2.10.Final</hibernate.version>
		<javassist-version>3.12.1.GA</javassist-version>
	</properties>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.14.RELEASE</version>
	</parent>
	<dependencies>
		<!-- spring-boot-starter-web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- Java assist -->
        <dependency>
	    	<groupId>javassist</groupId>
	    	<artifactId>javassist</artifactId>
	   		<version>${javassist-version}</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

2. application.properties

# Common properties    
server.port = 8080
server.context-path=/mysql
server.session.timeout=1800

# MySQL connections
spring.datasource.url=jdbc:mysql://localhost:3306/user_management
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# JPA properties
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
# Create table automatically
spring.jpa.hibernate.ddl-auto=update

3. Module

package com.my.study.springboot.mysql.module;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")
public class User {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	// @Column(name = "id")
	// No need to define @Column if table column is the same as attribute id here
	private int id;
	// @Column(name = "name")
	private String name;
	// @Column(name = "age")
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}
}

4. Dao (Repository)

package com.my.study.springboot.mysql.dao;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

import com.my.study.springboot.mysql.module.User;

// No need to define implementation class, just only define an interface
public interface IUserDao extends CrudRepository<User, Integer> {
	List<User> findByNameContaining(String name);
	// Refer to https://docs.spring.io/spring-data/jpa/docs/1.5.1.RELEASE/reference/html/jpa.repositories.html#jpa.query-methods.query-creation
}

5. Controller

package com.my.study.springboot.mysql.controller;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;

import com.my.study.springboot.mysql.dao.IUserDao;
import com.my.study.springboot.mysql.module.User;

@RestController
public class UserController {

	@Autowired
	private IUserDao userDao;

	// Query all users
	@RequestMapping(value = "/user/", method = RequestMethod.GET)
	public ResponseEntity<List<User>> listAllUsers() {
		Iterator<User> itUsers = userDao.findAll().iterator();
		List<User> users = new ArrayList<User>();
		while (itUsers.hasNext()) {
			users.add(itUsers.next());
		}
		if (users.isEmpty()) {
			// You many decide to return HttpStatus.NOT_FOUND
			return new ResponseEntity<List<User>>(HttpStatus.NO_CONTENT);
		}
		return new ResponseEntity<List<User>>(users, HttpStatus.OK);
	}

	// Query one user by ID
	@RequestMapping(value = "/user/id={id}", method = RequestMethod.GET)
	public ResponseEntity<User> findUserById(@PathVariable("id") int id) {
		User user = userDao.findOne(id);
		if (null == user) {
			return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
		}
		return new ResponseEntity<User>(user, HttpStatus.OK);
	}

	// Query users by name
	@RequestMapping(value = "/user/name={name}", method = RequestMethod.GET)
	public ResponseEntity<List<User>> findUsersByName(@PathVariable("name") String name) {
		List<User> users = userDao.findByNameContaining(name);
		if (users.isEmpty()) {
			return new ResponseEntity<List<User>>(HttpStatus.NOT_FOUND);
		}
		return new ResponseEntity<List<User>>(users, HttpStatus.OK);
	}

	// Add one user
	@RequestMapping(value = "/user/", method = RequestMethod.POST)
	public ResponseEntity<Void> createUser(@RequestBody User user, UriComponentsBuilder ucBuilder) {
		if (null != userDao.findOne(user.getId())) {
			return new ResponseEntity<Void>(HttpStatus.CONFLICT);
		}
		userDao.save(user);
		HttpHeaders headers = new HttpHeaders();
		// This is to send client a URL of how to get added user
		headers.setLocation(ucBuilder.path("/user/{id}").buildAndExpand(user.getId()).toUri());
		return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
	}

	// Update user by ID
	@RequestMapping(value = "/user/{id}", method = RequestMethod.PUT)
	public ResponseEntity<User> updateUser(@PathVariable("id") long id, @RequestBody User user) {
		User currentUser = userDao.findOne(user.getId());
		if (null == currentUser) {
			return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
		}
		userDao.save(user);
		return new ResponseEntity<User>(user, HttpStatus.OK);
	}

	// Delete user by ID
	@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
	public ResponseEntity<Void> deleteUser(@PathVariable("id") int id) {
		User currentUser = userDao.findOne(id);
		if (null == currentUser) {
			return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
		}
		userDao.delete(id);
		return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
	}

	// Delete all users
	@RequestMapping(value = "/user/", method = RequestMethod.DELETE)
	public ResponseEntity<Void> deleteAllUsers() {
		userDao.deleteAll();
		return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
	}
}

6. Main

package com.my.study.springboot.mysql;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Main {
	public static void main(String[] args) {
		SpringApplication.run(Main.class, args);
	}
}

7. Code structure


8. Testing

Add user:


Query user by name:


9. References

猜你喜欢

转载自blog.csdn.net/funnyrand/article/details/80928853