下载所需要的 js 文件,或者直接引用

复制src连接并访问,然后右键,另存为分别保存下来,复制到static/js文件夹下即可

<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

在 static 文件夹下建立 首页 index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body>
<div id="app"><table><tr><th>序号</th><th>id</th><th>姓名</th><th>金钱</th><th>生日</th><th>操作</th></tr><!--v-for 遍历循环,多个参数用括号括起来--><tr v-for="(u,index) in users"><td>{{index + 1}}</td><td>{{u.id}}</td><td>{{u.name}}</td><td>{{u.money}}</td><td>{{u.birthDay}}</td></tr></table>
</div>
<!--引用下载好的 js 文件,也可以直接用<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script src="https://unpkg.com/axios/dist/axios.min.js"></script>
-->
<script src="js/vue.min.js"></script>
<script src="js/axios.min.js"></script>
<script>let v = new Vue({// 选中要渲染的元素 leel: '#app',// 存放需要变动的数据data: {// table表中用到的 users 数组数据users: []},// created vue声明周期的(渲染之前阶段),此时调用方法 function 去获取渲染需要的数据created: function () {// get方法访问 "/selectAll" 获取数据axios.get("/selectAll").then(  // .then 指的是访问成功之后resp => {   // resp 是响应数据// 这里将响应数据中的 data 赋值给 v(Vue) 中的 users// 注意不是 v.data.usersv.users = resp.data}).catch(error=>{console.log(error)})   //.catch 指的是失败后,在控制台输出 error 信息},methods: {}})
</script>
</body>
</html>

创建 UserMapper

package com.prictice.mybatis2.controller;import com.prictice.mybatis2.entity.User;
import com.prictice.mybatis2.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
public class UserController {@AutowiredUserMapper mapper;@GetMapping("/selectAll")public List<User> selectAll(){/*  当 return 集合或者自定义类 的时候SpringMVC 会自动将其转换为 json 数据类型,然后通过二进制文件的形式传输给浏览器  */return mapper.selectAll();}
}

然后启动主程序,直接访问 http://localhost:8080/

实现修改功能

index.html 中添加修改跳转 注意 :href="'/update.html?id=' + id"

       <tr v-for="(u,index) in users"><td>{{index + 1}}</td><td>{{u.id}}</td><!--可以通过这样的方式让 元素内容 附带跳转功能--><td><a :href="'/update.html?id='+u.id">{{u.name}}</a></td><td>{{u.money}}</td><td>{{u.birthDay}}</td><td><!--这里利用 v-bind 进行 href 拼接,点击即跳到 /update 附带 当前行对象的 id--><a :href="'/update.html?id='+u.id">修改</a></td></tr>

V 新建 update.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>修改</title>
</head>
<body>
<div id="app"><form action="">id:<input type="text" name="id" :value="user.id" placeholder="id" readonly>姓名:<input type="text" name="name" :value="user.name" placeholder="name">金钱:<input type="text" name="money" :value="user.money" placeholder="money">生日:<input type="date" name="birthDay" :value="user.birthDay" placeholder="birthDay"><input type="button" @click="update()" value="修改"></form>
</div><script src="js/vue.min.js"></script>
<script src="js/axios.min.js"></script>
<script>let v = new Vue({el: '#app',data: {// form 表中用到的 user 对象数据user:{id:'',name:'',money:'',birthDay:''}},created: function () {/*  访问的 url 是 .../update?id=1 通过 location.search 获取参数 ?id=1通过 .split('=') 分割成 ['?id','1'] 然后通过下标 [1] 得到 id     */let id = location.search.split('=')[1]axios.get("/selectById?id="+id).then(resp => {v.user = resp.data}).catch(error=>{console.log(error)})},methods: {}})
</script>
</body>
</html>

C UserController

    @GetMapping("selectById")public User selectById(int id){return mapper.selectById(id);}

M UserMapper

    @Select("select * from t_users where id = #{id}")User selectById(int id);

直接点击 修改 或者 姓名, 实现 回显功能

V 在 update.html 中增添 修改方法


        methods: {update(){/*这里是获取 表单数据({name1;value1,name2:value2...}) 存储到变量 data 中*/let data = new FormData(document.querySelector("form"))// 发送 post 请求,参数为上面的 dataaxios.post("/update",data).then(resp=>{alert(resp.data)// 跳转到主页 '/'location.href= '/'}).catch(e=>{console.log(e)})}}

C        UserController

    @RequestMapping("/update")public String update(User user){return mapper.updateById(user)==1?"修改成功":"修改失败";}

之前日期类用的是 LocalDate 会报错 见常见错误那块 2。

所以在这里对实体类的日期类型进行处理:

    @DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthDay;@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")public void setBirthDay(Date birthDay) {this.birthDay = birthDay;}

参考: mybatis的Date类型。 - 陆伟 - 博客园

至此实现修改功能

实现删除功能

V index.html

第 26 行,修改 后面添加 删除

            <td><!--这里利用 v-bind 进行 href 拼接,点击即跳到 /update 附带 当前行对象的 id--><a :href="'/update.html?id='+u.id">修改</a><!--javascript:void(0) 的意思是什么也不做,即取消 超链接a 的跳转功能--><a href="javascript:void(0)" @click="del(u.id)">删除</a></td>
methods: {del(id) {axios.get("/delete?id=" + id).then(r => {alert(r.data)location.href='/'}).catch(e => {console.log(e)})}
}

C UserController

    @RequestMapping("/delete")public String deleteById(int id){return mapper.deleteById(id)==1?"删除成功":"删除失败";}

至此删除功能已经实现,但是删除后采用跳转刷新不舒服。咱还是异步刷新一下,

把 created 阶段的方法抽取为 getAll():

        // created vue声明周期的(渲染之前阶段),此时调用 getAll() 去获取渲染需要的数据created(){this.getAll()},methods: {del(id) {axios.get("/delete?id=" + id).then(r => {alert(r.data)this.getAll()}).catch(e => {console.log(e)})},getAll(){// get方法访问 "/selectAll" 获取数据axios.get("/selectAll").then(  // .then 指的是访问成功之后resp => {   // resp 是响应数据// 这里将响应数据中的 data 赋值给 v(Vue) 中的 users// 注意不是 v.data.usersv.users = resp.data}).catch(error => {console.log(error)})   //.catch 指的是失败后,在控制台输出 error 信息}}

流畅多了~~~

实现增加数据功能

V index.html 第34行 </table > 的下面加一个 添加的表单, methods 中添加 insert()

    <!--放置一个控制插入表单显示的按钮--><input type="button" value="添加" @click="insert_vis=!insert_vis"><!--插入的表单通过 insert_vis 属性来控制是否显示 (v-show)--><form action="" v-show="insert_vis"><input type="text" name="name" placeholder="name"><input type="text" name="money" placeholder="money"><input type="date" name="birthDay" placeholder="birthDay"><input type="button" @click="insert()" value="提交"></form>
            insert() {let data = new FormData(document.querySelector("form"))axios.post("/insert", data).then(r => {alert(r.data);this.getAll()}).catch(e => console.log(e))}

C UserController

    @RequestMapping("/insert")public String insert(User user){return mapper.insert(user)==1?"插入成功":"插入失败";}

至此,最基本的增删改查就完成啦 ~~~

常见错误排查

1. Uncaught ReferenceError: Vue is not defined

vue.js 文件没有导入好, 先确认好已经导入,然后刷新 maven

2. Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors<EOL>Field error in object 'user' on field 'birthDay': rejected value [2022-03-02];

实体类 user 中的 birthDay 字段 拒绝赋值 '2022-03-02' 修改注意修改字段类型

mybatis 练习二(vue)相关推荐

  1. 大数据WEB阶段Mybatis(二)

    Mybatis(二) 零.目录 Mybatis接口形式 Mybatis整合Spring Mybatis的缓存机制 手动封装结果集 一对一表操作 一对多表操作 多对多表操作 SpringMVC . Sp ...

  2. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  3. 小白大学生学习MyBatis(二)

    小白大学生学习MyBatis(二) 1 . 接(一)解释测试代码 主要类的介绍 https://blog.csdn.net/hjs_75187712/article/details/118344894 ...

  4. 【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

    目录 一.什么是Vue 1.前端技术的发展(html.CSS.JavaScript) (1)JQuery:是对JavaScript进行了封装,使得操作DOM.事件处理.动画处理.Ajax交互变得非常简 ...

  5. Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之二 vue 环境演示

    前面说到如何整合spring  boot 和vue进行前后端独立并行开发,今天讲解一下如何构建vue到开发环境 1. npm install 执行npm install命令安装依赖,前提是安装npm ...

  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)...

    前言 今天正式开始写代码了,之前铺垫了很多了,包括 6 篇基础文章,一篇正式环境搭建,就是为了今天做准备,想温习的小伙伴可以再看看<Vue 基础入门+详细的环境搭建>,内容很多,这里就暂时 ...

  7. Vue的基础认知二---vue的双向绑定/vue获取DOM节点

    在这篇博文之前,我们已经开了一个vue的头了,需要的小伙伴可以点击这个链接:Vue的基础认知一-构建环境/v指令的使用,好了,我们继续来看我们接下来要看的内容. 一.vue的双向绑定 mvvm框架: ...

  8. [VUE系列二]vue官方文档总结和整理

    一.选项/数据 1. data 类型:Object | Function 组件的定义只接受Function 因为组件可能被用来创建多个实例.如果data仍然是一个纯粹的对象,则所有的实例将共享引用同一 ...

  9. ORM框架之Mybatis(二)数据库连接池、事务及动态SQL

    一.MybatisMybatis连接池与事务深入  1.1 Mybatis的连接池技术  在Mybatis中也有连接池技术,但是它采用的是自己的连接池技术.在Mybatis的SqlMapConfig. ...

  10. Mybatis(二)映射文件

    Mybatis映射文件 Mapper映射文件是Java实体类与数据库对象之间的桥梁,使用过程中一个Mapper文件对应一个数据库操作Dao接口 一.文件的约束 加载映射文件 <?xml vers ...

最新文章

  1. idea clone 华为云仓库
  2. 不能上网--只要四步判断出故障所在
  3. Spring中你不知道的注入方式
  4. 如何打造智能化的员工出行方式?阿里自研出行神器首次曝光
  5. 【PAT甲级 Date时间比较】1006 Sign In and Sign Out (20 分) Java版 5/5通过
  6. PHP中text里数字相加,excel文字数字如何混合求和
  7. 熵简技术谈 | 金融情绪分析真的有用吗?一起来看金融情绪分析的研究进展及应用实践
  8. 计数器代码php,php 的计数器程序代码示例
  9. 基于对数变换和非线性变换的图像增强(图像亮度调节)
  10. mysql 允许局域网连接,怎么设置Mysql允许局域网或外部连接的方法
  11. android 解析rss,在Android中解析RSS源
  12. Kettle Carte集群 在windows 上的部署与运行
  13. Qt5.9最简单的画五角星
  14. Linux定时任务 crontab(-l -e)、at、batch
  15. 解决Chrome浏览器打开新标签页,显示“无法访问此网站 连接已重置”的问题【在54.0 beta版上测试通过】
  16. vulnhub靶机练习-Os-hackNos-1
  17. 宜信实时数据平台介绍
  18. “达观杯”文本智能处理挑战赛
  19. web浏览器中的base64编码解码
  20. Google研究总监Peter Norvig:人工智能的另一面

热门文章

  1. 赶上时代步伐,我们也来做“菱形图片”
  2. 统计学中cv表示什么_cv是什么意思
  3. 模板文件, ruby erb 与 python format
  4. 51单片机数码管计数器
  5. 使用racoon setkey搭建IPsec环境
  6. Oracle DG主库失败Failover参考
  7. Python快速实现视频播放器
  8. ffmpeg播放器实现详解 - 快进快退控制
  9. 叶俊:别让“对抗”惯性摧毁你的幸福人生
  10. 黑苹果系统完全移植新硬盘