当前位置:   article > 正文

使用springboot+vue+mybatis-plus+element ui做一个简单的增删改查_springboot+vue+elementui基础增删改查

springboot+vue+elementui基础增删改查

tips:

本人刚学编程 纯纯的小白一个,内容不算好,但是可以值得借鉴;希望能靠这篇文章能得到大神的指点;我本来也就打算用文章复习一下刚学的知识;本篇文章主要是介绍增删改查,其余的配置代码也就一笔带过。如果内容不好,勿喷。

题外话:

后端基础学不好,学了就忘,前端也一样,让人很难受。做这个增删改查的时候可费了我大把大把的时间,刚开始学难免明知有坑还是要往里面跳,但这也不是个坏事,写代码不就是一遍一遍地去尝试,写的多了,踩得坑多了,你的知识你的认知就会越来越丰富。

刚开始写这个增删改查的时候,不会写就去网上查各种例子,例子很多,五花八门,愣是一个也看不懂,看的我是脑子嗡嗡的,以至于后面有一段时间就感觉脑袋很沉,转不动了,有没有刚学编程的同学和我有一样的感受;前话说的有点多了,不说了,下面开整。

一.springboot+vue+mybatis-plus增删改查

工具:后台Eclipse

           前台VsCode

          数据库MySQL

先给大家献上后端的所有类

学过springboot的都知道上面几个层都有啥作用吧,其实有的层我也不知道有何作用,其中有的层命名不一样,按照自己命名方式来主要是舒服。有的我都觉着多余,但就是这么写,我也不敢违抗啊。

层级调用:controller层-servic层-manager层-dao层

正片开始了

pom文件的依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. <artifactId>log4j-to-slf4j</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!-- 热部署 -->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-devtools</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>io.springfox</groupId>
  19. <artifactId>springfox-staticdocs</artifactId>
  20. <version>${io.springfox.version}</version>
  21. <scope>test</scope>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-aop</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-cache</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-configuration-processor</artifactId>
  34. <optional>true</optional>
  35. </dependency>
  36. <dependency>
  37. <groupId>commons-logging</groupId>
  38. <artifactId>commons-logging</artifactId>
  39. <version>1.2</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>commons-lang</groupId>
  43. <artifactId>commons-lang</artifactId>
  44. <version>2.6</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>mysql</groupId>
  48. <artifactId>mysql-connector-java</artifactId>
  49. </dependency>
  50. <dependency>
  51. <groupId>com.alibaba</groupId>
  52. <artifactId>druid</artifactId>
  53. <version>1.1.8</version>
  54. </dependency>
  55. <dependency>
  56. <groupId>com.baomidou</groupId>
  57. <artifactId>mybatis-plus-boot-starter</artifactId>
  58. <version>3.3.1</version>
  59. </dependency>
  60. <dependency>
  61. <groupId>com.thetransactioncompany</groupId>
  62. <artifactId>cors-filter</artifactId>
  63. <version>2.6</version>
  64. </dependency>
  65. <dependency>
  66. <groupId>com.thetransactioncompany</groupId>
  67. <artifactId>java-property-utils</artifactId>
  68. <version>1.9.1</version>
  69. </dependency>
  70. <dependency>
  71. <groupId>com.alibaba</groupId>
  72. <artifactId>fastjson</artifactId>
  73. <version>1.2.58</version>
  74. </dependency>
  75. <dependency>
  76. <groupId>net.sf.json-lib</groupId>
  77. <artifactId>json-lib</artifactId>
  78. <version>2.4</version>
  79. <classifier>jdk15</classifier>
  80. </dependency>
  81. <dependency>
  82. <groupId>joda-time</groupId>
  83. <artifactId>joda-time</artifactId>
  84. </dependency>
  85. <dependency>
  86. <groupId>org.jodd</groupId>
  87. <artifactId>jodd-http</artifactId>
  88. <version>3.9.1</version>
  89. </dependency>
  90. <dependency>
  91. <groupId>com.thoughtworks.xstream</groupId>
  92. <artifactId>xstream</artifactId>
  93. <version>1.4.11.1</version>
  94. </dependency>
  95. <dependency>
  96. <groupId>org.projectlombok</groupId>
  97. <artifactId>lombok</artifactId>
  98. </dependency>
  99. <dependency>
  100. <groupId>io.springfox</groupId>
  101. <artifactId>springfox-swagger2</artifactId>
  102. <version>2.8.0</version>
  103. </dependency>
  104. <dependency>
  105. <groupId>io.springfox</groupId>
  106. <artifactId>springfox-swagger-ui</artifactId>
  107. <version>2.8.0</version>
  108. </dependency>
  109. <dependency>
  110. <groupId>commons-codec</groupId>
  111. <artifactId>commons-codec</artifactId>
  112. </dependency>
  113. <dependency>
  114. <groupId>commons-fileupload</groupId>
  115. <artifactId>commons-fileupload</artifactId>
  116. <version>1.3.2</version>
  117. </dependency>
  118. <dependency>
  119. <groupId>com.alibaba</groupId>
  120. <artifactId>easyexcel</artifactId>
  121. <version>2.2.6</version>
  122. </dependency>
  123. <dependency>
  124. <groupId>org.json</groupId>
  125. <artifactId>json</artifactId>
  126. <version>20171018</version>
  127. </dependency>
  128. <dependency>
  129. <groupId>io.springfox</groupId>
  130. <artifactId>springfox-swagger2</artifactId>
  131. <version>2.9.2</version>
  132. </dependency>
  133. <dependency>
  134. <groupId>io.springfox</groupId>
  135. <artifactId>springfox-swagger-ui</artifactId>
  136. <version>2.9.2</version>
  137. </dependency>
  138. </dependencies>

