校内实习笔记

开发环境搭建

MySQL下载安装

成功如下:
image.png
再配置环境变量(和java环境变量配置一样)
image.png

IDEA下载安装

IDEA下载:https://www.jetbrains.com.cn/idea/download/#section=windows

java下载安装

需要下载1.8版本的,之前版本删掉
image.png

Maven下载安装

image.png
image.png
image.png

创建springboot应用程序

Maven模板快速创建项目

找到下面的选项快速创建
image.png
image.png
image.png

配置Maven的settings文件

关于cong文件夹中的settings.xml文件(D:\maven\conf):

  • maven用来构建项目
  • java需要外部的jar包,外网的中央仓库,下载本地仓库
  • setting.xml文件里面的盘符注意

    1. <localRepository>D:/lib_repo/repository</localRepository>
  • 用阿里的源站下载

    1. <mirrors>
    2. <!-- 这里使用的是阿里的远程maven镜像,目前国内大多数都使用它 -->
    3. <mirror>
    4. <id>alimaven</id>
    5. <name>aliyun maven</name>
    6. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    7. <mirrorOf>central</mirrorOf>
    8. </mirror>
    9. </mirrors>

    添加src/main/java目录

    image.png

    pom.xml添加项目依赖jar包

    打开pom.xml文件,改配置文件,添加依赖项,具体修改为如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <parent>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-parent</artifactId>
    9. <version>2.6.2</version>
    10. <relativePath/> <!-- lookup parent from repository -->
    11. </parent>
    12. <groupId>com.cn.shicun</groupId>
    13. <artifactId>emis</artifactId>
    14. <version>1.0-SNAPSHOT</version>
    15. <name>emis</name>
    16. <properties>
    17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    18. <maven.compiler.source>1.8</maven.compiler.source>
    19. <maven.compiler.target>1.8</maven.compiler.target>
    20. </properties>
    21. <dependencies>
    22. <dependency>
    23. <groupId>org.springframework.boot</groupId>
    24. <artifactId>spring-boot-starter-web</artifactId>
    25. </dependency>
    26. </dependencies>
    27. <build>
    28. </build>
    29. </project>

    点击右上角蓝色更新按钮
    image.png
    然后idea会自动下载这些jar包(Maven优势之一,就是会自动下载jar包)
    image.png
    下载成功如下所示:
    image.png

    运行springboot应用程序

    测试代码

    如下位置写入如下代码:
    image.png ```java package com.cn.shixun;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication public class App { public static void main( String[] args ) { SpringApplication.run(App.class); } }

  1. <a name="fzUO5"></a>
  2. ### 静态资源
  3. 然后在resources新建文件夹static,在其中写入index.html文件,然后运行App代码<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1484158/1645513209905-d82808a5-87e0-4d1d-a44f-7bd84bf14e48.png#clientId=ua382b8e2-dd80-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=431&id=u08e7d5a8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=517&originWidth=828&originalType=binary&ratio=1&rotation=0&showTitle=false&size=59584&status=done&style=none&taskId=u16b3d731-8c18-41ee-b120-f0cccc86bc7&title=&width=689.9999725818645)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1484158/1645513163237-543a369b-f027-4a23-a54b-16d5396317e7.png#clientId=ua382b8e2-dd80-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=294&id=u649359b3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=353&originWidth=889&originalType=binary&ratio=1&rotation=0&showTitle=false&size=32066&status=done&style=stroke&taskId=u5970fc7a-052a-4d40-a746-4f2f1d7b8c2&title=&width=740.8333038952627)
  4. <a name="R4FjW"></a>
  5. ### idea实时刷新前端代码设置
  6. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1484158/1645513254386-91ff5733-2ee8-4bba-a306-3e0ae0a82189.png#clientId=ua382b8e2-dd80-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=384&id=u857aff52&margin=%5Bobject%20Object%5D&name=image.png&originHeight=461&originWidth=972&originalType=binary&ratio=1&rotation=0&showTitle=false&size=54248&status=done&style=none&taskId=ua8bcb601-40c3-48e4-9450-cccb6008698&title=&width=809.9999678134931)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1484158/1645513246554-dda6481d-a454-497b-a90f-66700b3df752.png#clientId=ua382b8e2-dd80-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=455&id=u8bb3fd04&margin=%5Bobject%20Object%5D&name=image.png&originHeight=546&originWidth=974&originalType=binary&ratio=1&rotation=0&showTitle=false&size=52171&status=done&style=none&taskId=uac19504c-e5e4-4fc5-befa-e0a9c371b6c&title=&width=811.6666344139323)
  7. <a name="b0Yyp"></a>
  8. ## 前后端架构
  9. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1484158/1645602574923-49da96c6-764f-4141-af8b-b6d8fe8bc584.png#clientId=ud948cc8c-71cb-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=646&id=u65920461&margin=%5Bobject%20Object%5D&name=image.png&originHeight=775&originWidth=1009&originalType=binary&ratio=1&rotation=0&showTitle=false&size=235932&status=done&style=stroke&taskId=ua122433c-048f-4c3d-a78d-81f66aa200a&title=&width=840.8332999216199)
  10. <a name="UzUhw"></a>
  11. ## 前端
  12. <a name="LL54d"></a>
  13. ### jQuery的Ajax的使用
  14. jQuery其他相关笔记之前已经学过,不做赘述,此文只做Ajax相关的笔记<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1484158/1629125564200-d6272b27-ffcf-4f6d-b7f8-f1ccc7660b0c.png#crop=0&crop=0&crop=1&crop=1&height=315&id=pBacN&margin=%5Bobject%20Object%5D&name=image.png&originHeight=322&originWidth=623&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13078&status=done&style=stroke&title=&width=609.4973754882812)
  15. ```javascript
  16. // Ajax ===============================================================
  17. let ajaxDemo = function(){
  18. $.ajax({
  19. type : "post",
  20. url : "https://127.0.0.1:8080/test/demo2",
  21. data : {
  22. "name" : "李四",
  23. "age" : 14
  24. },
  25. // dataType : "json",
  26. success : function(data) {// 后端的返回值
  27. alert(data);
  28. }
  29. });
  30. }
  1. <input type="button" value="ajax点击按钮" onclick="ajaxDemo();">

