第三阶段-----day08-----Axios----Mybatis

1. Axios优化

1.1 回调地狱

1.1.1 概念

业务中经常遇到A的数据来源B,B的数据来源C.以此类推, 则形成了Ajax嵌套的结构. 如代码所示:

<script>
			axios.defaults.baseURL = "http://localhost:8080"
			
			/**
			 * 需求: 
			 * 	 1.发送第一个ajax请求之后得到的结果 
			 * 		当做第二个ajax的参数
			 */
			
			let user = {id:100, name:"tomcat猫", age: 20}
			axios.post("/axios/saveUser",user)
				 .then(function(promise){
					 console.log(promise.data)
					 let arg1  = promise.data
					 /* 第二个ajax*/
					 axios.post("/axios/xxxx",arg1)
						  .then(function(promise2){
							  console.log(promise2.data)
							  
							  let arg2 = promise2.data
							  axios.post("/axios/xxx2",arg2)
									.then(function(promise3){
										console.log(promise3.data)
									})
						  })
				 })
		script>
1.1.2 回调地狱问题说明

由于Ajax 不断的嵌套,导致代码耦合性高 不便于维护
解决办法:将Ajax请求由2行变成1行
第三阶段-----day08-----Axios----Mybatis_第1张图片

1.1.3 回调地狱优化

规则:

  1. async 控制同步异步 标识函数
  2. await 标识Ajax请求
<script>
			axios.defaults.baseURL = "http://localhost:8080"
			
			/**
			 * 1.定义一个函数
			 * 规则: 
			 * 		1. async 标识函数
			 * 		2. await 标识请求
			 * 		3. 2者必须同时出现
			 * 		4. 可以直接获取then中的回调对象promise
			 */
			async function saveUser(){
				let user = {id: 100,name:"春节已过!!!"}
				let promise = await axios.post("/axios/saveUser",user)
				console.log(promise.data)
			}
			
			/* 2.调用函数 */
			saveUser()
script>

1.1.4 箭头函数写法
/* 3.箭头函数写法
				1.去除function关键字
				2.参数与函数体之间使用 => 连接
				3.如果只有一个参数,则参数括号可以省略
				4.箭头函数使用一般用于回调函数
				5.如果使用function关键字 则使用this时会产生歧义
			 */
			let user2 = {id: 200,name:"箭头函数!!!"}
			axios.post("/axios/saveUser",user2)
				 .then(function(promise){
					console.log(promise.data)
				 })
			axios.post("/axios/saveUser",user2)
				 .then(	promise => {
					console.log(promise.data)
				 })	 

2. Mybatis

2.1 导入数据库

2.1.1 使用SqlYog连接数据库

第三阶段-----day08-----Axios----Mybatis_第2张图片
说明: Mysql数据库连接问题说明
问题1: 用户名密码保证正确!!!
问题2: 检查Mysql数据库的服务是否启动
第三阶段-----day08-----Axios----Mybatis_第3张图片

2.1.2 导入数据库

第三阶段-----day08-----Axios----Mybatis_第4张图片

2.2 JDBC连接数据库

