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快速开始实例
配置
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</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)
List.lt("age", 2000)
.or()
.eq("sex", "女");
userList = userMapper.selectList(queryWrapper); System.out.println(userList); }
/**
* 查询ID= 1 ,3 ,5 ,6的数据
* 单表查询: or in
* sql: select * from user where id in (1,3,5,6)
*/
@Test
public void select03(){
Integer[] ids = {1,3,5,7}; //模拟用户参数
List<Integer> idList = Arrays.asList(ids);
List<User> userList = userMapper.selectBatchIds(idList);
System.out.println(userList);
//如果需要获取表中的第一列主键信息
List list = userMapper.selectObjs(null);
System.out.println(list);
}
- 添加
```java
/**
* 完成用户数据入库
*/
@Test
public void testInsert(){
User user = new User();
user.setName("名媛")
.setAge(80).setSex("女");
userMapper.insert(user);
}
修改 ```java @Test public void testUpdate(){
//根据对象中不为null的属性 当做set条件
/*User user = new User();
user.setId(65).setName("北京大爷");
userMapper.updateById(user);*/
//1.参数1: 需要修改的数据 参数2:修改的where条件
User user = new User();
user.setName("北京大爷");
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "名媛");
userMapper.update(user,updateWrapper);
}
- 删除
```java
/**
* 删除操作:
* 1.根据ID删除用户信息 65
* 2.删除name="名媛"的数据
*/
@Test
public void testDelete(){
userMapper.deleteById(65); //根据主键删除
//userMapper.deleteBatchIds("id集合信息");
//根据除主键之外的数据删除信息
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("name", "名媛");
userMapper.delete(queryWrapper);
}
3.创建web项目
- 创建maven项目
编辑POM.xml文件 ```xml <?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">
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
- 编辑JSP页面
```html
<%@ 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>
编辑POJO
@TableName
@Data
@Accessors(chain = true)
public class User {
@TableId(type = IdType.AUTO)
private Integer id; //主键自增
private String name;
private Integer age;
private String sex;
}
编辑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:
prefix: /WEB-INF/ # /默认代表根目录 src/main/webapp
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
- 编辑UserController
```yaml
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:8090/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";
}
}
- 编辑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{
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.selectList(null);
}
} ```