Java @Mapper 使用注解的方式注入SQL

MySQL 的 JSON 数据类型(从 MySQL 5.7.8 开始支持)允许你在表中存储和处理 JSON 格式的数据。

JSON 数据类型提供了灵活性,但应谨慎使用。对于需要复杂查询、索引或关系约束的数据,传统的关系表结构通常是更好的选择。

mysql中in语句的处理。

一、例如SQL:update bill_main set bill_state = '00' where bill_no in ();

处理如下:

复制代码
@Update(" update bill_main set bill_state = '00' where  bill_no in <foreach collection='billNoList' item='billNo' open='(' separator=',' close=')'> #{billNo}</foreach> ")
Boolean approveReject(@Param("billNoList") List<String> billNoList);
java 复制代码
 @Update(" update bill_main set bill_state = '00' where  bill_no in <foreach collection='billNoList' item='billNo' open='(' separator=',' close=')'> #{billNo}</foreach> ")
    Boolean approveReject(@Param("billNoList") List<String> billNoList);

二、遇到数据类为JOSN的SQL的处理(t3)

SELECT t1.id,

t1.bill_no,

t1.process_instance_id,

t1.process_definition_id,

t1.process_deployment_id,

t1.approve_id,

t1.remark,

t1.enabled_flag,

json_unquote(json_extract(json_extract(t2.BILL_DATA,'.comBasicInfo'),'0.comApplyUserId')) comApplyUserId,

json_unquote(json_extract(json_extract(t2.BILL_DATA,'.comBasicInfo'),'0.comApplyUserName')) comApplyUserName,

json_unquote(json_extract(json_extract(t2.BILL_DATA,'.comBasicInfo'),'0.comApplyUserCode')) comApplyUserCode,

t3.hj_value, #工时

t3.yye04,#项目

t3.comSubCategoryCode #月份

FROM bill_main t1

LEFT JOIN bill_main_data t2 ON t1.id = t2.id

LEFT join (

SELECT

t.id,#单据号

jt.hj_value, #工时

jt.yye04,#项目

jt.comSubCategoryCode #月份

FROM bill_main_data t,

JSON_TABLE(

t.BILL_DATA->'$.jyInfo',

'$\*' COLUMNS (

idx FOR ORDINALITY,

hj_value VARCHAR(100) PATH '$.hj',

yye04 VARCHAR(100) PATH '$.yye04',

comSubCategoryCode VARCHAR(100) PATH '$.comSubCategoryCode'

) ) AS jt

) t3

on t1.id = t3.id

sql 复制代码
SELECT  t1.id,
        t1.bill_no,
        t1.process_instance_id,
        t1.process_definition_id,
        t1.process_deployment_id,
        t1.approve_id,
        t1.remark,
        t1.enabled_flag,
        json_unquote(json_extract(json_extract(t2.BILL_DATA,'$.comBasicInfo'),'$[0].comApplyUserId')) comApplyUserId,
        json_unquote(json_extract(json_extract(t2.BILL_DATA,'$.comBasicInfo'),'$[0].comApplyUserName')) comApplyUserName,
        json_unquote(json_extract(json_extract(t2.BILL_DATA,'$.comBasicInfo'),'$[0].comApplyUserCode')) comApplyUserCode,
        t3.hj_value, #工时
        t3.yye04,#项目
        t3.comSubCategoryCode #月份
        FROM bill_main t1
        LEFT JOIN bill_main_data t2 ON t1.id = t2.id
         LEFT join (
         SELECT 
                  t.id,#单据号
                  jt.hj_value, #工时
                  jt.yye04,#项目
                  jt.comSubCategoryCode #月份
                FROM bill_main_data t,
                JSON_TABLE(
                    t.BILL_DATA->'$.jyInfo',
                    '$[*]' COLUMNS (
                        idx FOR ORDINALITY,
                        hj_value VARCHAR(100) PATH '$.hj',
                        yye04 VARCHAR(100) PATH '$.yye04',
                        comSubCategoryCode VARCHAR(100) PATH '$.comSubCategoryCode'
                    ) ) AS jt
         ) t3
         on t1.id = t3.id

三、mysql json 数据类型的使用示例

sql 复制代码
-- 创建电商商品表
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    attributes JSON,
    price DECIMAL(10,2)
);

-- 插入商品数据
INSERT INTO products VALUES
(1, '手机', '{"brand": "苹果", "color": "黑色", "storage": "128GB", "specs": {"ram": "4GB", "cpu": "A15"}}', 6999),
(2, '笔记本', '{"brand": "戴尔", "color": "银色", "storage": "512GB", "specs": {"ram": "16GB", "cpu": "i7"}}', 8999);

-- 复杂查询:查找品牌是苹果且颜色是黑色的产品
SELECT name, price FROM products
WHERE JSON_EXTRACT(attributes, '$.brand') = '苹果'
AND JSON_EXTRACT(attributes, '$.color') = '黑色';

-- 嵌套查询
SELECT name, attributes->'$.specs.cpu' AS cpu
FROM products;
相关推荐
2401_858286111 小时前
OS82.【Linux】设计线程池
java·linux·运维·服务器·开发语言·算法·线程池
leisoo80971 小时前
涨停板封板质量打分系统实战:基于本地逐笔数据的Python实现
linux·服务器·python
@yanyu6662 小时前
kali note
linux·运维·服务器
2401_894915532 小时前
Geo 优化源码部署常见报错排查:连接失败、地图加载、地域词失效解决方案
服务器·开发语言·python·安全·php
码农小韩2 小时前
Linux操作系统(六)——软件包管理
linux·操作系统·linux驱动·嵌入式软件开发·linux应用
lys079620002 小时前
多台亚马逊云服务器,在同一个网段的办法
运维·服务器
果果燕3 小时前
实习笔记(二)NFS 嵌套挂载问题完整复盘
linux·服务器·网络
g3voip3 小时前
工业防爆电话选型指南:防爆参数、SIP接入与调度系统集成
linux·服务器·网络·信息与通信·ip·pbx
沫璃染墨3 小时前
《从零入门Linux系统篇(十四):系统工具篇·五——Git版本控制:从版本管理到协同开发》
linux·运维·服务器·git·gitee·github
PGCCC3 小时前
Ubuntu 安装 PostgreSQL 16 完整教程(2026):从仓库配置到远程连接
linux·ubuntu·postgresql