1.ORM

  • 概述
    • 对象关系映射(Object Relational Mapping),一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
    • 中继数据
  • 对象数据库 -一种以对象形式表示信息的数据库
    • 声明式编程访问对象
    • 访问数据可以更快,表的联合常常是不必要的
  • O:面向对象领域的Object(JavaBean对象)
  • R:关系数据库领域的Relational(表的结构)
  • M:映射Mapping(XML的配置文件)
  • 实现:
    • 让实体类和数据库表进行一一对应关系
    • 先让实体类和数据库表对应
    • 再让实体类属性和表里面字段对应
  • 不需要直接操作数据库表,直接操作 表对应的实体类对象

    2.Mybais-plus

    2.1概述

  • Mybais-plus是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

2.2特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

2.3快速开始实例

  • 配置

    1. <dependency>
    2. <groupId>com.baomidou</groupId>
    3. <artifactId>mybatis-plus-boot-starter</artifactId>
    4. <version>3.4.0</version>
    5. </dependency>
  • 注解

    • @TableName :表名注解
    • @TableId :主键注解
      • IdType
    • @TableField :字段注解
      • FieldStrategy
      • FieldFill
    • @Version :乐观锁注解、标记 @Version在字段上
    • @EnumValue :同枚举类注解
    • @TableLogic : 表字段逻辑处理注解(逻辑删除)
    • @SqlParser: 租户注解,支持method上以及mapper接口上
    • @KeySequence
      • 描述:序列主键策略 oracle
      • 属性:value、resultMap

3.3API

  • 查询 ```java /**

    • 根据主键查询 */ @Test public void select01(){

      User user = userMapper.selectById(21); System.out.println(user); int count = userMapper.selectCount(null); System.out.println(“总记录数:”+count); }

      /**

    • 需求: 查询年龄=18用户 同时要求性别为女
    • 条件构造器的作用 用来拼接where条件
    • sql: xxxx where age>18 and age <2000 and sex=”女”
    • 逻辑运算符: = eq, > gt , < lt , >= ge , <= le
    • */ @Test public void select02(){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.gt(“age”, 18)
      1. .lt("age", 2000)
      2. .or()
      3. .eq("sex", "女");
      List userList = userMapper.selectList(queryWrapper); System.out.println(userList); }
  1. /**
  2. * 查询ID= 1 ,3 ,5 ,6的数据
  3. * 单表查询: or in
  4. * sql: select * from user where id in (1,3,5,6)
  5. */
  6. @Test
  7. public void select03(){
  8. Integer[] ids = {1,3,5,7}; //模拟用户参数
  9. List<Integer> idList = Arrays.asList(ids);
  10. List<User> userList = userMapper.selectBatchIds(idList);
  11. System.out.println(userList);
  12. //如果需要获取表中的第一列主键信息
  13. List list = userMapper.selectObjs(null);
  14. System.out.println(list);
  15. }
  1. - 添加
  2. ```java
  3. /**
  4. * 完成用户数据入库
  5. */
  6. @Test
  7. public void testInsert(){
  8. User user = new User();
  9. user.setName("名媛")
  10. .setAge(80).setSex("女");
  11. userMapper.insert(user);
  12. }
  • 修改 ```java @Test public void testUpdate(){

    1. //根据对象中不为null的属性 当做set条件
    2. /*User user = new User();
    3. user.setId(65).setName("北京大爷");
    4. userMapper.updateById(user);*/
    5. //1.参数1: 需要修改的数据 参数2:修改的where条件
    6. User user = new User();
    7. user.setName("北京大爷");
    8. UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    9. updateWrapper.eq("name", "名媛");
    10. userMapper.update(user,updateWrapper);

    }

  1. - 删除
  2. ```java
  3. /**
  4. * 删除操作:
  5. * 1.根据ID删除用户信息 65
  6. * 2.删除name="名媛"的数据
  7. */
  8. @Test
  9. public void testDelete(){
  10. userMapper.deleteById(65); //根据主键删除
  11. //userMapper.deleteBatchIds("id集合信息");
  12. //根据除主键之外的数据删除信息
  13. QueryWrapper queryWrapper = new QueryWrapper();
  14. queryWrapper.eq("name", "名媛");
  15. userMapper.delete(queryWrapper);
  16. }

