从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

这篇具有很好参考价值的文章主要介绍了从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

项目介绍

 vx小程序简介

VX开发工具介绍

列表页开发

list的编写 

 列表页前后端联调

 信息编辑页开发

operation的编写

区域信息编辑页的联调


项目介绍

从0搭建后端的Springboot+mybatis框架

实现后端的业务功能

实现本地微信小程序的前端开发

前端与后端的调控

技术储备要求

1.基础的java知识

2.基础的前端开发知识(简单了解HTML,JS等)

3.Spring,Mybatis基础知识(不会也没关系)


 vx小程序简介

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

是一种连接用户服务的方式,小程序是vx内嵌的微小程序。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 根目录有一个app.json和project.json,是用来做全职配置的

 从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

每生成一个页面,就在pages上写一个路由 。

工具配置 project.config.json(vx会自动,透明的完成)

页面配置 page.json

xxx.json就是针对xxx页面下的风格、配色等相关的配置

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 WXML模板 充当HTML的角色

具体不同参照vx开发者文档

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

WXSS模板 充当CSS的角色 

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

JS交互文件

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调


VX开发工具介绍

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

集成了公众号网页调试和小程序调试两种开发模式

打开我们的开发工具:

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 vx的开发者工具主要由模拟器,编辑器和调试器

模拟器就类似我们的页面UI,我们对页面做的任何改变都能看到我们小程序的样子。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 编辑器就是我们能够在里面写我们的wxml,wxss,还有js等,从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 调试器就类似我们网页Chrome里面的开发者工具,我们能够在控制台里看见报错的信息。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调


3.创建新的小程序

创建新的小程序,指定项目的目录

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 项目一旦启动,就会初始化两个界面出来

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调


列表页开发

1.列表展示

2.删除功能

最终效果:

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

首先我们要掌握一些主键的功能:

 view与div一样是个视图容器从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 scroll-view可滚动视图区从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 text文本

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 navigator类似html的a标签(超链接)

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 button 按钮

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 block区块 可以在里面写逻辑


项目准备:

index.js:

//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  //事件处理函数
  bindViewTap: function() {
    wx.navigateTo({//导航到list页面下
      url: '../list/list'
    })
  },
  onLoad: function () {
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse){
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          //
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },
  getUserInfo: function(e) {
    console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})

index.wxml:

<!--index.wxml-->
<view class="container">
  <view class="userinfo">
    <button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
    <block wx:else>
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
    </block>
  </view>
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
</view>

index.wxss:

