Spring boot 整合数据库
系统环境:win10 x64
Java version:8
数据库:mySQL
开发工具:Navicat15、IDEA2020.2
在这个专题中,我们会在Spring boot这个框架中,我们的重点在于技术的实现,也就是最基础的东西,关于业务类的代码可能会有点少,如果有疑问欢迎在评论区留言
一、创建一个Spring boot项目
到这就可以创建一个Spring boot 项目了,我们来看看创建后的目录结构
pom文件引入下列依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--Spring boot Web容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Spring boot 核心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--Mysql依赖包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
<!--querydsl依赖包-->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.2.2</version>
</dependency>
<!--springboot redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
连接数据库
在Spring boot里连接数据库并不需要我们创建数据源、写连接代码,而是在配置文件中配置数据源即可完成连接,这里不讲原理,只负责实现,如果有想知道原理的可以评论区留言,我会答疑解惑
源码可直接复制到yml文件中
#配置端口号
server:
port: 7002
#配置数据源
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/aliangsql?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true&useTimezone=true&serverTimezone=GMT%2B8&useLegacyDatetimeCode=false
driverClassName: com.mysql.cj.jdbc.Driver
username: root
password: 123456
#配置 Jpa
jpa:
open-in-view: true
properties:
hibernate:
jdbc:
batch_size: 500
batch_versioned_data: true
order_inserts: true
order_updates: true
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
enable_lazy_load_no_trans: true
hbm2ddl:
auto: update
接下来我们就写代码进行测试
在数据库中创建一个表,并往里面插入三条数据
实体类,要注意@Table的name属性对应数据库表名,@Column对应数据库表列名
package com.hecl.zhenghe.domain;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Data
@Table(name = "user")
public class User implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy= GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private String age;
@Column(name = "sex")
private String sex;
}
我们来看看UserRepository接口里面的内容
@Repository
public interface UserRepository extends JpaRepository<User, String>, JpaSpecificationExecutor<User> {
User findByName(String name);
}
它继承了JpaRepository里的方法,也就是说我们在使用UserRepository时可直接调用JpaRepository中的方法对数据进行操作,我还自定义了一个通过name去查找list的一个方法,这也是Jpa自带的
Service接口:有两个方法,一个是通过name精确查询到某一个人,还有一个是获取所有的user
package com.hecl.zhenghe.Service;
import com.hecl.zhenghe.domain.User;
import java.util.List;
public interface UserService {
User getUserInfo(String name);
List<User> getUserList();
}
Service实现类:
package com.hecl.zhenghe.Service.Impl;
import com.hecl.zhenghe.Service.UserService;
import com.hecl.zhenghe.domain.User;
import com.hecl.zhenghe.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User getUserInfo(String name) {
return userRepository.findByName(name);
}
@Override
public List<User> getUserList() {
return userRepository.findAll();
}
}
Controller:
package com.hecl.zhenghe.Controller;
import com.hecl.zhenghe.Service.UserService;
import com.hecl.zhenghe.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
public UserController(UserService userService){
this.userService = userService;
}
@GetMapping(value = "/getInfo")
public User getUserInfo(String name){
return userService.getUserInfo(name);
}
@GetMapping(value = "/getList")
public List<User> getUserList(){
return userService.getUserList();
}
}
调用接口查询结果
查询user列表
通过name进行查询:
这就是Spring boot 集成 数据库 + JpaRepository实现简单数据查询的一种方法,在JpaRepository还有其它的方法,想要调用哪种就跟着我上面那样先在Service创建一个方法,然后在方法中直接调用Repository中的方法,最后Controller再新增一个接口实现即可,给大家看看JpaRepository一部分的方法,具体的要是还敢兴趣在评论区给我留言我单独解答
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.data.jpa.repository;
import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
完成:TO: 2021/4/01 00:34