yml配置文件

端口:7002,可以自己更改,没必要按我的端口。

数据库:需要修改的也就最下面三行,连接自己的数据库,密码和用户

mybatis-plus:注释里有说明

 前后分离就要跨域,所以要先配置跨域

 最后的最后配置

mybatis-plus的配置

这是一个分页的配置

1.后端代码:

dao类

就这一段极少的代码,却拥有超强的功能,这也归功于继承的BaseMapper,简单来说继承了它,增删改查的语句我们也就不用写了,直接调用dao就行了。

  1. @Repository
  2. public interface UserDao extends BaseMapper<User>{
  3. }

manager类

上面图片里的manager写错了

这是我在网上找到对manager的解释

A)对第三方平台封装的层,预处理返回结果及转化异常信息;
B)对 Service 层通用能力的下沉,如缓存方案、中间件通用处理;
C)与 DAO 层交互,对多个 DAO 的组合复用。

  1. @Component
  2. public class UserMannger {
  3. @Autowired
  4. private UserDao userDao;
  5. //获取全部用户
  6. public List<User> getAllUsers(){
  7. QueryWrapper<User> wrapper=new QueryWrapper<User>();
  8. return userDao.selectList(wrapper);
  9. }
  10. //根据id获取用户
  11. public User getById(String id) {
  12. return userDao.selectById(id);
  13. }
  14. //根据姓名获取用户
  15. public User getByName(String username) {
  16. QueryWrapper<User> wrapper=new QueryWrapper<User>();
  17. wrapper.eq("username", username);
  18. return userDao.selectOne(wrapper);
  19. }
  20. //根据角色获取用户
  21. public List<User> getByRole(String role) {
  22. QueryWrapper<User> wrapper=new QueryWrapper<User>();
  23. wrapper.eq("role",role);
  24. return userDao.selectList(wrapper);
  25. }
  26. //添加用户
  27. public int insert(User user) {
  28. return userDao.insert(user);
  29. }
  30. //删除用户
  31. public int delete(String id) {
  32. return userDao.deleteById(id);
  33. }
  34. //编辑用户
  35. public int update(User user) {
  36. return userDao.updateById(user);
  37. }
  38. }

