热门搜索 :
考研考公
您的当前位置:首页正文

06、vue-admin

来源:东饰资讯网

也有想过后台用node,但目前自己对node基本没有过了解。而且,技术发展方向还是比较喜欢偏Java后台的,所以这里用了spring-boot

新建 spring-boot 应用

image.png

其实 mysql 、mybatis等一些依赖,在新建的spring-boot应用的时候就可以选择,如图就是我在新建应用时选择的三个依赖

image.png

代码结构如下:

image.png

最终的pom.xml 文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         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>com.hand.sxy</groupId>
    <artifactId>vue-admin</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>vue-admin</name>
    <description>Spring Boot Project For Admin</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
</project>

application.properties 文件内容

server.port = 8081application.properties 文件内容
spring.datasource.url = jdbc:mysql://10.132.241.120:3306/vue?characterEncoding=utf8&autoReconnect=true&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.jdbc.Driver

mybatis.mapper-locations = classpath:**/*.xml

 = DEBUG

启动应用

其实开发模式和之前并没有什么区别,这种默认的规范比较好用:controller->service->mapper。在这个应用中也是一样的,为了测通流程,这里新建了一个表,user 表

CREATE TABLE `user` (
  `USER_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `USERNAME` varchar(200) NOT NULL COMMENT '用户名',
  `PASSWORD` varchar(200) NOT NULL COMMENT '密码',
  `PHONE` varchar(100) DEFAULT NULL COMMENT '电话号码',
  PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

要测试的很简单,提供一个接口,接口中查询了user表的记录,如果可以查到记录,就说明走通了整个流程。
LoginController.java

package com.hand.sxy.system.controller;

import com.hand.sxy.account.dto.User;
import com.hand.sxy.system.service.ILoginService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * @author spilledyear
 * @date 2018/4/21 12:58
 */
@RestController
public class LoginController {
    private Logger logger = LoggerFactory.getLogger(LoginController.class);

    @Autowired
    private ILoginService loginService;

    @RequestMapping("/login")
    public String login(HttpServletRequest request, User user) {
        loginService.login(user);
        logger.info("登录成功");
        return "success";
    }

}

LoginServiceImpl

package com.hand.sxy.system.service.impl;

import com.hand.sxy.account.dto.User;
import com.hand.sxy.account.service.IUserSrvice;
import com.hand.sxy.system.service.ILoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author spilledyear
 * @date 2018/4/21 13:02
 */
@Service
public class LoginServiceImpl implements ILoginService {

    @Autowired
    private IUserSrvice userSrvice;

    @Override
    public boolean login(User user) {
        List<User> userList = userSrvice.query(user);
        return (userList != null && !userList.isEmpty());
    }
}

浏览器上访问结果如下

image.png

后台日志

image.png

至此,整个流程测试完成。

问题

在开发中,其实遇到了几个问题,这里总结一下。

  • 在项目启动的时候,报错信息如下
***************************
APPLICATION FAILED TO START
***************************

Description:

Field userMapper in com.hand.sxy.account.service.impl.UserServiceImpl required a bean of type 'com.hand.sxy.account.mapper.UserMapper' that could not be found.


Action:

Consider defining a bean of type 'com.hand.sxy.account.mapper.UserMapper' in your configuration.

提示找不到 UserMapper 这个been。额,我一开始是给 UserMapper 加了个@Service注解,发现还是报一样的错。解决方法有了两种:
1、在 UserMapper文件上添加 @Mapper注解

package com.hand.sxy.account.mapper;

import com.hand.sxy.account.dto.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author spilledyear
 * @date 2018/4/21 13:33
 */
@Mapper
public interface UserMapper {
    /**
     * 查询用户
     *
     * @param user
     * @return
     */
    List<User> query(User user);
}

2、在 VueAdminApplication 文件上添加 @MapperScan 注解

package com.hand.sxy;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 如果不加 MapperScan 这个注解,会提示 xxxMapper 不是一个有效Been
 * @author spilledyear
 */
@SpringBootApplication
@MapperScan("com.hand.sxy.*.mapper")
public class VueAdminApplication {

    public static void main(String[] args) {
        SpringApplication.run(VueAdminApplication.class, args);
    }
}
  • 访问数据库的时候,后台有警告信息,警告信息如下
Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

网上很多地方提示加上 useSSL=false 就可以了, 但是如果只是加上这个的话, 会报错如下:

 Communications link failure
The last packet successfully received from the server was 250 milliseconds ago.  The last packet sent successfully to the server was 242 milliseconds ago.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_101]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_101]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_101]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_101]
    xxx
Caused by:  java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.8.0_101]
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) ~[na:1.8.0_101]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) ~[na:1.8.0_101]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) ~[na:1.8.0_101]
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) ~[na:1.8.0_101]
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) ~[na:1.8.0_101]
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) ~[na:1.8.0_101]
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) ~[na:1.8.0_101]
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) ~[na:1.8.0_101]
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_101]
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ~[na:1.8.0_101]
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) ~[na:1.8.0_101]
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:186) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    ... 105 common frames omitted
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:302) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:922) ~[na:1.8.0_101]
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) ~[na:1.8.0_101]
    ... 113 common frames omitted
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:153) ~[na:1.8.0_101]
    at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79) ~[na:1.8.0_101]
    at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292) ~[na:1.8.0_101]
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:295) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    ... 115 common frames omitted   

解决方法是 在 url 后面加上 autoReconnect=true&useSSL=false

spring.datasource.url = jdbc:mysql://10.132.241.120:3306/vue?characterEncoding=utf8&autoReconnect=true&useSSL=false

源码地址

…or create a new repository on the command line echo "# vue-admin" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin 
git push -u origin master


…or push an existing repository from the command line
git remote add origin 
git push -u origin master
Top