spring boot + gradle + mybatis + vue整合前后端分离入门
前言
在做springboot项目时,公司要求是springboot+gradle+mybatis+vue,同时,我又习惯了用ecplise来开发,
在网上找了许多资料都不是很全,
于是自己经过磕磕碰碰的尝试整合,终于基于要求做了一个简单的用户管理系统。
前期准备
首先是各种工具的下载与安装:
1.Spring Tool Suite 简称STS,是基于eclipse的springboot的开发工具,下载安装与eclipse一样,下载地址:https://spring.io/tools3/sts/all/ 2.Gradle的下载与安装与eclipse(STS)集成(点击查看)
3.Vue的相关下载与安装。
4.Vue开发工具的下载与安装。
1.使用STS创建一个springboot项目
1.打开STS,在左侧空白区右键new,新建一个spring starter project
项目
Service URL默认的,不用变,Name是项目名。Type选择gradle(详细看gradle下载与安装),jdk版本要8,Group是组织名,Description描述随便写,Package是包名。然后next。
这里可以根据你项目的需要勾选所需要的依赖包,也可以不勾选,等项目新建后再添加相关依赖。
再next,点finish,就创建好了一个springboot项目了。目录结构如下所示:
2,正式开发
1.使用gradle导入依赖
打开build.gradle
文件,在dependencies
中导入依赖
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0')
runtimeOnly 'mysql:mysql-connector-java'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.4.RELEASE'
}
若在项目创建时已经勾选的相关依赖,就不需要再导入了。spring-boot-devtools
是springboot热部署的依赖包,可以不导入。
2.用MVC模式来编程
先来一张整体结构图
注意:自动生成的启动类不能和其他类在同一级,必须在上一级。
下面是代码:
(1)启动类:CustomerServiceApplication.java
package com.seley.service.customer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "com.seley.service.customer.dao")
public class CustomerServiceApplication {
public static void main(String[] args) {
SpringApplication.run(CustomerServiceApplication.class, args);
}
}
说明:@MapperScan
注解作用指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类,添加位置:是在Springboot启动类上面添加。或者在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类,但需要在每个接口类上加上@Mapper注解,比较麻烦,所以用@MapperScan
。
(2)实体类:User.java
package com.seley.service.customer.entities;
import java.io.Serializable;
@SuppressWarnings("serial")
public class User implements Serializable{
private Integer id;
private String name;
private String sex;
private String tel;
private String email;
public User() {}
public User(Integer id, String name, String sex, String tel, String email) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.tel = tel;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
(3)Dao接口:UserDao.java
package com.seley.service.customer.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.seley.service.customer.entities.User;
public interface UserDao {
public List<User> getAllUser();
public int addUser(User user);
public int deleteUser(@Param("id")Integer id);
public User getUser(@Param("id")Integer id);
}
(4)Mapper映射文件:UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.seley.service.customer.dao.UserDao" >
<insert id="addUser" parameterType="User">
insert into user(name, sex, tel, email) values(#{name}, #{sex}, #{tel}, #{email})
</insert>
<select id="getAllUser" resultType="User">
select id, name, sex, tel, email from user
</select>
<delete id="deleteUser">
delete from user where id=#{id}
</delete>
<select id="getUser" resultType="User">
select id, name, sex, tel, email from user where id=#{id}
</select>
</mapper>
注意:1.命名空间地址要写全路径。2.实体类可以写全路径,亦可以简写,但是简写的前提是在配置文件中要有相关配置。(后面说明)
(5)Service层接口:MainService.java
package com.seley.service.customer.service;
import java.util.List;
import com.seley.service.customer.entities.User;
public interface MainService {
public List<User> getAllUser();
public int addUser(User user);
public int deleteUser(int id);
public User getUser(int id);
}
(6)Service层实现类:MainServiceImpl.java
package com.seley.service.customer.serviceimpl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.seley.service.customer.dao.UserDao;
import com.seley.service.customer.entities.User;
import com.seley.service.customer.service.MainService;
@Service
public class MainServiceImpl implements MainService{
@Autowired
private UserDao userDao;
@Override
public List<User> getAllUser() {
return userDao.getAllUser();
}
@Override
public int addUser(User user) {
return userDao.addUser(user);
}
@Override
public int deleteUser(int id) {
return userDao.deleteUser(id);
}
@Override
public User getUser(int id) {
return userDao.getUser(id);
}
}
注意:@Service
注解不能忘;@Autowired
注入对象
(7)控制器:MainController.java
package com.seley.service.customer.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.seley.service.customer.entities.User;
import com.seley.service.customer.service.MainService;
@RestController
public class MainController {
@Autowired
private MainService mainService;
@RequestMapping(value = "/get/users", method = RequestMethod.GET)
public List<User> getAllUser() {
List<User> userList = mainService.getAllUser();
return userList;
}
@RequestMapping(value="/post", method=RequestMethod.POST)
public int addUser(@RequestBody Map<String, String> map) {
User user = new User();
user.setName(map.get("name"));
user.setSex(map.get("sex"));
user.setTel(map.get("tel"));
user.setEmail(map.get("email"));
int status = mainService.addUser(user);
return status;
}
@GetMapping("/get/user")
public User getUser(@RequestParam("id") String id) {
return mainService.getUser(Integer.parseInt(id));
}
@GetMapping("/delete/user/{id}")
public int deleteUser(@PathVariable String id) {
return mainService.deleteUser(Integer.parseInt(id));
}
}
说明:@RestController
注解相当于@ResponseBody + @Controller合在一起的作用,所以不能返回一个页面,返回json格式的值(前后端分离-页面之间的调用在前台完成)。上面代码中每种请求的传参方式都不一样,看你的实际情况决定用那一种。
3.配置文件
找到application
配置文件,修改后缀文件格式为.yml
,不修改也行,但是写起来没有.yml
格式的简洁。关于.yml
文件格式的写法可自行百度,这里只强调两点:1.冒号后必须带一个空格;2.下一级必须比上一级要缩进一点。
server:
port: 9100
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.seley.service.customer.entities
spring:
datasource:
url: jdbc:mysql://localhost:3306/vsbtest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
说明:server.port
设置端口号;mybatis.mapper-locations
扫描映射文件;mybatis.type-aliases-package
用来简化映射文件中实体类的写法(不用写全路径);spring.datasource
用来配置数据库,需要注意一点的是必须配置时区serverTimezone=GMT%2B8
,否则启动会出错。url
中数据库名换成你自己的。
4.启动springboot
项目右键—>Run As
—>Spring Boot App
5.测试
对了,MySQL数据库中得有表,有测试数据。(数据库要提前设计好)
建表:
-- Table "user" DDL
CREATE TABLE `user` (
`id` int(50) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`sex` varchar(10) NOT NULL,
`tel` varchar(50) NOT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
插入一条测试数据
INSERT INTO user( name, sex, tel, email )
VALUES
( "kaikai","boy","123456789","345617523@qq.com" );
打开浏览器,地址栏输入:http://localhost:9100/get/users
,回车,看能不能得到测试数据。
关于前端VUE在下一篇博客中分享
有问题的小伙伴欢迎评论