业务中经常遇到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>
由于Ajax 不断的嵌套,导致代码耦合性高 不便于维护
解决办法:将Ajax请求由2行变成1行
规则:
<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>
/* 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)
})
说明: Mysql数据库连接问题说明
问题1: 用户名密码保证正确!!!
问题2: 检查Mysql数据库的服务是否启动
```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的运行效率是最高的
知识点: Mybatis在内部封装了JDBC代码,简化了用户的操作步骤
官网:https://mybatis.org/mybatis-3/zh/index.html
Mybatis介绍:
是一款优秀的 持久层框架 支持 自定义SQL 存储过程 以及 高级映射.
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
<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>
作用:为pojo对象自动生成get/set构造/toString/equals等方法 以后无需程序员手动操作
1.插件安装
2.手动导入
网址: https://plugins.jetbrains.com/plugin/6317-lombok
安装插件:
从本地中选择lombok文件,安装完成之后,重启即可
说明: 重写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("男");
}*/
}
<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>
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
@Mapper //1.将接口交给Mybatis管理,之后将mybatis交给Spring管理
//2.动态代理机制 为接口创建代理对象 Map
//3.接口和实现类,为什么只有接口没有实现类! 所有的Sql写到映射文件中
public interface UserMapper {
//指定接口方法 查询demo_user的全部数据
List findAll();
}
<mapper namespace="com.jt.mapper.UserMapper">
<select id="findAll" resultType="com.jt.pojo.User">
select * from demo_user
select>
mapper>
#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
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);
}
}