image.png

原生JavaScript的Ajax使用

  1. function ajax (options) {
  2. // 默认值
  3. var defaults = {
  4. type: 'get',
  5. url: '',
  6. data: {},
  7. header: {
  8. 'Content-Type': 'application/x-www-form-urlencoded'
  9. },
  10. success: function () {},
  11. error: function () {}
  12. }
  13. // 使用用户传递的参数替换默认值参数
  14. Object.assign(defaults, options);
  15. // 创建ajax对象
  16. var xhr = new XMLHttpRequest();
  17. // 参数拼接变量
  18. var params = '';
  19. // 循环参数
  20. for (var attr in defaults.data) {
  21. // 参数拼接
  22. params += attr + '=' + defaults.data[attr] + '&';
  23. // 去掉参数中最后一个&
  24. params = params.substr(0, params.length-1)
  25. }
  26. // 如果请求方式为get
  27. if (defaults.type == 'get') {
  28. // 将参数拼接在url地址的后面
  29. defaults.url += '?' + params;
  30. }
  31. // 配置ajax请求
  32. xhr.open(defaults.type, defaults.url);
  33. // 如果请求方式为post
  34. if (defaults.type == 'post') {
  35. // 设置请求头
  36. xhr.setRequestHeader('Content-Type', defaults.header['Content-Type']);
  37. // 如果想服务器端传递的参数类型为json
  38. if (defaults.header['Content-Type'] == 'application/json') {
  39. // 将json对象转换为json字符串
  40. xhr.send(JSON.stringify(defaults.data))
  41. }else {
  42. // 发送请求
  43. xhr.send(params);
  44. }
  45. } else {
  46. xhr.send();
  47. }
  48. // 请求加载完成
  49. xhr.onload = function () {
  50. // 获取服务器端返回数据的类型
  51. var contentType = xhr.getResponseHeader('content-type');
  52. // 获取服务器端返回的响应数据
  53. var responseText = xhr.responseText;
  54. // 如果服务器端返回的数据是json数据类型
  55. if (contentType.includes('application/json')) {
  56. // 将json字符串转换为json对象
  57. responseText = JSON.parse(responseText);
  58. }
  59. // 如果请求成功
  60. if (xhr.status == 200) {
  61. // 调用成功回调函数, 并且将服务器端返回的结果传递给成功回调函数
  62. defaults.success(responseText, xhr);
  63. } else {
  64. // 调用失败回调函数并且将xhr对象传递给回调函数
  65. defaults.error(responseText, xhr);
  66. }
  67. }
  68. // 当网络中断时
  69. xhr.onerror = function () {
  70. // 调用失败回调函数并且将xhr对象传递给回调函数
  71. defaults.error(xhr);
  72. }
  73. }

AdminLTE框架

文档:https://adminlte.io/
下载adminlte及其依赖放到静态文件夹
image.png
使用jsDelivr外链来构建
https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css
https://cdn.jsdelivr.net/npm/admin-lte@3.2/plugins/fontawesome-free/css/all.min.css

构建管理类系统的静态页模板

利用AdminLTE UI模板搭建出项目所需的目的页面(在static里面写出想要的各种效果)
管理类系统的页面类型大概有以下几类:

  1. 登录页(大多数的管理类系统都没有注册页,需要通过用户管理模块增加用户)。

http://127.0.0.1:8080/pages/login.html

  1. 欢迎页,登录成功后进入的首页。

