共计 8886 个字符,预计需要花费 23 分钟才能阅读完成。
1.MybatisPlus
1.1 MP 介绍
MyBatis-Plus(简称 MP)是一个 MyBatis 的加强工具,在 MyBatis 的根底上只做加强不做扭转,为简化开发、提高效率而生。
1.2 个性
# 简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的加强工具,在 MyBatis 的根底上只做加强不做扭转,为简化开发、提高效率而生。
愿景
咱们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
# 个性
- 无侵入:只做加强不做扭转,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会主动注入根本 CURD,性能根本无损耗,间接面向对象操作
- 弱小的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过大量配置即可实现单表大部分 CRUD 操作,更有弱小的条件结构器,满足各类应用需要
- 反对 Lambda 模式调用:通过 Lambda 表达式,不便的编写各类查问条件,无需再放心字段写错
- 反对主键主动生成:反对多达 4 种主键策略(内含分布式惟一 ID 生成器 – Sequence),可自在配置,完满解决主键问题
- 反对 ActiveRecord 模式:反对 ActiveRecord 模式调用,实体类只需继承 Model 类即可进行弱小的 CRUD 操作
- 反对自定义全局通用操作:反对全局通用办法注入(Write once, use anywhere)
- 内置代码生成器:采纳代码或者 Maven 插件可疾速生成 Mapper、Model、Service、Controller 层代码,反对模板引擎,更有超多自定义配置等您来应用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关怀具体操作,配置好插件之后,写分页等同于一般 List 查问
- 分页插件反对多种数据库:反对 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能剖析插件:可输入 Sql 语句以及其执行工夫,倡议开发测试时启用该性能,能疾速揪出慢查问
- 内置全局拦挡插件:提供全表 delete、update 操作智能剖析阻断,也可自定义拦挡规定,预防误操作
1.3 ORM 思维
1.3.1 业务场景
一个开发了 30 年的程序员, 业务相当纯熟, 然而为了实现业务也须要写特地简略的 SQL 语句
需要: 是否无效的进步开发的效率
1.3.2 ORM 介绍
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型零碎的数据之间的转换。从成果上说,它其实是创立了一个可在编程语言里应用的“虚构对象数据库”。现在已有很多收费和付费的 ORM 产品,而有些程序员更偏向于创立本人的 ORM 工具.
常识铺垫:
SQL 语句面向过程的语言. sql:select * from user;ResultSet后果集对象~~~User 对象 须要本人手动的封装后果, 开发的效率低.
ORM 形式, 以对象的办法操作数据库,能够实现后果集与对象的主动的映射, 不须要本人手写.
1.4 MybatisPlus 工作原理阐明
ORM 外围常识:
1. 对象与那张表要实现映射 能够自定义注解进行标识
2. 对象的属性与表中的字段如何一一对应 起名时应该写成一样的, 利用特定的注解指定
3. 工具办法如何简化 MP 动静的生成 CRUD 操作的接口, 只有其余的 Mapper 接口继承即可
4. 对象如何转化为 SQL 语句 利用对象中的属性及属性的值动静拼接 SQL, 之后交给 Mybatis JDBC 去执行
1.5 MP 具体实现
1.5.1 导入 jar 包
阐明
<!--spring 整合 mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
1.5.2 编辑 pojo 对象
1.5.3 实现接口继承
配置文件
1.5.4 编辑 serviceimpl
1.5.5 SQL 语句打印
1.6 MP API 介绍
批改数据
增加数据
删除数据
2.web 我的项目创立
2.1 创立 web 我的项目
2.1.1 创立 maven 我的项目
增加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.jt</groupId>
<artifactId>springboot_demo3</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 指定我的项目打包形式 -->
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--springBoot 整合 JSP 增加依赖 -->
<!--servlet 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!--jstl 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- 使 jsp 页面失效 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--spring 整合 mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1. 编辑 JSP 文件
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> 您好 Springboot</title>
</head>
<body>
<table border="1px" width="65%" align="center">
<tr>
<td colspan="6" align="center"><h3> 学生信息 </h3></td>
</tr>
<tr>
<th> 编号 </th>
<th> 姓名 </th>
<th> 年龄 </th>
<th> 性别 </th>
<th></th>
</tr>
<c:forEach items="${userList}" var="u">
<tr>
<th>${u.id}</th>
<th>${u.name}</th>
<th>${u.age}</th>
<th>${u.sex}</th>
</tr>
</c:forEach>
</table>
</body>
</html>
增加 js 文件
2. 编辑 YML 文件
server:
port: 80
servlet:
context-path: /
spring:
datasource:
#驱动版本问题 高版本须要增加 cj 关键字 个别能够省略
#driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: tarena
mvc:
view:
suffix: .jsp
prefix: /WEB-INF/
mybatis-plus:
#别名包定义 Mapper 的 resultType 中只须要写类名 之后主动拼接
type-aliases-package: com.jt.pojo
#加载指定的 XML 映射文件
mapper-locations: classpath:/mtbatis/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
#实现 SQL 打印
logging:
level:
com.jt.mapper: debug
3. 编辑启动类
package com.jt;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.annotation.MapperScans;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.jt.mapper")
public class SpringBootRun {public static void main(String[] args) {SpringApplication.run(SpringBootRun.class,args);
}
}
4. 编辑 pojo
package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
@TableName
@Data
@Accessors(chain = true)
public class User {@TableId(type = IdType.AUTO)
private Integer id;// 主键
private String name;
private Integer age;
private String sex;
}
5. 编辑 mapper
package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
@TableName
@Data
@Accessors(chain = true)
public class User {@TableId(type = IdType.AUTO)
private Integer id;// 主键
private String name;
private Integer age;
private String sex;
}
6. 编辑 service
package com.jt.service;
import com.jt.pojo.User;
import java.util.List;
public interface UserService {List<User> findAll();
}
7. 编辑 serviceimpl
package com.jt.service;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {return userMapper.selectList(null);
}
}
8. 编辑 controller
package com.jt.controller;
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
/*
跳转页面:userList.jsp
url:localhost:8080/findAll
步骤:1.pojo 2.mapper 3.service 4.controller 5.YML 配置前后缀
6.jar 包问题 3 个包
7. 导入页面 userLIst.jsp
*/
@RequestMapping("findAll")
public String findAll(Model model){
//1、查问用户列表信息
List<User> userList=userService.findAll();
//2、将数据保留到 request 对象中, 之后返回给用户 视图渲染过程
model.addAttribute("userList", userList);
return "userList";
}
}
2.1.2 解决 404
2.1.3 数据出现
2.2 异步形式调用
2.2.1 AJAX 原理
特点: 部分刷新: 异步调用(加载)
调用原理阐明:
1. 用户将申请发给 AJAX 引擎进行解决, 之后期待引擎返回数据
2.ajax 引擎接管到用户的申请之后, 代替用户拜访后端服务器
3. 后端服务器接管申请之后, 执行业务解决, 并且将返回值返回
4.ajax 引擎收到返回值后果之后, 要在第一工夫告诉给用户, 利用回调函数将数据传给客户端,ajax 调用胜利
2.3 ajax 获取用户信息
2.3.1 筹备 ajax 页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> 您好 Springboot</title>
<!-- 1、导入函数类库 -->
<script src="../js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
// 让 JS 页面加载实现, 之后执行 JS
$(function(){
/*
需要: 利用 ajax 形式动静获取 user 数据信息
申请网址:/findAjax
知识点:
返回类型: 能够依据数据主动匹配类型, 所以能够不写
1.$.get(url 地址, 传递的参数, 回调函数, 返回值类型)
2.$.post(...) 3.$.getJSON(...) */ $.get("/findAjax",function(result){
//1、能够应用 js 中的 for 循环
// for(let i=0;i<result.length;i++){//} // 获取主键
// for(let index in result){// console.log(index); // } // 获取值
for(let user of result){
let id=user.id;
let name=user.name;
let age=user.age;
let sex=user.sex;
let tr=
"<tr align='center'><td>"+id+"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>"
$("#tab1").append(tr);
}
})
})
</script>
</head>
<body>
<table id="tab1" border="1px" width="65%" align="center">
<tr>
<td colspan="6" align="center"><h3> 学生信息 </h3></td>
</tr>
<tr>
<th> 编号 </th>
<th> 姓名 </th>
<th> 年龄 </th>
<th> 性别 </th>
<th></th>
</tr>
</table>
</body>
</html>