/**index.wxss**/
.userinfo {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.userinfo-avatar {
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}

.userinfo-nickname {
  color: #aaa;
}

.usermotto {
  margin-top: 200px;
}

list的编写 

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

list.wxml:

<!-- pages/list/list.wxml -->

<view class="container">
  <view class="widget">
    <text class="column">ID</text>
    <text class="column">区域名</text>
    <text class="column">优先级</text>
    <text class="link-column">操作</text>
  </view>
   <!-- 滚动 -->
  <scroll-view scroll-y="true">
    <view>
    <!-- 循环,list任意命名 -->
      <block wx:for="{{list}}">
        <view class="widget">
          <view>
          <!-- 取每一个的元素 -->
            <text class="column">{{item.areaId}}</text>
            <text class="column">{{item.areaName}}</text>
            <text class="column">{{item.priority}}</text>
            <view class="link-column">
            <!-- 操作是固定的 url:是链接到我们需要的界面区域信息表单 -->
            <!--传递了参数,areaId-->
              <navigator class="link" url="../operation/operation?areaId={{item.areaId}}">编辑</navigator>|
              <!-- 点击删除,会启动事件deleteArea 它会读取控件里的areaId 还有 areaName ,删除之后也要删除界面里的一条信息-->
              <text class="link" bindtap="deleteArea" data-areaid="{{item.areaId}}" data-areaname="{{item.areaName}}" data-index="{{index}}">删除</text>
            </view>
          </view>
        </view>
      </block>
    </view>
  </scroll-view>
  <!-- tap与点击相关 -->
  <button type="primary" bindtap="addArea">添加区域信息</button>
</view>

 list.wxss:

/* pages/list/list.wxss */

.widget {
  position: relative;
  margin-top: 5rpx;
  margin-bottom: 5rpx;
  padding-top: 10rpx;
  padding-bottom: 10rpx;
  padding-left: 40rpx;
  padding-right: 40rpx;
  border: #ddd 1px solid;
}

.container {
  height: 100%;
  display: table;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
  padding-top: 10rpx;
  padding-bottom: 10rpx;
  text-align: center;
}

.column {
  width: 4rem;
  display: table-cell;
}

.link-column {
  width: 6rem;
  display: table-cell;
}

.link {
  color: blue;
  display: inline-table;
}

list.js

// pages/list/list.js
Page({

  /**
   * 页面的初始数据,wxml想读取的list,就是从data中获取
   */
  data: {
    list: []
  },

  /**
   * 生命周期函数--监听页面加载
   * -当页面加载时,就会触发里面的方法
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   * 当页面显示时,就会触发里面的方法
   */
  onShow: function () {
    var that = this;
    //第一个this,表示的是整个页面
    // 访问后台,获取区域信息
    wx.request({
      //url去访问后台的方法,获取它的areaList的值,127.0.0.1,端口8080,生效的是demo/superadmin/listarea
      url: "http://127.0.0.1:8080/demo/superadmin/listarea",
      data: {},
      //访问方法
      method: 'GET',
      //访问成功之后需要做的事情
      success: function (res) {
        var list = res.data.areaList;
        if (list == null) {
          //弹出获取失败
          var toastText = '获取数据失败' + res.data.errMsg;
          wx.showToast({
            title: toastText,
            icon: '',
            // 出错窗口,弹出两秒钟
            duration: 2000
          });
        } else {
          //此时this变化,所以要用最开始的this(that)才能够设置上data里面的list
          that.setData({
            list: list
          });
        }
      }
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  addArea: function () {
    //跳转界面,但是没有传参
    wx.navigateTo({
      url: '../operation/operation',
    })
  },
  deleteArea: function (e) {    
    //保存窗口
    var that = this;
    //判断是否进行操作
    wx.showModal({
      title: '提示',
      //区域名的获取通过,这里传入的参数是e,e代表的是控键text
      content: '确定要删除[' + e.target.dataset.areaname + ']吗?',
      //用户点击确认就能访问后台
      success: function (sm) {
        if (sm.confirm) {
          // 用户点击了确定 可以调用删除方法了
          wx.request({
            url: "http://127.0.0.1:8080/demo/superadmin/removearea",
            //传入areaId
            data: { "areaId": e.target.dataset.areaid },
            method: 'GET',
           
            success: function (res) {
              //一旦返回获取result,获取success的字段
              var result = res.data.success
              var toastText = "删除成功!";
              if (result != true) {
                toastText = "删除失败" + res.data.errMsg;
              } else{
                //删除成功也需要将list原来的数据删除,index表示数组的第几行,删除1个
                that.data.list.splice(e.target.dataset.index, 1)
                //渲染数据
                //删除成功之后,重新setData
                that.setData({
                  list: that.data.list
                });
              }
              //不管删除是否成功,都会弹出我们之前提前设定好的toastText
              wx.showToast({
                title: toastText,
                icon: '',
                //弹出两秒钟
                duration: 2000
              });
            }
          })
        }
      }
    })
  }
})

onLoad与onShow的区别,即页面的加载与显示的区别:

当我们从operation返回list界面时,不会触发onLoad,只会触发onShow,通过触发列表访问方法,来更新此时我们页面最新的信息。所以我们要在onShow里面编写我们的方法。

勾选上:不校验合法域名等,此时我们才能使url有效,因为vx不会默认端口访问 

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调


 列表页前后端联调

选择list.js,打开调试器,进行断点调试

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

第一个断点设置在deleteArea方法内

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 我们还要在后台进行调试,即removerarea,这里设置一个断点,注意用debug的形式启动从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

启动好之后,回到我们的页面,选择删除东苑,它就会进入到我们deleteArea里设置好的断点,

我们可以查看this里面就是页面句柄。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 点击F10进入下一步,这里它就会弹出窗口,提示你是否删除东苑。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

第二步将断点打在97行,就是if里面,如果用户操作点击了确定,点击F8跳入我们的下一个断点,

如果没有跳断点,就执行完所有的。它通过判断confirm,我们这里是true,所以就会wx.request去访问我们的后台。

接着我们要在在success方法里设置断点,因为它这时候会访问我们的后台,断点就会进入我们的后台方法中,执行完之后,才会返回来。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

这里进入到我们idea的断点中,我们在idea中做调试,此时areaId传进来了,为1.

我们直接点击step over(F8)

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

我们可以看见modelMap, key为success,value为true,表示删除操作成功。我们完成了验证。接着我们跳出后台,就能发现我们的断点来到了103行,这里的success为true。

点击F10下一步删除成功,我们调用setData更新List,之后showToast,它将删除成功的弹窗弹出。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

这里就完成了我们区域列表的开发。


 信息编辑页开发

区域信息添加

区域信息更新

operation的编写

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 operation.wxml:

<!--pages/operation.wxml-->
<view class="container">
<!-- 属性绑定formSubmit方法,bindreset绑定框架默认自带的formReset,会自动清空里面的内容,包括区域名 -->
<!-- formSubmit需要我们自己去编写 -->
  <form bindsubmit="formSubmit" bindreset="formReset">
    <view class="row">
      <text>区域名:</text>
      <input type="text" name="areaName" placeholder="请输入区域名" value="{{areaName}}" />
    </view>
    <view class="row">
      <text>优先级:</text>
      <input type="number" name="priority" placeholder="数值越大越靠前" value="{{priority}}" />
    </view>
    <view class="row">
    
      <button type="primary" form-type="submit">提交</button>
      <!-- 点击,框架自带的formReset就会清空 -->
      <button type="primary" form-type="reset">清空</button>
    </view>

  </form>
</view>

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 operation.js:

// pages/operation.js
Page({

  /**
   * 页面的初始数据
   * 需要用到的全局变量放在这里
   */
  data: {
    // list里面我们会通过点击添加或者点击编辑进入到这个界面,我们通过有没有携带areaId参数来判断。
    areaId: undefined,
    areaName: '',
    priority: '',
    // 访问我们后台区域和修改区域的url
    addUrl: "http://127.0.0.1:8080/demo/superadmin/addarea",
    modifyUrl: "http://127.0.0.1:8080/demo/superadmin/modifyarea"

  },
  /**
   * 生命周期函数--监听页面加载
   */
  //这里用onLoad是因为这个界面没有返回按钮,每次打开它都是重新加载,当然用onShow也可以
  onLoad: function (options) {
    var that = this;
    // 页面初始化 options为页面跳转所带来的参数
    this.setData({
      areaId: options.areaId
    });
    if (options.areaId == undefined) {
      return;
    }
    wx.request({
      url: "http://127.0.0.1:8080/demo/superadmin/getareabyid",
      data: { "areaId": options.areaId },
      method: 'GET',
      success: function (res) {
        var area = res.data.area;
        if (area == undefined) {
          var toastText = '获取数据失败' + res.data.errMsg;
          wx.showToast({
            title: toastText,
            icon: '',
            duration: 2000
          });
        } else {
          that.setData({
            areaName: area.areaName,
            priority: area.priority
          });
        }
      }
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  //参数e表示表单
  formSubmit: function (e) {
    var that = this;
    //这个formData的json数据就是表单里的areaName,priorty的值
    var formData = e.detail.value;
    var url = that.data.addUrl;
    if (that.data.areaId != undefined) {
      //不为undefined,就是编辑的
      formData.areaId = that.data.areaId;
      url = that.data.modifyUrl;
    }
    //进入后台
    wx.request({
      url: url,
      //通过JSON.stringify将json转化为字符串的形式
      //formData如果为添加,仅有areaName和priority,如果是更改,还多了一个areaId
      data: JSON.stringify(formData),
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      //添加或者更改成功就会返回一给success
      success: function (res) {
        var result = res.data.success
        var toastText = "操作成功!";
        if (result != true) {
          toastText = "操作失败" + res.data.errMsg;
        }
        wx.showToast({
          title: toastText,
          icon: '',
          duration: 2000
        });
        //这里一旦提交成功,它就会返回我们的list页面
        if (that.data.areaId == undefined) {
          wx.redirectTo({
            url: '../list/list',
          })
        }
      }
    })
  }
})

operation.wxss:

/* pages/operation/operation.wxss */
.container{
    padding: 1rem;
    font-size: 0.9rem;
    line-height: 1.5rem;
}
.row{
    display: flex;
    align-items: center;
    margin-bottom: 0.8rem;
}
.row text{
    flex-grow: 1;
    text-align: right;
}
.row input{
    font-size: 0.7rem;
    flex-grow: 3;
    border: 1px solid #0099CC;
    display: inline-block;
    border-radius: 0.3rem;
    box-shadow: 0 0 0.15rem #aaa;
    padding: 0.3rem;
}
.row button{
    padding: 0 2rem;
    margin: 3rem 1rem;
}

区域信息编辑页的联调

设置断点

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 后台也要设置想应断点

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 开始调试:

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 获取到了area信息从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 f8获取,发现数据被填充进来

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 修改优先级为3,

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

 后台接收到了。最后f8,发现更新成功。

从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调文章来源地址https://www.toymoban.com/news/detail-497651.html

到了这里,关于从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序制作教程:从零开始搭建企业小程序

    在如今的数字化时代,企业介绍小程序成为了企业展示与推广的重要工具。通过企业介绍小程序,企业可以向用户展示自己的品牌形象、产品服务以及企业文化等内容,进而提高用户对企业的认知度和信任度。本文将介绍如何从零开始搭建一个企业介绍小程序。 首先,进入乔

    2024年02月12日
    浏览(44)
  • 【微信小程序】从零开始搭建微信小程序项目

    建议开发者在准备开发/学习小程序前都应该首先前往微信公众平台注册一个小程序账号。开发者可移步微信公众平台 https://mp.weixin.qq.com ,点击【账号分类】下的【小程序】,在小程序注册页面点击【前往注册】按照要求注册小程序账号。 详细流程请查看官方文档:https://

    2024年02月03日
    浏览(48)
  • 【React 入门实战篇】从零开始搭建与理解React应用-二、前置准备与环境搭建

    二、前置准备与环境搭建 2.1 安装Node.js与npm 在开始React开发之前,我们需要确保Node.js和npm(Node Package Manager)已经安装在我们的计算机上。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,而npm则是Node.js的包管理器,用于安装和管理JavaScript库和工具。 安装Node.js: 访问Node.js官

    2024年04月10日
    浏览(81)
  • 从零开始搭建Springboot开发环境(Java8+Git+Maven+MySQL+Idea)

    所谓万事开头难,对于初学Java和Springboot框架的小伙伴往往会花不少时间在开发环境搭建上面。究其原因其实还是不熟悉,作为在IT界摸爬滚打数年的老司机,对于各种开发环境搭建已经了然于胸,自己当年也是这么过来的。 今天我就毕其功于一役,解放大家的时间,让凡人

    2024年04月17日
    浏览(81)
  • 从零开始开发企培源码:搭建企业内训小程序的全面指南

    在当今竞争激烈的企业世界中,不断提升员工的技能和知识已经成为了保持竞争力的必要条件之一。因此,越来越多的企业开始重视内部培训,以确保员工具备所需的技能和知识。为了更有效地进行内部培训,许多企业都在考虑开发自己的企业内训小程序。本文将为您提供一

    2024年02月07日
    浏览(40)
  • 【React 入门实战篇】从零开始搭建与理解React应用-三、React核心概念与基础语法

    三、React核心概念与基础语法 3.1 JSX语法详解 JSX是React中的一个语法糖,它允许开发者在JavaScript代码中编写类似HTML的标记。这种语法使得开发者能够以一种声明式的方式描述界面,提高了代码的可读性和可维护性。 JSX的语法规则: 元素创建 :使用尖括号 来创建元素,就像在

    2024年04月08日
    浏览(46)
  • 【Elasticsearch】从零开始搭建ES8集群并且集成到Springboot,更好的服务电商类等需要全文索引的项目(一)

    最近公司的电商项目越来越庞大,功能需求点也越来越多,各种C端对查询和检索的要求也越来越高,是时候在项目中引入全文检索了。 ElasticSearch 是一个基于 Lucene 的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,并且是基于Java 开发的,我记得很久之前ES还不

    2024年02月15日
    浏览(47)
  • VisualStudio 快速开始使用 NanUI(从0搭建到运行程序仅需10分钟)

    快速开始使用 NanUI 通过VisualStudio2022 快速跑通NanUIDemo Gitee 林选臣 / NanUI Gitee中附带了中英文文档,里面写的很详细了,进阶的可以去看看 这是一个开放源代码的 .NET / .NET Core 窗体应用程序(WinForms)界面组件。您可以使用 HTML5 / CSS3 / Javascript 等前端技术来构建您的应用程序界

    2023年04月08日
    浏览(47)
  • 从零开始学Spring Boot系列-集成mybatis

    在Spring Boot的应用开发中,MyBatis是一个非常流行的持久层框架,它支持定制化SQL、存储过程以及高级映射。在本篇文章中,我们将学习如何在Spring Boot项目中集成MyBatis,以便通过MyBatis进行数据库操作。 首先,我们需要在项目中添加MyBatis的依赖。在Spring Boot中,我们通常会使

    2024年03月10日
    浏览(125)
  • SpringBoot+MyBatis搭建迷你微信小程序

    课程链接:https://www.imooc.com/learn/945 view类似于HTML中的div标签是最基础的UI组件 https://blog.csdn.net/wushibo750/article/details/113802928 https://developers.weixin.qq.com/miniprogram/dev/component/view.html https://blog.csdn.net/wushibo750/article/details/120614878 页面跳转链接 onLoad()和onShow()的区别 页面先加载onLoad 后

    2024年02月16日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包