http://127.0.0.1:8080/pages/index.html

  1. 列表页,展示数据集合的表格,一般带分页和查询功能,展示的每行数据的最后会有可以点击的“修改”和“删除”功能。
  2. 新增/修改页,一个form表单,同一个的功能模块的新增/修改页的表单元素是一致的,只是修改页需要回填数据。
  3. 其他特殊页,例如在线答题页、数据统计页、文件上传页等等,这些在管理类系统中的占比很小。

    后端:Springboot 学习

    记录一下框架的API使用

    参考资料


vscode运行springboot项目


SpringBoot编写接口


@SpringBootApplication

主要方法是通过调用run来委托Spring Boot的SpringApplication类。
SpringApplication引导我们的应用程序,从Spring开始,然后启动自动配置的Tomcat Web服务器。
image.png
我们需要将Example.class作为参数传递给run方法,以告诉SpringApplication哪个是主要的Spring组件。
还会传递args数组以公开任何命令行参数。
springboot的启动类是有作用范围的

@Controller

所创建的类是一个web @Controller,所以Spring在处理传入的Web请求时会考虑它

@RequestMapping(“test”)

@RequestMapping注释提供“路由”信息。它告诉Spring任何带有/test路径的HTTP请求都应该映射到所写的test方法。

@responseBody

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据回格式是text/json(或者是XML)数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

@RestController

类上写上注解 @RestController,那么此Controller返回格式就都是text/json

后端:数据库学习

表关系

image.png

权限控制:
RBAC,role based access control,基于角色的访问控制
用户,角色,功能(项目的粒度到二级菜单即可)

user,userrole,role,role_menu,menu
用户
角色组,角色则,角色组_角色

数据表的初始化

连接本地数据库
image.png
按照教程初始化各个数据库


构建实体类—-如果手动构建,需要单独给每个表生成Getter Setter,所以使用下面讲的mybits逆向工程构建。

MyBatis逆向工程

添加数据库账户及授权

参考:navicat创建用户以及设置权限
image.png
image.png
账号密码都是:mybatis
创建成功后如下:
image.png

pom.xml添加依赖

  1. <dependency>
  2. <groupId>org.mybatis.spring.boot</groupId>
  3. <artifactId>mybatis-spring-boot-starter</artifactId>
  4. <version>2.2.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <scope>runtime</scope>
  10. <!--
  11. 1、如果你的数据库是mysql8,这段<version>5.1.32</version>不用管
  12. 2、如果你的数据库是mysql5.x,放开<version>5.1.32</version>这段注释
  13. -->
  14. <version>5.1.32</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.mybatis.generator</groupId>
  18. <artifactId>mybatis-generator-core</artifactId>
  19. <version>1.4.0</version>
  20. </dependency>

编写逆向工程的配置文件generatorConfig.xml和Generator.java

运行Generator类的main方法生成实体类、mapper接口和mapper的xml文件
image.png
每次生成逆向工程之前,要把之前生成的文件全部删除

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.73</version>
  5. </dependency>

报错

SpringBoot启动报错Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured

  1. Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
  2. 2022-02-27 20:30:12.439 ERROR 12672 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
  3. ***************************
  4. APPLICATION FAILED TO START
  5. ***************************
  6. Description:
  7. Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
  8. Reason: Failed to determine a suitable driver class
  9. Action:
  10. Consider the following:
  11. If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
  12. If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
  13. Process finished with exit code 1

启动类添加如下:

  1. @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

参考:https://www.panziye.com/java/1873.html

Consider defining a bean of type ‘com.cn.shixun.mapper.UserMapper’ in your configuration.

image.png
参考:https://blog.csdn.net/zzldm/article/details/116534419

nio-8080-exec-1

属于正常情况

  1. . ____ _ __ _ _
  2. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
  3. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  4. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  5. ' |____| .__|_| |_|_| |_\__, | / / / /
  6. =========|_|==============|___/=/_/_/_/
  7. :: Spring Boot :: (v2.6.2)
  8. 2022-02-27 20:46:14.796 INFO 9608 --- [ main] com.App : Starting App using Java 1.8.0_151 on DESKTOP-QTVR7IE with PID 9608 (D:\projects\emis\target\classes started by wztli in D:\projects\emis)
  9. 2022-02-27 20:46:14.799 INFO 9608 --- [ main] com.App : No active profile set, falling back to default profiles: default
  10. 2022-02-27 20:46:16.451 INFO 9608 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
  11. 2022-02-27 20:46:16.464 INFO 9608 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
  12. 2022-02-27 20:46:16.464 INFO 9608 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.56]
  13. 2022-02-27 20:46:16.582 INFO 9608 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
  14. 2022-02-27 20:46:16.582 INFO 9608 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1721 ms
  15. 2022-02-27 20:46:16.996 INFO 9608 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
  16. 2022-02-27 20:46:17.010 INFO 9608 --- [ main] com.App : Started App in 2.708 seconds (JVM running for 3.193)
  17. 2022-02-27 20:46:17.075 INFO 9608 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
  18. 2022-02-27 20:46:17.075 INFO 9608 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
  19. 2022-02-27 20:46:17.076 INFO 9608 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms