前端开发学习Spring Boot,配置数据库以及使用数据库
继续学习Spring Boot,学习数据库配置相关知识。前两篇
项目文件结构
再回顾一次项目文件结构
说下我的理解:
Spring Boot项目源码在src
下面,pom.xml
是依赖配置文件,application.properties
是项目配置文件,该配置文件还可以写多个,每个环境写一个,以适应不同环境的接口地址需要。比如在src/main/resources
目录下创建两个配置文件,分别命名为application-dev.properties
和application-prod.properties
。这两个文件分别对应开发环境和生产环境的配置。
另外,application.properties
可以配置服务器端口号,配置项目全局变量,其实这里也可以配置数据库相关参数。
Spring Boot的启动类或入口文件是StartApplication
。
对比一下vue项目文件结构
vue的项目的源码也在src
文件夹下,main.js是入口文件,package.json是依赖配置文件,然后.env.test,.env.prod和.env.develop是环境配置文件,也可以在其中配置全局变量。
数据库配置
上面说了,在Spring Boot中使用数据库需要在application.properties
文件中配置你的数据库信息,比如我的
spring.datasource.url=jdbc:mysql://localhost:3306/codejoy?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
上面很简单,我用的是本地的Mysql数据库,首先是连接地址,连接地址的3306后面的codejoy,就是要用的数据库名称,剩下的是账号和密码。
至于最后一行配置表示在Spring框架中,设置数据源使用的数据库驱动为MySQL的JDBC驱动。
之后还需要下载需要的数据库配置依赖,在pom.xml
中加入
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
解释一下,这2个依赖分别是MyBatis的Spring Boot启动器和MySQL的JDBC驱动
-
mybatis-spring-boot-starter
:这是MyBatis的Spring Boot启动器,它包含了MyBatis和Spring Boot集成所需的所有依赖。使用这个启动器,可以非常方便地在Spring Boot项目中使用MyBatis。 -
mysql-connector-java
:这是MySQL的JDBC驱动,它让Java程序可以通过JDBC接口与MySQL数据库进行通信。如果项目需要连接MySQL数据库,需要这个依赖。
使用数据库
说实话,在Spring Boot中使用数据库一点不性感,和在nodejs中相比,需要写的东西比较多。
首先,我单独创建了一个包dba,在其下写数据库相关的代码。
创建包后,首先创建一个实体类
package helloWorld.start.dba;
import lombok.Data;
@Data
public class User {
private Long id;
private String username;
private String roles;
}
这个时候lombok.Data
就发挥作用,就是避免写重复的getter和setter函数。这个实体类就有点讲究了,写的这个类名User是和数据库对应的表名对应的,写的是User表,查的就是这个表。
其次,创建Mapper,在Spring Boot和MyBatis中,Mapper通常指的是一个接口,这个接口定义了一些方法,这些方法对应了SQL查询。MyBatis会为这个接口生成一个实现类,这个实现类中的方法会执行实际的SQL查询。
我创建的Mapper
package helloWorld.start.dba.mapper;
import helloWorld.start.dba.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(@Param("id") Long id);
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insert(User user);
@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
int update(User user);
@Delete("DELETE FROM user WHERE id=#{id}")
int deleteById(@Param("id") Long id);
@Select("SELECT * FROM user")
List<User> findAll();
}
接着创建Service,Service是真正给查询用的,是给接口用的,接口直接用Service。在Spring框架中,Service通常指的是业务逻辑层的组件。这一层主要负责处理业务逻辑,包括数据的处理、计算等。 Service通常会使用到Repository或Mapper来进行数据的读写操作。在Service中,可以编写业务逻辑,比如数据的校验、计算等,并调用Repository或Mapper的方法来进行数据的读写。
package helloWorld.start.dba.service;
import helloWorld.start.dba.User;
import helloWorld.start.dba.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findById(Long id) {
return userMapper.findById(id);
}
public int insert(User user) {
return userMapper.insert(user);
}
public int update(User user) {
return userMapper.update(user);
}
public int deleteById(Long id) {
return userMapper.deleteById(id);
}
public List<User> findAll() {
return userMapper.findAll();
}
}
最后在接口中使用就可以了
package helloWorld.start;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import helloWorld.start.dba.User;
import helloWorld.start.dba.service.UserService;
@RestController
public class HelloWorldController {
// 相当于注入对象,可以直接使用对象的方法,相当于new
@Autowired
private UserService userService;
@RequestMapping("/helloWorld")
public Object helloWorld(Integer id){
User User = userService.findById((long)id);
return Result.success(User);
}
}
其中的Result是一个结果类
package helloWorld.start;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private int code;
private String message;
private Object data;
public static Result success(Object data) {
return new Result(200, "操作成功", data);
}
public static Result error(String message) {
return new Result(500, message, null);
}
}
在浏览器地址栏访问测试一下
大功告成!项目文件结构如下
转载自:https://juejin.cn/post/7371986999164600330