Vue结合Springboot实现用户列表单页面(前后端分离)
目录
- 用户列表页面开发
- 项目介绍
- 1、前端html页面编写
- 2、springboot框架搭建
- 2.1、项目创建
- 2.2、连接数据库
- 2.3、项目完整依赖
- 3、编写entity层
- 4、查询用户信息
- 4.1、后端代码编写
- 4.2、前端代码编写
- 5、添加用户信息
- 5.1、后端代码编写
- 5.2、前端代码编写
- 6、修改用户信息
- 6.1、后端代码
- 6.2、前端代码
- 7、删除用户信息
- 7.1、后端代码
- 7.2、前端代码
用户列表页面开发
项目介绍
用户列表页面开发,可以实现简单的查询,删除,修改,和添加用户信息功能。前端使用vue框架,后端使用springboot框架,一个简单的vue+springboot前后端分离小项目。
本项目主要模块及技术点如图
文章图片
项目源码+笔记+资料
vue-springboot_jb51.rar
1、前端html页面编写 页面:
文章图片
代码:
vue系列课程 - 锐客网 用户列表添加
编号 姓名 工资 年龄 个人简介 操作 {{user.id}} {{user.name}} {{user.salary}} {{user.age}} {{user.description}} 删除修改
我们将html页面放到如下位置:
文章图片
js目录下存放vue和axios资源文件。
2、springboot框架搭建
2.1、项目创建
1、新建
maven
项目,取名为vue_day3_admin
文章图片
2、引入
sprinboot-web
依赖org.springframework.boot spring-boot-starter-web
3、编写启动类
AdminApplication
package com.xiao; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplicationpublic class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class,args); }}
4、测试
文章图片
2.2、连接数据库
1、创建
vue_day3
数据库CREATE TABLE t_user( id INT(6) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(40), salary DOUBLE(7,2), age INT(3), des VARCHAR(200));
2、引入数据库相关依赖
org.mybatis.spring.boot mybatis-spring-boot-starter2.1.3 mysql mysql-connector-java5.1.38com.alibaba druid1.2.1
3、
application.properties
配置文件编写server.port=8990# 整合mybatisspring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/vue_day3?characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=root# 指定mapper出现的位置mybatis.mapper-locations=classpath:com/xiao/mapper/*.xmlmybatis.type-aliases-package=com.xiao.entity# 展示执行过程中sql语句logging.level.com.xiao.dao=debug
4、
springboot
连接mysql
数据库4.1、打开Data Sources and Deivers 输入数据库user和password,并选择要连接的数据库。
文章图片
4.2、设置时区为UTC
文章图片
5、启动测试一下
文章图片
没有任何问题。
2.3、项目完整依赖
4.0.0 org.example vue_day3_admin1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent2.5.0 org.springframework.boot spring-boot-starter-weborg.mybatis.spring.boot mybatis-spring-boot-starter2.1.3 mysql mysql-connector-java5.1.38com.alibaba druid1.2.1 org.springframework.boot spring-boot-starter-test1.5.12.RELEASE test
3、编写entity层 创建
user
实体类package com.xiao.entity; public class User {private Integer id; private String name; private Double salary; private Integer age; private String des; public User() {}public User(Integer id, String name, Double salary, Integer age, String des) {this.id = id; this.name = name; this.salary = salary; this.age = age; this.des = des; }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 Double getSalary() {return salary; }public void setSalary(Double salary) {this.salary = salary; }public Integer getAge() {return age; }public void setAge(Integer age) {this.age = age; }public String getDes() {return des; }public void setDes(String des) {this.des = des; }@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", salary=" + salary +", age=" + age +", des='" + des + '\'' +'}'; }}
4、查询用户信息
4.1、后端代码编写
1、
UserDAO
编写package com.xiao.dao; import com.xiao.entity.User; import java.util.List; public interface UserDAO {//查询所有用户信息ListfindAll(); }
2、
UserDAOMapper.xml
编写在
resources
下创建如下目录文章图片
代码:
select id,name,salary,age,des from t_user;
3、
service
层编写UserService
接口package com.xiao.service; import com.xiao.entity.User; import java.util.List; public interface UserService {//查询所有用户方法ListfindAll(); }
UserServiceImpl
实现类package com.xiao.service; import com.xiao.dao.UserDAO; import com.xiao.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service //代表这是一个业务层组件 作用:用来在spring工厂中创建一个userServiceImpl对象@Transactional //代表给类中所有的方法加入事务控制public class UserServiceImpl implements UserService{@Autowiredprivate UserDAO userDAO; @Override@Transactional(propagation = Propagation.SUPPORTS) //方法上声明事务注解public ListfindAll() {return userDAO.findAll(); }}
4、进行
test
测试文章图片
BasicTest
类package com.xiao.test; import com.xiao.AdminApplication; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest(classes = AdminApplication.class) //指定入口类@RunWith(SpringRunner.class)//启动工厂public class BasicTest {}
TestUserService
类package com.xiao.test; import com.xiao.service.UserService; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; public class TestUserService extends BasicTest {@Autowired private UserService userService; @Test public void findAll() {userService.findAll().forEach(user -> System.out.println(user)); }}
测试成功!!!
文章图片
4.2、前端代码编写
1、在
created()
函数中添加axios
请求# 生命周期钩子:生命周期函数
初始化阶段
1.beforeCreate vue实例自身事件生命周期初始化
2.created 完成自定义data methods computed 注入和校验 推荐
3.beforeMount将el指向html编译为模板,并没有完成模板注入
4.Mounted将编译模板进行数据注入,并将注入完成模板形成虚拟dom替换el指向原始dom
代码:
var app = new Vue({el: "#app",data:{msg:"vue 生命周期",users:[], //定义一个users空数组,用来存贮所有用户的信息},methods:{},computed:{},created(){ //执行 data methods computed 等完成注入和校验//发送axios请求axios.get("http://localhost:8990/users").then(res=>{console.log(res.data); this.users = res.data; }); //es6 箭头函数 注意:箭头函数内部没有自己this简化 function(){} //存在自己this},});
2、测试
文章图片
测试成功!!!
5、添加用户信息
5.1、后端代码编写
1、
UserDAO
接口层//查询所有用户信息ListfindAll();
2、
UserDAOMapper.xml
insert into t_user values (#{id},#{name},#{salary},#{age},#{des})
使用
mysql
自增长序列,新插入一条数据时,怎么得到主键?加入以下属性即可:
useGeneratedKeys=“true” keyProperty=“id”
useGeneratedKeys 取值范围true、false 默认值是:false。 含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。
keyProperty 取id的key值,主要是在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值,不是数据库表中的字段名。
3、
service
层编写UserService
类//保存用户信息void save(User user);
UserServiceImpl
类@Overridepublic void save(User user) {userDAO.save(user); }
4、
UserController
控制类、//添加员工信息接口@PostMapping("saveOrUpdate")public void saveOrUpdate(@RequestBody User user){System.out.println(user); userService.save(user); }
5.2、前端代码编写
1、
form
表单中添加v-model
双向绑定2、给提交按钮绑定
saveOrUpdate
方法var app = new Vue({el: "#app",data:{msg:"vue 生命周期",users:[], //定义一个users空数组,用来存贮所有用户的信息user:{},//定义了一个空的json对象},methods:{saveOrUpdate(){ //保存或者修改方法//发送添加的请求console.log(this.user); axios.post("http://localhost:8990/saveOrUpdate",this.user).then(res=>{this.user={}; //添加成功,清空数据alert('用户信息更新成功!'); //更新原始列表的数据this.findAll(); //调用查询所有}).catch(err=>{alert('用户信息更新失败!')}); },findAll(){//发送axios请求axios.get("http://localhost:8990/users").then(res=>{console.log(res.data); this.users = res.data; }); //es6 箭头函数 注意:箭头函数内部没有自己this简化 function(){} //存在自己this}},
3、测试一下
文章图片
测试成功!!!
6、修改用户信息
6.1、后端代码
1、
UserDAO
类//更新用户信息void update(User user); //基于id查询用户信息User findById(Integer id);
2、
UserDAOMapper.xml
update t_usersetname = #{name},age = #{age},salary = #{salary},des = #{des}where id = #{id} selectid,name,age,salary,desfrom t_userwhere id = #{id}
3、
service
层UserService
类//修改用户信息void update(User user); //基于id查询用户信息User findById(Integer id);
UserServiceImpl
实现类@Overridepublic void update(User user) {userDAO.update(user); }@Override@Transactional(propagation = Propagation.SUPPORTS) //方法上声明事务注解Propagation:事务传播属性 支持事务public User findById(Integer id) {return userDAO.findById(id); }
4、
control
层在这里我们要根据前端请求的参数进行判断。如果前端请求的参数中
id
为空,说明是添加操作,否则是更新操作,我们执行相对应的代码。//添加员工信息接口@PostMapping("saveOrUpdate")public void saveOrUpdate(@RequestBody User user){log.info("接收的业务逻辑:{}",user); //判断是否存在id//存在: 更新操作不存在id: 添加操作if(StringUtils.isEmpty(user.getId())){ //如果为空log.info("添加业务逻辑......"); userService.save(user); //添加}else{log.info("更新业务逻辑......"); userService.update(user); }}
6.2、前端代码
我们点击修改按钮,显示用户信息。
1、我们先给修改按钮添加根据id查询用户信息事件
修改
2、
userEditDetail(id)
userEditDetail(id){//用来在表单中将当前点击用户信息进行回显axios.get("http://localhost:8990/user/"+id).then(res=>{this.user = res.data; //完成数据回显}); },
3、给提交按钮绑定修改或者添加用户信息事件
4、
saveOrUpdate()
saveOrUpdate(){ //保存或者修改方法if(!this.user.name){alert("姓名不能为空!"); return ; }console.log(this.user); axios.post("http://localhost:8990/saveOrUpdate",this.user).then(res=>{this.user={}; //添加成功,清空数据alert('用户信息更新成功!'); //更新原始列表的数据this.findAll(); //调用查询所有}).catch(err=>{alert('用户信息更新失败!')}); },},findAll(){//发送axios请求axios.get("http://localhost:8990/users").then(res=>{console.log(res.data); this.users = res.data; }); //es6 箭头函数 注意:箭头函数内部没有自己this简化 function(){} //存在自己this},
5、测试一下
文章图片
测试成功!!!
7、删除用户信息
7.1、后端代码
1、
UserDAO
接口//基于id删除用户信息void delete(Integer id);
2、
UserDAOMapper.xml
delete from t_user where id = #{id}
3、
service
层UserService
类//根据id删除用户信息void delete(Integer id);
UserServiceImpl
类@Overridepublic void delete(Integer id) {userDAO.delete(id); }
4、
controller
类//根据id删除用户信息的接口@DeleteMapping("delete/{id}")public void delete(@PathVariable Integer id){userService.delete(id); }
7.2、前端代码
1、给删除按钮绑定删除事件
删除
2、
delUser(id)
删除用户方法delUser(id){ //删除用户方法//友情提醒删除if(window.confirm("您确定要删除这条记录吗?")){axios.delete("http://localhost:8990/delete/"+id).then(res=>{alert("用户信息删除成功!"); this.findAll(); 调用查询所有}).catch(err=>{alert("用户信息删除失败!"); }); }}
3、测试一下
文章图片
删除信息成功!!!
【Vue结合Springboot实现用户列表单页面(前后端分离)】到此这篇关于Vue结合Springboot实现用户列表单页面(前后端分离)的文章就介绍到这了,更多相关Vue结合Springboot用户列表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- vue-cli|vue-cli 3.x vue.config.js 配置
- Activiti(一)SpringBoot2集成Activiti6
- 2020-04-07vue中Axios的封装和API接口的管理
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 【38】“劳逸结合”的重要性
- VueX--VUE核心插件
- vue组件中为何data必须是一个函数()
- springboot使用redis缓存
- 用npm发布一个包的教程并编写一个vue的插件发布