```java
 //利用jdbc,完成新增的功能
    private static void method2() throws Exception{
        //1,注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2,获取数据库的连接
        //数据传输协议   数据库的ip 端口号 数据库名
        String url = "jdbc:mysql://localhost:3306/cgb2107";
        Connection c = DriverManager.getConnection(url,"root","root");
        //3,获取传输器
        Statement s = c.createStatement();
        //4,利用传输器执行  增删改的SQL
        //executeUpdate()用来执行增删改的SQL,只返回影响行数
        int rows = s.executeUpdate(
                "INSERT INTO emp(ename,job) VALUES('rose','副总')");
        //5,释放资源
        //r.close();//结果集
        s.close();//传输器
        c.close();//连接
    }

结论: 采用JDBC的方式去操作数据库,开发效率低, JDBC的运行效率是最高的

2.3 Mybatis

知识点: Mybatis在内部封装了JDBC代码,简化了用户的操作步骤
官网:https://mybatis.org/mybatis-3/zh/index.html
Mybatis介绍:
是一款优秀的 持久层框架 支持 自定义SQL 存储过程 以及 高级映射.
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2.4 Mybatis概念

  1. 持久化: 将内存中的数据 保存到磁盘中
  2. 持久层: 利用Mybatis操作代码Mapper/Dao,实现数据持久化
  3. 高级映射: 对象与数据表一 一映射
    对象中的属性与数据表中的字段名一 一映射
  4. 简化操作: 将JDBC代码进行简化,从对象角度考虑问题,实现数据操作(面向对象的方式操作数据库)
    总结: Mybatis 是持久层框架,内部整合了JDBC,以对象的方式操作数据库

2.5 Mybatis项目创建

2.5.1 创建新的项目Mybatis-demo1

第三阶段-----day08-----Axios----Mybatis_第5张图片

2.5.2 导入pom.xml文件
 <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>

        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.2.0version>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>
    dependencies>
2.5.3 lombok插件安装

作用:为pojo对象自动生成get/set构造/toString/equals等方法 以后无需程序员手动操作
1.插件安装
第三阶段-----day08-----Axios----Mybatis_第6张图片
第三阶段-----day08-----Axios----Mybatis_第7张图片
2.手动导入
网址: https://plugins.jetbrains.com/plugin/6317-lombok
第三阶段-----day08-----Axios----Mybatis_第8张图片
安装插件:
第三阶段-----day08-----Axios----Mybatis_第9张图片
从本地中选择lombok文件,安装完成之后,重启即可
第三阶段-----day08-----Axios----Mybatis_第10张图片

2.5.4 导入src文件

将测试类test中的文件删除即可. 格式如下
第三阶段-----day08-----Axios----Mybatis_第11张图片

2.6 lombok说明

2.6.1 使用步骤
  1. 在pom.xml文件中添加jar包
  2. 在IDEA中安装lombok的插件
  3. 在pojo中使用注解
2.6.2 lombok常用注解

常用注解:
第三阶段-----day08-----Axios----Mybatis_第12张图片
检查是否有效:
第三阶段-----day08-----Axios----Mybatis_第13张图片

2.6.3 链式加载

说明: 重写Set方法,要求用户的数据返回,返回User对象.
注解: @Accessors(chain = true) //开启链式加载

package com.jt.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data   //Getter, Setter, RequiredArgsConstructor,
        // ToString, EqualsAndHashCode, Value
@NoArgsConstructor  //无参构造
@AllArgsConstructor //全参构造
@Accessors(chain = true) //开启链式加载
public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;

    /*public User setId(Integer id){
        this.id = id;
        return this;
    }*/

    /*public void addUser(){
        User user = new User();
        user.setId(1000)
            .setName("tomcat")
            .setAge(18)
            .setSex("男");
    }*/
}

2.7 Mybatis 入门案例

2.7.1 导入jar包

        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.2.0version>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>
2.7.2 程序连接数据库

application.yml文件是SpringBoot的配置文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    #yml文件 0不解析 如果字母以0开头则引号包裹
    #password: "0123456"
    password: root
2.7.3 编辑UserMapper接口
@Mapper //1.将接口交给Mybatis管理,之后将mybatis交给Spring管理
        //2.动态代理机制 为接口创建代理对象 Map
        //3.接口和实现类,为什么只有接口没有实现类! 所有的Sql写到映射文件中
public interface UserMapper {

    //指定接口方法 查询demo_user的全部数据
    List findAll();

}

2.7.4 编辑UserMapper.xml映射文件




<mapper namespace="com.jt.mapper.UserMapper">
    
    <select id="findAll" resultType="com.jt.pojo.User">
        select * from demo_user
    select>


   
    
mapper>
2.7.5 Spring整合Mybatis
#3.配置Mybatis
mybatis:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #将所有的映射文件全部加载
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#4.打印Sql com.jt.mapper下的Sql日志
logging:
  level:
    com.jt.mapper: debug
2.7.6 Mybatis的测试

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/**
 * 要求:
 *      1.测试注解的包路径 必须在主启动类的同包及子包中
 *      2.该注解只能在测试方法中使用
 *      3.该注解的作用:启动时会启动spring容器(创建对象),
 *        可以从容器中注入任意对象!!!
 */
@SpringBootTest
public class TestMybatis {

    @Autowired  //按照类型进行的set注入
    private UserMapper userMapper;

    @Test
    public void testFindAll(){
        System.out.println(userMapper.getClass());
        List userList = userMapper.findAll();
        System.out.println(userList);
    }
}

你可能感兴趣的:(Java大数据学习,javascript,ajax,前端)