MyBatis 动态SQL实现

准备

SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE DATABASE test
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

use test;

CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (username, age, email) VALUES ('Alice', 30, 'alice@example.com');
INSERT INTO users (username, age, email) VALUES ('Bob', 25, 'bob@example.com');
INSERT INTO users (username, age, email) VALUES ('Charlie', 35, 'charlie@example.com');
INSERT INTO users (username, age, email) VALUES ('David', 28, 'david@example.com');
INSERT INTO users (username, age, email) VALUES ('Eve', 22, 'eve@example.com');
阅读更多

MyBatis mybatis 整合 ehcache

分布缓存

我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)

分布缓存

不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发。所以要使用分布式缓存对缓存数据进行集中管理。

mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。

整合方法(掌握)

mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发即可。

阅读更多

MyBatis 查询缓存之二级缓存

本文主要讲mybatis的二级缓存,二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

二级缓存原理

二级缓存原理

阅读更多

MyBatis 查询缓存之一级缓存

查询缓存

mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。

mybaits提供一级缓存,和二级缓存。

查询缓存

一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

阅读更多

MyBatis 多对多查询

示例

查询主表是:用户表

关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders、orderdetail、items

  • sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
orders.*,
user.username,
user.sex,
user.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id,
items.name items_name,
items.detail items_detail,
items.price items_price
FROM
orders,
user,
orderdetail,
items
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
阅读更多

MyBatis 延迟加载

resultMap可以实现高级映射(使用associationcollection实现一对一及一对多映射),associationcollection具备延迟加载功能。

延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

需求:

如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。

使用association实现延迟加载

阅读更多

MyBatis 一对多查询

示例

  • sql

确定主查询表:订单表
确定关联查询表:订单明细表
在一对一查询基础上添加订单明细表关联即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
orders.*,
user.username,
user.sex,
user.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
FROM
orders,
user,
orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
阅读更多

MyBatis 数据模型

数据模型分析思路

  • 每张表记录的数据内容

分模块对每张表记录的内容进行熟悉,相当于你学习系统需求(功能)的过程。

  • 每张表重要的字段设置

非空字段、外键字段

  • 数据库级别表与表之间的关系

外键关系

  • 表与表之间的业务关系

在分析表与表之间的业务关系时一定要建立在某个业务意义基础上去分析。

数据模型分析

数据模型分析

阅读更多

MyBatis Mapper 配置 resultType 与 resultMap

输出映射有两种方式

  • resultType
  • resultMap

resultType

  • 使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
  • 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。
  • 只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
阅读更多