1.MyBatis

官网: Mybatis https://mybatis.org/mybatis-3/

1.1概念

  1. MyBatis是一款优秀的持久层框架,用于简化JDBC开发
    • 负责将数据保存到数据库的那一层代码
    • JavaEE三层架构:表现层、业务层、持久层
  2. 框架
    • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
    • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。
  3. JDBC缺点
    • 硬编码 配置文件
      • 注册驱动、获取链接 写了一堆链接字符串
      • SQL语句 也写了一堆代码字符串
    • 操作繁琐 自动完成
      • 手动设置参数
      • 手动封装结果集

1.2MyBatis 快速入门

步骤

  1. 创建user表,添加数据
  2. 创建模块,导入坐标
  3. 编写MyBatis核心配置文件 –> 替换链接信息,解决硬编码问题
  4. 编写SQL映射文件 –>统一管理Sql语句,解决硬编码问题
  5. 编码
    1. 定义POJO类
    2. 加载核心配置文件,获取SqlSessionFactory对象
    3. 获取SqlSession对象,执行SQL语句
    4. 释放资源

代码

pom.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!--mybatis 依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>

<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>

<!--junit 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>

<!-- 添加slf4j日志api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!-- 添加logback-classic依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 添加logback-core依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<typeAliases>
目标对象的包
<package name="com.itheima.pojo"/>
</typeAliases>

<!--
environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>

<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件-->
类路径
<!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->

<!--Mapper代理方式-->
<package name="com.itheima.mapper"/>

</mappers>

Demo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* Mybatis 快速入门代码

2、3两点就把之前的jdbc给替换了
*/
public class MyBatisDemo {

public static void main(String[] args) throws IOException {

//1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
//从官网复制过来
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//2. 获取SqlSession对象,用它来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 执行sql 参数是命名空间的名称 test是上一级的名称 selectAll才是想要的查询名称,一级级通过,方便查询
List<User> users = sqlSession.selectList("test.selectAll");
System.out.println(users);
//4. 释放资源
sqlSession.close();
}
}

1.3Mapper

目的

  • 解决原生方式中硬编码
  • 简化后期执行SQL

1.3.1Mapper代理开发规则

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
    • 在资源文件夹中新建包时,把 . 用 / 代替 这样在文件中才会体现分层结构
  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名
  3. 在Mapper|接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
  4. 编码
    1. 通过SqlSession的getMapper方法获取Mapper接口的代理对象
    2. 调用对应方法完成sql的执行

==细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载==

在核心的配置文件xml中

1
2
3
4
5
6
7
8
<mappers>
<!--加载sql映射文件-->
<!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->

<!--Mapper代理方式 包扫描方式 指定包的路径 -->
<package name="com.itheima.mapper"/>

</mappers>

1.4Mybatis.xml核心配置为文件

要安装官方文件的顺序 进行配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!--
environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>

<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>

2.JavaSpring

2.1js简介

JavaScript是一门跨平台、==面向对象的脚本语言==,来控制网页行为的,它能使网页可交互

W3C标准:网页主要由三部分组成

  • 结构:HTML
  • 表现: CSS
  • 行为: JavaScript

JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似。


2.2JavaScript 引入方式