service类

  1. @Service
  2. public class UserService {
  3. @Autowired
  4. private UserMannger userMannger;
  5. //获取全部用户
  6. public List<User> getAllUsers(){
  7. return userMannger.getAllUsers();
  8. }
  9. //根据id获取用户
  10. public User getById(String id) {
  11. return userMannger.getById(id);
  12. }
  13. //根据姓名获取
  14. public User getByName(String name) {
  15. return userMannger.getByName(name);
  16. }
  17. //根据角色获取
  18. public List<User> getByRole(String role) {
  19. return userMannger.getByRole(role);
  20. }
  21. //增加
  22. public int insert(User user) {
  23. return userMannger.insert(user);
  24. }
  25. //删除
  26. public int delete(String id) {
  27. return userMannger.delete(id);
  28. }
  29. //修改
  30. public int update(User user) {
  31. return userMannger.update(user);
  32. }
  33. }

controller类

  1. @RequestMapping("/UserController")
  2. @RestController
  3. public class UserController {
  4. @Autowired
  5. private UserService userService;
  6. @Autowired
  7. private LoginService loginService;
  8. //获取全部用户
  9. @RequestMapping("/getAllUsers")
  10. public List<User> getAllUsers() {
  11. return userService.getAllUsers();
  12. }
  13. //根据id获取用户
  14. @RequestMapping("/getById")
  15. public User getById(@RequestBody User user) {
  16. return userService.getById(user.getId());
  17. }
  18. //根据姓名获取用户
  19. @RequestMapping("getByName")
  20. public User getByName(@RequestBody User user) {
  21. return userService.getByName(user.getUsername());
  22. }
  23. //根据角色获取用户
  24. @RequestMapping("/getByRole")
  25. public List<User> getByRole(@RequestBody User user) {
  26. return userService.getByRole(user.getRole());
  27. }
  28. //新增
  29. @RequestMapping("/addUser")
  30. public int addUser(@RequestBody User user) {
  31. return userService.insert(user);
  32. }
  33. //删除
  34. @RequestMapping("/deleteUser/{id}")
  35. public int deleteUser(@PathVariable("id") String id) {
  36. return userService.delete(id);
  37. }
  38. //修改
  39. @RequestMapping("/editUser")
  40. public int editUser(@RequestBody User user) {
  41. return userService.update(user);
  42. }
  43. }

后端代码也就这么多,下面献上前端代码

2.前端代码

自从学习了一点点的vue,我感觉我写代码就是Ctrl+c,很方便,但也有弊端,这样我就不能敲键盘了,键盘敲不烂,我就没理由换新键盘了。又说了点题外话,本人比较喜欢聊天,所以就说多了,哈哈哈哈哈哈哈哈。

直接给大家上代码。

main.js的代码

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. import axios from 'axios';
  6. import ElementUI from 'element-ui';
  7. import 'element-ui/lib/theme-chalk/index.css';
  8. Vue.config.productionTip = false
  9. Vue.use(ElementUI);
  10. Vue.prototype.$axios = axios;
  11. new Vue({
  12. router,
  13. store,
  14. render: h => h(App)
  15. }).$mount('#app')

index.js

这个index是router里的index文件不要写到别处了。

  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. Vue.use(VueRouter)
  4. const routes = [
  5. {
  6. path: '/UserForm',
  7. name: 'UserForm',
  8. component: () => import(/* webpackChunkName: "about" */ '../views/UserForm.vue')
  9. },
  10. ]
  11. const router = new VueRouter({
  12. routes
  13. })
  14. export default router

 App.vue

  1. <template>
  2. <div id="app">
  3. <div id="nav">
  4. <router-link to="/UserForm">用户管理</router-link>|
  5. </div>
  6. <router-view/>
  7. </div>
  8. </template>

UserForm.vue

  1. <template>
  2. <div>
  3. <el-button type="primary" @click="getAllUsersBtn">查询所有用户</el-button>
  4. <el-input v-model="UserForm.id" style="width:100px"></el-input>
  5. <el-button type="primary" @click="getIdBtn">根据id查询</el-button>
  6. <el-input v-model="UserForm.username" style="width:100px"></el-input>
  7. <el-button type="primary" @click="getNameBtn">根据姓名查询</el-button>
  8. <el-input v-model="UserForm.role" style="width:100px"></el-input>
  9. <el-button type="primary" @click="getRoleBtn">根据角色查询</el-button>
  10. <el-button type="primary" @click="OpenAddBtn">添加用户</el-button>
  11. <template>
  12. <el-table :data="users" style="width: 100%" height="250">
  13. <el-table-column fixed prop="id" label="编号" width="150">
  14. </el-table-column>
  15. <el-table-column prop="username" label="姓名" width="120">
  16. </el-table-column>
  17. <el-table-column prop="userpassword" label="密码" width="120">
  18. </el-table-column>
  19. <el-table-column prop="role" label="角色" width="120">
  20. </el-table-column>
  21. <el-table-column prop="sex" label="性别" width="300">
  22. </el-table-column>
  23. <el-table-column fixed="right" label="操作" width="120">
  24. <template slot-scope="scope">
  25. <el-button @click="deleteBtn(scope.row)" type="text" size="small">
  26. 删除
  27. </el-button>
  28. <el-button type="text" size="small" @click="openEdit(scope.row)">编辑</el-button>
  29. </template>
  30. </el-table-column>
  31. </el-table>
  32. </template>
  33. <el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose1">
  34. <el-form ref="form" :model="form" label-width="80px">
  35. <el-form-item label="姓名">
  36. <el-input v-model="form.username"></el-input>
  37. </el-form-item>
  38. <el-form-item label="密码">
  39. <el-input v-model="form.userpassword"></el-input>
  40. </el-form-item>
  41. <el-form-item label="性别">
  42. <el-select v-model="form.sex" placeholder="请选择性别">
  43. <el-option label="男" value="man"></el-option>
  44. <el-option label="女" value="woman"></el-option>
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="角色">
  48. <el-select v-model="form.role" placeholder="请选择角色">
  49. <el-option label="学生" value="student"></el-option>
  50. <el-option label="老师" value="teacher"></el-option>
  51. </el-select>
  52. </el-form-item>
  53. </el-form>
  54. <span slot="footer" class="dialog-footer">
  55. <el-button @click="dialogVisible = false">取 消</el-button>
  56. <el-button type="primary" @click="addBtn">确 定</el-button>
  57. </span>
  58. </el-dialog>
  59. <el-dialog title="提示" :visible.sync="dialogVisible1" width="30%" :before-close="handleClose">
  60. <el-form ref="form" :model="EditForm" label-width="80px">
  61. <el-form-item label="姓名">
  62. <el-input v-model="EditForm.username"></el-input>
  63. </el-form-item>
  64. <el-form-item label="密码">
  65. <el-input v-model="EditForm.userpassword"></el-input>
  66. </el-form-item>
  67. <el-form-item label="性别">
  68. <el-select v-model="EditForm.sex" placeholder="请选择性别">
  69. <el-option label="男" value="man"></el-option>
  70. <el-option label="女" value="woman"></el-option>
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item label="角色">
  74. <el-select v-model="EditForm.role" placeholder="请选择角色">
  75. <el-option label="学生" value="student"></el-option>
  76. <el-option label="老师" value="teacher"></el-option>
  77. </el-select>
  78. </el-form-item>
  79. </el-form>
  80. <span slot="footer" class="dialog-footer">
  81. <el-button @click="dialogVisible = false">取 消</el-button>
  82. <el-button type="primary" @click="EditBtn">确 定</el-button>
  83. </span>
  84. </el-dialog>
  85. </div>
  86. </template>
  87. <script>
  88. export default {
  89. data() {
  90. return {
  91. users: [],
  92. dialogVisible: false,
  93. dialogVisible1: false,
  94. form: {
  95. username: "",
  96. userpassword: "",
  97. sex: "",
  98. role: "",
  99. },
  100. UserForm: {
  101. id: "",
  102. username: "",
  103. userpassword: "",
  104. sex: "",
  105. role: "",
  106. },
  107. EditForm: {
  108. id: "",
  109. username: "",
  110. userpassword: "",
  111. sex: "",
  112. role: "",
  113. },
  114. };
  115. },
  116. methods: {
  117. getAllUsersBtn() {
  118. getAllUsersBtnAction(this);
  119. },
  120. OpenAddBtn() {
  121. this.dialogVisible = true;
  122. },
  123. addBtn() {
  124. addBtnAction(this);
  125. },
  126. getIdBtn() {
  127. getIdBtnAction(this);
  128. },
  129. getNameBtn() {
  130. getNameBtnAction(this);
  131. },
  132. getRoleBtn() {
  133. getRoleBtnAction(this);
  134. },
  135. deleteBtn(row) {
  136. const that = this;
  137. this.$axios
  138. .post("http://127.0.0.1:7002/crud/UserController/deleteUser/" + row.id)
  139. .then(function (res) {
  140. that.getAllUsersBtn();
  141. });
  142. },
  143. openEdit(row) {
  144. this.dialogVisible1 = true;
  145. this.EditForm = row;
  146. },
  147. EditBtn(row) {
  148. EditBtnAction(this);
  149. },
  150. handleClose(done) {
  151. this.$confirm("确认关闭?")
  152. .then((_) => {
  153. done();
  154. })
  155. .catch((_) => {});
  156. },
  157. handleClose1(done) {
  158. this.$confirm("确认关闭?")
  159. .then((_) => {
  160. done();
  161. })
  162. .catch((_) => {});
  163. },
  164. },
  165. };
  166. function getAllUsersBtnAction(vm) {
  167. vm.$axios
  168. .post("http://127.0.0.1:7002/crud/UserController/getAllUsers")
  169. .then(function (res) {
  170. vm.users = res.data;
  171. console.log(res);
  172. });
  173. }
  174. function addBtnAction(vm) {
  175. vm.$axios
  176. .post("http://127.0.0.1:7002/crud/UserController/addUser", vm.form, {
  177. "Content-Type": "application/json;charset=utf-8",
  178. })
  179. .then(function (res) {
  180. vm.dialogVisible = false;
  181. getAllUsersBtnAction(vm);
  182. console.log(res);
  183. })
  184. .catch(function (err) {
  185. console.log(err);
  186. });
  187. }
  188. function getIdBtnAction(vm) {
  189. let input = {
  190. id: vm.UserForm.id,
  191. };
  192. vm.$axios
  193. .post("http://127.0.0.1:7002/crud/UserController/getById", input, {
  194. "Content-Type": "application/json;charset=utf-8",
  195. })
  196. .then(function (res) {
  197. vm.users = [];
  198. vm.users.push(res.data);
  199. console.log(res);
  200. });
  201. }
  202. function getNameBtnAction(vm) {
  203. let input = {
  204. username: vm.UserForm.username,
  205. };
  206. vm.$axios
  207. .post("http://127.0.0.1:7002/crud/UserController/getByName", input, {
  208. "Content-Type": "application/json;charset=utf-8",
  209. })
  210. .then(function (res) {
  211. vm.users = [];
  212. vm.users.push(res.data);
  213. console.log(res);
  214. });
  215. }
  216. function getRoleBtnAction(vm) {
  217. let input = {
  218. role: vm.UserForm.role,
  219. };
  220. vm.$axios
  221. .post("http://127.0.0.1:7002/crud/UserController/getByRole", input, {
  222. "Content-Type": "application/json;charset=utf-8",
  223. })
  224. .then(function (res) {
  225. vm.users = res.data;
  226. console.log(res);
  227. });
  228. }
  229. function EditBtnAction(vm) {
  230. vm.$axios
  231. .post("http://127.0.0.1:7002/crud/UserController/getByRole", vm.EditForm, {
  232. "Content-Type": "application/json;charset=utf-8",
  233. })
  234. .then(function (res) {
  235. vm.dialogVisible1 = false;
  236. });
  237. }
  238. </script>

附上一段操作,看看结果如何,页面不精致,只求结果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57502
推荐阅读
相关标签
  

闽ICP备14008679号