2020-02-11

庚子年 戊寅月 甲申日

描述

mybatis复习,微信项目搭建

技术总结:https://blog.csdn.net/qq_40674583/article/details/104272075

Ps:一开始写的没有保存,软件蹦了,写的全没了,难受。。。。。。。简单补一下

mybatis

Maven

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>z_13_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory> src/main/java </directory>
                <includes>
                    <include> **/*.properties </include>
                    <include> **/*.xml </include>
                </includes>
                <filtering> false </filtering>
            </resource>
        </resources>
    </build>

</project>

maven依赖和xml过滤

xml文件配置

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 根标签 -->
<configuration>
<properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-110?useUnicode=true&amp;characterEncoding=utf-8&amp;allowMultiQueries=true"/>
    <property name="username" value="root"/>
        <property name="password" value="123456"/>
   </properties>

   <!-- 环境,可以配置多个,default:指定采用哪个环境 -->
   <environments default="test">
      <!-- id:唯一标识 -->
      <environment id="test">
         <!-- 事务管理器,JDBC类型的事务管理器 -->
         <transactionManager type="JDBC" />
         <!-- 数据源,池类型的数据源 -->
         <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-110" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
         </dataSource>
      </environment>
      <environment id="development">
         <!-- 事务管理器,JDBC类型的事务管理器 -->
         <transactionManager type="JDBC" />
         <!-- 数据源,池类型的数据源 -->
         <dataSource type="POOLED">
            <property name="driver" value="${driver}" /> <!-- 配置了properties,所以可以直接引用 -->
            <property name="url" value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
         </dataSource>
      </environment>
   </environments>
  </configuration>

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper:根标签,namespace:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="MyMapper">
   <!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
      resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表
    -->
   <select id="selectUser" resultType="com.zpc.mybatis.User">
      select * from tb_user where id = #{id}
   </select>
</mapper>

核心配置文件映射文件 ------- 记得映射文件要在配置文件中注册

微信登录

思路

流程图

核心代理

##### 路由守卫

router.beforeEach((to,from,next) => {
  if(to.path == '/author' && store.state.wx.openid != ''){
    // 用户使用后退返回到授权页,则默认回到首页
    next('/wx/md/center')
    return false
  }
  if(store.state.wx.openid === '' && to.path != '/author'){
    // 之前有获取过授权
    Cookies.set('url', to.fullPath);
    next('/author')
    return false
  }
  next()
});

##### author.vue

<template>
    <div>
        <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1580749534450&di=df7d5cccb9df655492e4ff11983d4289&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn16%2F133%2Fw640h1093%2F20180721%2F8c39-hfqtahi3500949.jpg" width="100%" height="100%"/>
    </div>
</template>

<script>
    import * as wx from '@/module/wxjw/api/wx'
    import {login} from "../module/wxjw/api/http";
    export default {
        data(){
            return{

            }
        },
        methods:{
            //第一次登录,没有re_token的情况,或者过期了
            wxLogin(){
                let code = wx.getCode();
                if (!code) {
                    wx.auth();
                } else {
                    //code存在,换取token
                    wx.getToken(code).then((res) => {
                        this.okLogin(res);
                    })
                }
            },
            // token有效性检测  更新用户信息
            isToken(token,openid){
                wx.isToken(token,openid).then(res => {
                    if(res.errcode === 0){
                        // 有效
                        wx.getUser(token,openid).then(res => {
                            console.log('登录成功:'+ res.openid);
                            this.$store.commit('setUser', res);
                        })
                    }else{
                        //无效
                        console.log('token失效:  '+token);
                        this.updataToken();
                    }
                });
            },
            //更新token
            updataToken(){
                //以前是否授权
                if(this.$cookies.isKey('wxuser')){
                    // re_token是否有效
                    let wxuser = this.$cookies.get('wxuser');
                    wx.getTokenByRetoken(wxuser.re_token).then( res => {
                        if(res.errcode == 40029||res.errcode == 40001||res.errcode == 40030){
                            // 无效,获取token失败,查询登录
                            this.wxLogin();
                        }else{
                            this.okLogin(res);
                        }
                    })
                }else{
                    // 第一次进入,重新授权
                    console.log('第一次进入')
                    this.wxLogin();
                }
            },
            // 本地化
            okLogin(res){
                //存cookie
                this.$cookies.remove('wxuser')
                this.$cookies.set('wxuser',{
                    re_token : res.refresh_token,
                    openid : res.openid
                });
                //更新token
                this.$store.commit('setToken', res.access_token);
                //更新用户信息
                this.isToken(res.access_token,res.openid);
                //登录完成,存入openID
                this.$store.commit('setOpenid', res.openid);
                // 转跳url
                let url = this.$cookies.get('url');
               if(this.$cookies.get('url')=='/'){
                   url = '/wx/md/center'
               }
                window.location.href = '/#'+ url;
                this.$cookies.remove('url');
            }
        },
        created(){
            this.updataToken();
        }
    }
