首页 > 数据库 >MySQL 数据库-ORM 映射规约

MySQL 数据库-ORM 映射规约

时间:2022-09-26 18:12:23浏览次数:49  
标签:不要 映射 规约 数据库 更新 查询 ORM MySQL 强制

MySQL 数据库-ORM 映射规约

字段

POJO 类的布尔属性不能加 is,而数据库字段必须加 is_

【强制】POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属性之间的映射。

说明:参见定义 POJO 类以及数据库字段定义规定,在 sql.xml 增加映射,是必须的。

查询

不要使用 * 作为查询的字段列表

【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。

说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。3)无用字段增加网络

消耗,尤其是 text 类型的字段。

使用 #{},#param# 不要使用${}

【强制】sql.xml 配置参数使用:#{},#param# 不要使用${} 此种方式容易出现 SQL 注入。

不使用 iBATIS 自带的 queryForList

【强制】iBATIS 自带的 queryForList(String statementName,int start,int size)不推荐使用。

说明:其实现方式是在数据库取到 statementName 对应的 SQL 语句的所有记录,再通过 subList 取 start,size 的子集合。

正例:

Map<String, Object> map = new HashMap<>(16);
map.put("start", start);
map.put("size", size);

isEqual、isNotEmpty、isNotNull

【参考】<isEqual>中的 compareValue 是与属性值对比的常量,一般是数字,表示相等时带上此条件;<isNotEmpty>表示不为空且不为 null 时执行;<isNotNull>表示不为 null 值时执行。

更新

更新 update_time 字段

【强制】更新数据表记录时,必须同时更新记录对应的 update_time 字段值为当前时间。

大而全的数据更新接口

【推荐】不要写一个大而全的数据更新接口。传入为 POJO 类,不管是不是自己的目标更新字段,都进行

update table set c1=value1,c2=value2,c3=value3;

这是不对的。执行 SQL 时,不要更新无改动的字段,一是易出错;二是效率低;三是增加 binlog 存储。

@Transactional 事务不要滥用

【参考】@Transactional 事务不要滥用。事务会影响数据库的 QPS,另外使用事务的地方需

要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正等。

结果集

不要用 resultClass 当返回结果

【强制】不要用 resultClass 当返回结果,即使所有类属性名与数据库字段一一对应,也需要

定义 <resultMap>;反过来,每一个表也必然有一个 <resultMap> 与之对应。

说明:配置映射关系,使字段与 DO 类解耦,方便维护。

不要用 HashMap 与 Hashtable 当返回结果

【强制】不允许直接拿 HashMap 与 Hashtable 作为查询结果集的输出。

反例:某同学为避免写一个<resultMap>xxx</resultMap>,直接使用 HashTable 来接收数据库返回结果,结果出现把 bigint 转成 Long 值,而线上由于数据库版本不一样,解析成 BigInteger,导致线上问题。

标签:不要,映射,规约,数据库,更新,查询,ORM,MySQL,强制
From: https://www.cnblogs.com/gcbeen/p/16731871.html

相关文章

  • MySQL 数据库-SQL 语句规约
    MySQL数据库-SQL语句规约统计标准统计行数的语法count(*)【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的标准统计行数的语法,跟......
  • MySQL slow log 慢日志
    sql慢日志用于记录执行时间超过指定阈值的SQL,对于系统性能和故障排错非常有帮助开启sql慢日志--开启slowlogset@@global.slow_query_log=1;--设置slowlog文件名,默......
  • winform窗体程序适应不同的分辨率
    如何让自己编写的winform窗体应用程序适应不同的分辨率解决思路:1、窗体加载时获取窗体的长x1和宽y1;2、使用窗体的Resize()事件,当窗体尺寸发生变化时,获得窗体变化后的长x2......
  • mysql 存储过程
    根据查询条件动态拼接表名#测试数据createtabletemp1(idint,namevarchar(50));createtabletemp2(idint,namevarchar(50));insertintotemp2values(2,'......
  • windows服务器部署mysql
    一、Mysql安装教程就不上传了,百度很多的很详细的。二、配置环境变量:我的电脑右键=》属性=》高级系统设置=》环境变量=》系统变量下找到Path,选中编辑,变量值后面添加 C:\P......
  • MYSQL数据类型
    MYSQL数据类型介绍一、MYSQL的数据类型主要包括五大类:整数类型:BIT、BOOL、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT浮点类型:FLOAT、DOUBLE、DECIMAL字符串类型......
  • SpringBoot+Vue体育场管理系统 体育场预约系统 体育场教练预约系统Java Vue MySQL数据
    ......
  • Mysql原理学习
    存储引擎数据库引擎是数据库用于存储、处理和保护数据的核心服务,不同的数据库引擎有其各自的特点,如存储机制、索引技巧、主键的处理、锁的粒度等特点便随着引擎的不同而变......
  • STS用Maven写一个登录页面 - 用MySQL验证登录用户
    上一章我们已经将MySQL和STS的连接进行了测试,下面我们就用MySQL验证登录用户是否正确。可参考:https://www.cnblogs.com/smart-zihan/p/15041013.html第一步:建立数据库接......
  • MySQL索引相关的问题
    关系型数据库相关的大部分问题,都要往如何减少IO次数以及如何减少随机IO次数上想,这也是关系数据库设计时考虑的一个目标。为什么索引使用B+树实际上不管你使用什么结构,B......