==引入方式==

  1. 内部脚本 :将JS代码定义在HTML页面中

    • 在HTML文档中可以在任意地方,放置任意数量的
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24

      后台代码:

      ```java
      @WebServlet("/axiosServlet")
      public class AxiosServlet extends HttpServlet {
      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      System.out.println("get...");

      //1. 接收请求参数
      String username = request.getParameter("username");
      System.out.println(username);

      //2. 响应数据
      response.getWriter().write("hello Axios~");
      }

      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      System.out.println("post...");
      this.doGet(request, response);
      }
      }

Axios请求方式别名

1
2
3
4
5
6
7
8
9
10
11
12
13
<script src="js/axios-0.18.0.js"></script>

<script>
//1. get
axios.get("http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan").then(function (resp) {
alert(resp.data);
})

//2. post 方便书写 ,但是不清楚哪一个参数对应的意思
axios.post("http://localhost:8080/ajax-demo/axiosServlet","username=zhangsan").then(function (resp) {
alert(resp.data);
})
</script>

JSON

  • 概念:JavaScript Object Notation。JavaScript对象表示法
  • 由于其语法简单,层次结构鲜明,易于阅读, 多用于作为数据载体,在网络中进行数据传输
  • 存储和交换数据的语法。轻量级的数据交换格式

JSON基础语法

在 JSON 中,值必须是以下数据类型之一:

  • 字符串
  • 数字
  • 对象(JSON 对象)
  • 数组 (在方括号中)
  • 布尔(true或false)
  • null
  1. 定义格式:

    1
    2
    3
    4
    5
    6
    var 变量名 = {
    "key1": value1,
    "key2": value2,
    "key3": value3,
    ...
    }
  2. 示例:

    1
    var jsonStr = '{"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}';
  3. 获取数据

  4. 变量名 . key

    json . name

1
2
3
var json = {"name": "zhangsan", "age": 23, "addr": ["北京", "上海", "西安"]};

alert(json.name);

JSON数据和Java对象转换 ==重点==

  • JSON 的常规用途是同 web 服务器进行数据传输。

    在从 web 服务器接收数据时,数据永远是字符串。

    通过 JSON.parse() 解析数据,这些数据会成为 JavaScript 对象。

  • 请求数据:JSON字符串转为Java对象

  • 响应数据:Java对象转换为JSON对象

  • Fastjson是阿里巴巴提供的一个Java语言编写的==高性能功能完善==的JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。

使用:

  1. 导入坐标
  2. Java转换JSON对象
  3. JSON转换Java对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class FastJsonDemo {

public static void main(String[] args) {
//1. 将Java对象转为JSON字符串
User user = new User();
user.setId(1);
user.setUsername("zhangsan");
user.setPassword("123");

String jsonString = JSON.toJSONString(user);
System.out.println(jsonString);//{"id":1,"password":"123","username":"zhangsan"}

//2. 将JSON字符串转为Java对象
User u = JSON.parseObject("{\"id\":1,\"password\":\"123\",\"username\":\"zhangsan\"}", User.class);
System.out.println(u);

}
}

输出结果:

{"id":1,"password":"123","username":"zhangsan"}
User{id=1, username='zhangsan', password='123'}

12.Vue

12.1 概述:

  • Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写
  • 基于MVVM思想,实现数据的双向绑定,将编程的关注点放在数据上

image-20220324220035827

12.2Vue快速入门

  1. 引入Vue.js文件

    1
    <script src="js/vue.js"></script>
  2. 在js代码区域,创建vue核心对象,进行数据绑定

    1
    2
    3
    4
    5
    6
    7
    new Vue({
    el:"#app",
    data(){
    return {
    username:""
    }
    }

    创建 Vue 对象时,需要传递一个 js 对象,而该对象中需要如下属性:

    • el : 用来指定哪儿些标签受 Vue 管理。 该属性取值 #app 中的 app 需要是受管理的标签的id属性值
    • data :用来定义数据模型
    • methods :用来定义函数。这个我们在后面就会用到
  3. 编写视图 下面的id 的值需要和上面的 el 的值 相同,才能进行联动

    1
    2
    3
    4
    5
    6
    7
    <div id="app">

    <input v-model="username">
    <!--插值表达式-->
    {{username}}

    </div>

12.3Vue常用指令

  • 指令:HTML 标签上带有 v- 前缀的特殊属性,不同指令具有不同含义。
指令 作用
v-bind 为HTML标签绑定属性值,如设置 href , css样式等
v-model 在表单元素上创建双向数据绑定
v-on 为HTML标签绑定事件
v-if 条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
v-else-if
v-show 根据条件展示某元素,区别在于切换的是display属性的值
v-for 列表渲染,遍历容器的元素或者对象的属性
  1. v-bind

    < a v-bind:href="url">百度一下

  2. v-model ==该指令可以给表单项标签绑定模型数据。这样就能实现双向绑定效果==

  3. v-on

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <div id="app">
    <!--<input type="button" value="一个按钮" v-on:click="show()"><br>-->
    <input type="button" value="一个按钮" @click="show()">

    </div>

    <script src="js/vue.js"></script>
    <script>

    //1. 创建Vue核心对象
    new Vue({
    el:"#app",
    data(){
    return {
    username:"",
    url:"https://www.baidu.com"
    }
    },
    methods:{
    show(){
    alert("我被点了...");
    }
    }
    });
    </script>
    </body>
    </html>
  4. v-if、v- if -else

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <div id="app">
    <!--当下面js中的count值等于v-if的count值时就会把对应的div显示出来,因为只用使用了v-model才会把对应的div显示出来-->
    <div v-if="count == 3">div1</div>
    <div v-else-if="count == 4">div2</div>
    <div v-else>div3</div>
    <hr>
    <div v-show="count == 3">div v-show</div>
    <br>
    <input v-model="count">
    </div>
    <script src="js/vue.js"></script>
    <script>
    //1. 创建Vue核心对象
    new Vue({
    el:"#app",
    data(){
    return {
    count:3
    }
    },
    methods:{
    show(){
    alert("我被点了...");
    }
    }
    });
    </script>
    </body>
    </html>
  5. v -for

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <div id="app">
    <div v-for="addr in addrs">
    {{addr}} <br>
    </div>
    <hr>
    <!--添加索引值 i ,i是从0开始的。里面的addrs是下面的数组名 addr则是相当于变量名-->
    <div v-for="(addr,i) in addrs">
    {{i+1}}--{{addr}} <br>
    </div>
    </div>

    <script src="js/vue.js"></script>
    <script>

    //1. 创建Vue核心对象
    new Vue({
    el:"#app",
    data(){
    return {
    addrs:["北京","上海","西安"]
    }
    },
    });
    </script>
    </body>
    </html>

12.4Vue生命周期

  • 生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法。
image-20220324223825341
  • ==mounted:==挂载完成,Vue初始化成功,HTML页面渲染成功。而以后我们会在该方法中==发送异步请求,加载数据。==

  • ```js
    new Vue({
    el:"#app",
    //在开发中这里是创建异步请求的代码
    mounted(){
    alert("加载完成...")
    }
    });

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # Element

    - 是一套基于Vue的网站组件库,用于快速构建网页
    - 组件:组成网页的部件,如:超链接、按钮、图片、表格等等

    ## 快速入门

    1. 映入Element的css、js文件和Vue.js

    ```html
    <script src="js/vue.js"></script>
    <script src="element-ui/lib/index.js"></script>
    <link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
  1. 创建Vue核心对象

    1
    2
    3
    4
    5
    <script>
    new Vue({
    el:"#app"
    })
    </script>

Element布局

在官网上查看 复制粘贴。

  1. Layout布局:通过基础的24分栏,迅速简便的创建布局。一行分为24栏
  2. Container布局容器:用于布局的容器组件,方便快速搭建页面的基本结构。如下图就是布局容器效果。

Element常用组件

官网查看 https://element.eleme.cn/#/zh-CN/component/installation

13.代理模式

  • 设计模式
    1. 装饰模式
    2. 代理模式
      • 动态代理

13.1概念

  1. 真实对象:被代理的对象
  2. 代理对象:
  3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的

13.2实现方式

  1. 静态代理:有一个类文件描述代理模式
  2. 动态代理:在内存中形成代理类
    • 实现步骤:
      1. 代理对象和真实对象实现相同的接口 代理类和目标类必须实现 同一个接口或者继承相同的父类
      2. 代理对象=Proxy.newProxyInstance();
      3. 使用代理对象调用方法
      4. 增强方法
    • 增强方式
      1. 增强参数列表
      2. 增强返回值类型
      3. 增强方法体执行逻辑