• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Vue结合Springboot实现用户列表单页面(前后端分离)

springboot 搞代码 4年前 (2022-01-05) 37次浏览 已收录 0个评论
文章目录[隐藏]

本文主要介绍了Vue结合Springboot实现用户列表单页面,可以实现简单的查询,删除,修改,和添加用户信息功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

用户列表页面开发

项目介绍

用户列表页面开发,可以实现简单的查询,删除,修改,和添加用户信息功能。前端使用vue框架,后端使用springboot框架,一个简单的vue+springboot前后端分离小项目。

本项目主要模块及技术点如图

项目源码+笔记+资料

vue-springboot_jb51.rar

1、前端html页面编写

页面:

代码:

   <title>vue系列课程</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <div id="app"> <div class="container-fluid"> <!--标题行--><div class="row"> <div class="col-sm-6 col-sm-offset-3"><h1 class="text-center">用户列表</h1></div></div><!--数据行--><div class="row"> <div class="col-sm-10 col-sm-offset-1"> <!--添加按钮-->添加<!--列表--><table class="table table-striped table-bordered" style="margin-top: 10px"> <tr> <td>编号</td><td>姓名</td><td>工资</td><td>年龄</td><td>个人简介</td><td>操作</td></tr><tr> <td>{{user.id}}</td><td>{{user.name}}</td><td>{{user.salary}}</td><td>{{user.age}}</td><td>{{user.description}}</td><td> 删除修改</td></tr></table><!--添加 和 修改表单--> <div class="form-group"> <label class="control-label">编号</label><div> <p class="form-control-static">0001</p></div></div><div class="form-group"> <label for="name">姓名</label></div><div class="form-group"> <label for="salary">工资</label></div><div class="form-group"> <label for="age">年龄</label></div><div class="form-group"> <label for="description">个人简介</label></div><button type="submit" class="btn btn-primary">Submit</button></div></div></div></div><!--引入axios--><!--引入vue-->

我们将html页面放到如下位置:

js目录下存放vue和axios资源文件。

2、springboot框架搭建

2.1、项目创建

1、新建maven项目,取名为vue_day3_admin

2、引入sprinboot-web依赖

  <!--引入springboot-web依赖--> org.springframework.bootspring-boot-starter-web

3、编写启动类AdminApplication

 package com.xiao; import org.s<p style="color:transparent">来源gao!%daima.com搞$代*!码$网</p>pringframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public 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、引入数据库相关依赖

 <!--整合mybatis 引入依赖--> org.mybatis.spring.bootmybatis-spring-boot-starter2.1.3<!--mysql--> mysqlmysql-connector-java5.1.38<!--druid--> com.alibabadruid1.2.1

3、application.properties配置文件编写

 server.port=8990 # 整合mybatis spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/vue_day3?characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=root # 指定mapper出现的位置 mybatis.mapper-locations=classpath:com/xiao/mapper/*.xml mybatis.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.0org.examplevue_day3_admin1.0-SNAPSHOT<!--继承springboot父项目--> org.springframework.bootspring-boot-starter-parent2.5.0 <!--引入springboot-web依赖--> org.springframework.bootspring-boot-starter-web<!--整合mybatis 引入依赖--> org.mybatis.spring.bootmybatis-spring-boot-starter2.1.3<!--mysql--> mysqlmysql-connector-java5.1.38<!--druid--> com.alibabadruid1.2.1<!--本地测试--> org.springframework.bootspring-boot-starter-test1.5.12.RELEASEtest

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; } @Override public 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 { //查询所有用户信息 List findAll(); } 

2、UserDAOMapper.xml编写

resources下创建如下目录

代码:

   <!--findAll--> 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 { //查询所有用户方法 List findAll(); } 

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{ @Autowired private UserDAO userDAO; @Override @Transactional(propagation = Propagation.SUPPORTS) //方法上声明事务注解 public List findAll() { 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接口层

 //查询所有用户信息 List findAll(); 

2、UserDAOMapper.xml

 <!--save--> 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

 @Override public 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双向绑定

 </div><div class="form-group"> <label for="name">姓名</label></div><div class="form-group"> <label for="salary">工资</label></div><div class="form-group"> <label for="age">年龄</label></div><div class="form-group"> <label for="description">个人简介</label></div><button type="button" class="btn btn-primary btn-block">提交</button>

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--> update t_user set name = #{name}, age = #{age}, salary = #{salary}, des = #{des} where id = #{id} <!--findById--> select id,name,age,salary,des from t_user where id = #{id} 

3、service

UserService

 //修改用户信息 void update(User user); //基于id查询用户信息 User findById(Integer id); 

UserServiceImpl实现类

 @Override public 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、给提交按钮绑定修改或者添加用户信息事件

 <button type="button" class="btn btn-primary btn-block">提交</button>

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--> delete from t_user where id = #{id} 

3、service

UserService

 //根据id删除用户信息 void delete(Integer id); 

UserServiceImpl

 @Override public 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用户列表内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是Vue结合Springboot实现用户列表单页面(前后端分离)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Vue结合Springboot实现用户列表单页面(前后端分离)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址