3.创建web项目

  • 创建maven项目
  • 编辑POM.xml文件 ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0

    1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    4.0.0 com.jt springboot_demo3 1.0-SNAPSHOT

    war org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE 1.8 true org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine com.baomidou mybatis-plus-boot-starter 3.2.0 javax.servlet javax.servlet-api javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper org.springframework.boot spring-boot-maven-plugin

  1. - 编辑JSP页面
  2. ```html
  3. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <title>您好Springboot</title>
  9. </head>
  10. <body>
  11. <table border="1px" width="65%" align="center">
  12. <tr>
  13. <td colspan="6" align="center"><h3>学生信息</h3></td>
  14. </tr>
  15. <tr>
  16. <th>编号</th>
  17. <th>姓名</th>
  18. <th>年龄</th>
  19. <th>性别</th>
  20. <th></th>
  21. </tr>
  22. <c:forEach items="${userList}" var="u">
  23. <tr>
  24. <th>${u.id}</th>
  25. <th>${u.name}</th>
  26. <th>${u.age}</th>
  27. <th>${u.sex}</th>
  28. </tr>
  29. </c:forEach>
  30. </table>
  31. </body>
  32. </html>
  • 编辑POJO

    1. @TableName
    2. @Data
    3. @Accessors(chain = true)
    4. public class User {
    5. @TableId(type = IdType.AUTO)
    6. private Integer id; //主键自增
    7. private String name;
    8. private Integer age;
    9. private String sex;
    10. }
  • 编辑YML配置文件 ```yaml server: port: 8090 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: root

    mvc: #引入mvn配置 view:

    1. prefix: /WEB-INF/ # /默认代表根目录 src/main/webapp
    2. suffix: .jsp

mybatis-plus:

别名包定义 Mapper的resultType中只需要写类名 之后自动拼接即可

type-aliases-package: com.jt.pojo

加载指定的xml映射文件

mapper-locations: classpath:/mybatis/mappers/*.xml

开启驼峰映射

configuration: map-underscore-to-camel-case: true

实现sql打印

logging: level: com.jt.mapper: debug

  1. - 编辑UserController
  2. ```yaml
  3. package com.jt.controller;
  4. import com.jt.pojo.User;
  5. import com.jt.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.ui.Model;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import java.util.List;
  11. @Controller
  12. public class UserController {
  13. @Autowired
  14. private UserService userService;
  15. /**
  16. * 跳转页面: userList.jsp
  17. * url:localhost:8090/findAll
  18. * 步骤:
  19. * 1.pojo 2.mapper 3.service 4.controller
  20. * 5.YML配置前后缀
  21. * 6.jar包问题 3个包
  22. * 7.导入页面 userList.jsp
  23. * */
  24. @RequestMapping("/findAll")
  25. public String findAll(Model model){
  26. //1.查询用户列表信息
  27. List<User> userList = userService.findAll();
  28. //2.将数据保存到request域中 之后返回给用户 视图渲染过程
  29. model.addAttribute("userList",userList);
  30. return "userList";
  31. }
  32. }
  • 编辑UserService ```yaml 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{

  1. @Autowired
  2. private UserMapper userMapper;
  3. @Override
  4. public List<User> findAll() {
  5. return userMapper.selectList(null);
  6. }

} ```

  • 页面效果展现
  • 03-京淘项目 - 图1

    4. AJAX使用

  • 特点

    • 异步调用
  • 原理说明
    • 1.用户将请求发给AJAX引擎进行处理.之后等待引擎返回数据.
    • 2.ajax引擎接收到用户的请求之后.,代替用户访问后端服务器,
    • 3.后端服务器接收请求之后,执行业务处理. 并且将返回值返回.
    • 4.ajax引擎收到返回值结果之后,要在第一时间通知给用户. 利用回调函数将数据传给客户端.ajax调用成功
  • 利用AJAx显示数据

    5.总结

    本节重点扩展了Mybatis-Plus功能介绍,将其更好的应用到项目中,以及Ajax在项目中的应用。