springboot整合hibernate +mysql8
项目源代码github: https://github.com/Longinusss/SpringBoot-Hibernate-Mysql8
项目结构:
创建普通maven在pom.xml文件里面添加要使用的jpa依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
添加依赖之后需要配置一些连接mysql所需要的配置,创建一个application.properties:
server.port=8080
# 数据库访问配置
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/forum?serverTimezone=UTC&useSSL=false&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
然后创建实体类
这里创建一个简单的User实体类,需要用到javax中的Entity,Id,GeneratedValue与GenerationType注解.
Entity用于标识实体类,Id用于标识主键,GeneratedValue与GenerationType用于配置主键.
package com.example.hibernate.entity;
import lombok.Data;
import javax.persistence.*;
/**
* <p></p>
*
* @author : lon
* @date : 2021-06-22 15:58
**/
@Entity
@Data
@Table(name = "h_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "h_name")
private String name;
}
创建仓库UserRepository保存用户记录.需要继承CrudRepository<T,ID>,第一个类型为实体类,第二个类型为主键类型.
package com.example.hibernate.entity;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
/**
* <p></p>
*
* @author : lon
* @date : 2021-06-22 15:59
**/
@Repository
public interface UserRepository extends CrudRepository<User,Integer>
{
@Query(value = "SELECT u FROM User u WHERE h_name=:name")
public User findNameHql(@Param("name") String name);
}
其余交给hibernate
如控制层的controller就这样
package com.example.hibernate.controller;
import com.example.hibernate.entity.User;
import com.example.hibernate.entity.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p></p>
*
* @author : lon
* @date : 2021-06-22 16:00
**/
@RestController
@RequestMapping(path = "/demo")
public class MainController {
@Autowired
private UserRepository userRepository;
@PostMapping(path = "/add")
public String addNewUser(@RequestParam String name) {
User user = new User();
user.setName(name);
userRepository.save(user);
return "Saved.";
}
@GetMapping(path = "/all")
public Iterable<User> getAllUsers() {
return userRepository.findAll();
}
@GetMapping(path = "/find")
public User getAllUsers(@RequestParam String name) {
return userRepository.findNameHql(name);
}
}