</script>
<style scoped>

</style>

原文地址:https://www.cnblogs.com/chang1024/p/12297442.html

时间: 2024-10-07 12:56:23

2020-02-11的相关文章

学习进度2020.02.01

学习进度2020.02.01 https://www.runoob.com/w3cnote/android-tutorial-eclipse-adt-sdk-app.html 学习使用Eclipse + ADT + SDK开发Android APP 熟悉了该平台的环境,并简单使用此平台开发了一个简单的APP 原文地址:https://www.cnblogs.com/liurx/p/12250722.html

学习进度2020.02.02

学习进度2020.02.02 View与ViewGroup的概念 学习地址: https://www.runoob.com/w3cnote/android-tutorial-view-viewgroup-intro.html 在Android APP中,所有的用户界面元素都是由View和ViewGroup的对象构成的.View是绘制在屏幕上的用户能与之交互的一个对象.而ViewGroup则是一个用于存放其他View(和ViewGroup)对象的布局容器! Android为我们提供了一个View和

学习进度2020.02.03

学习进度2020.02.03 https://www.runoob.com/w3cnote/android-tutorial-linearlayout.html https://www.runoob.com/w3cnote/android-tutorial-relativelayout.html 今天学习下Android中的布局,Android中有六大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) FrameLa

毕设进度2020.02.04

毕设进度2020.02.04 今天基本上将所有自己现在想到的数据库的表建立完成了. 用户(基本不算) 团组织信息表: 图书表: 原文地址:https://www.cnblogs.com/liurx/p/12261863.html

毕设进度2020.02.05

毕设进度2020.02.05 继续建立数据库和基础代码: 新闻数据库 政策数据库 原文地址:https://www.cnblogs.com/liurx/p/12267248.html

毕设进度2020.02.07

毕设进度2020.02.07 原文地址:https://www.cnblogs.com/liurx/p/12275066.html

学习进度2020.02.10

学习进度2020.02.10 今天跟着做新增的数据筛选,学习地址:https://blog.csdn.net/qq_42768234/article/details/104162180 import re import time import json import datetime import requests import pymysql import pandas as pd class VirusSupervise(object): def __init__(self): self.u

Daily Recording 2020/01/11 (关键词:ARP,计算机网络基础)

Daily Recording Wang yuan can January 11, 2020 @雨人网安 日报 日报开始 今天是周六,持续六天的高强度学习迎来了“伟大的休息日”,今天的学习内容相对轻松,刚开始Bai在讲计算机网络基础的时候希望通过小视频的方式让我们来了解,后面越看越跑题了,原子弹制造.高铁运作流程.飞机票出票流程......,就这样,我们在bilibili看一上午有趣的小视频.下午Bai带着我们阅读了一个关于“内网渗透”的博文,讲的是博主如何渗透进蹭自己家wifi的人的电脑,后面

2016/02/11 grid3D.js

;(function(window){ 'use strict'; function grid3D(el,options){ this.el = el; this.options = extend({},this.options); extend(this.options,options); this._init(); } grid3D.prototype.options = {}; grid3D.prototype._init = function(){ this.gridWrap = thi

02.11

一年前的今天发现了引力波,填补了相对论的最后一块空白 十七年前的今天有了我 越长大越对自己不满意 lyy下午签了thu 有点戏剧性 也是意料之中 写征文的晚上 GN