<!DOCTYPE HTML>
< html lang = "" >
< head >
< meta charset = "UTF-8" >
< meta content = "text/html; charset=utf-8" http-equiv = "Content-Type" >
< title > ( 四) ORM映射 · GitBook< / title >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" / >
< meta name = "description" content = "" >
< meta name = "generator" content = "GitBook 3.2.3" >
< link rel = "stylesheet" href = "../gitbook/style.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-prism/prism.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-search/search.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-fontsettings/website.css" >
< link rel = "stylesheet" href = "../styles/website.css" >
< meta name = "HandheldFriendly" content = "true" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1, user-scalable=no" >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black" >
< link rel = "apple-touch-icon-precomposed" sizes = "152x152" href = "../gitbook/images/apple-touch-icon-precomposed-152.png" >
< link rel = "shortcut icon" href = "../gitbook/images/favicon.ico" type = "image/x-icon" >
< link rel = "prev" href = "SQL语句.html" / >
< / head >
< body >
< div class = "book" >
< div class = "book-summary" >
< div id = "book-search-input" role = "search" >
< input type = "text" placeholder = "Type to search" / >
< / div >
< nav role = "navigation" >
< ul class = "summary" >
< li class = "chapter " data-level = "1.1" data-path = "../" >
< a href = "../" >
前言
< / a >
< / li >
< li class = "chapter " data-level = "1.2" >
< span >
一、编程规约
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.2.1" data-path = "../编程规约/命名风格.html" >
< a href = "../编程规约/命名风格.html" >
(一)命名风格
< / a >
< / li >
< li class = "chapter " data-level = "1.2.2" data-path = "../编程规约/常量定义.html" >
< a href = "../编程规约/常量定义.html" >
(二)常量定义
< / a >
< / li >
< li class = "chapter " data-level = "1.2.3" data-path = "../编程规约/代码格式.html" >
< a href = "../编程规约/代码格式.html" >
(三)代码格式
< / a >
< / li >
< li class = "chapter " data-level = "1.2.4" data-path = "../编程规约/OOP规范.html" >
< a href = "../编程规约/OOP规范.html" >
( 四) OOP规范
< / a >
< / li >
< li class = "chapter " data-level = "1.2.5" data-path = "../编程规约/集合处理.html" >
< a href = "../编程规约/集合处理.html" >
(五)集合处理
< / a >
< / li >
< li class = "chapter " data-level = "1.2.6" data-path = "../编程规约/并发处理.html" >
< a href = "../编程规约/并发处理.html" >
(六)并发处理
< / a >
< / li >
< li class = "chapter " data-level = "1.2.7" data-path = "../编程规约/控制语句.html" >
< a href = "../编程规约/控制语句.html" >
(七)控制语句
< / a >
< / li >
< li class = "chapter " data-level = "1.2.8" data-path = "../编程规约/注释规约.html" >
< a href = "../编程规约/注释规约.html" >
(八)注释规约
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.3" >
< span >
二、异常日志
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.3.1" data-path = "../异常日志/异常处理.html" >
< a href = "../异常日志/异常处理.html" >
(一)异常处理
< / a >
< / li >
< li class = "chapter " data-level = "1.3.2" data-path = "../异常日志/日志规约.html" >
< a href = "../异常日志/日志规约.html" >
(二)日志规范
< / a >
< / li >
< li class = "chapter " data-level = "1.3.3" data-path = "../异常日志/其他.html" >
< a href = "../异常日志/其他.html" >
(三)其他
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.4" data-path = "../单元测试.html" >
< a href = "../单元测试.html" >
三、单元测试
< / a >
< / li >
< li class = "chapter " data-level = "1.5" data-path = "../安全规约.html" >
< a href = "../安全规约.html" >
四、安全规约
< / a >
< / li >
< li class = "chapter " data-level = "1.6" >
< span >
五、MySQL数据库
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.6.1" data-path = "建表规约.html" >
< a href = "建表规约.html" >
(一)建表规约
< / a >
< / li >
< li class = "chapter " data-level = "1.6.2" data-path = "索引规约.html" >
< a href = "索引规约.html" >
(二)索引规约
< / a >
< / li >
< li class = "chapter " data-level = "1.6.3" data-path = "SQL语句.html" >
< a href = "SQL语句.html" >
( 三) SQL语句
< / a >
< / li >
< li class = "chapter active" data-level = "1.6.4" data-path = "ORM映射.html" >
< a href = "ORM映射.html" >
( 四) ORM映射
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.7" >
< span >
六、工程结构
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.7.1" data-path = "../工程结构/应用分层.html" >
< a href = "../工程结构/应用分层.html" >
(一)应用分层
< / a >
< / li >
< li class = "chapter " data-level = "1.7.2" data-path = "../工程结构/二方库依赖.html" >
< a href = "../工程结构/二方库依赖.html" >
(二)二方库依赖
< / a >
< / li >
< li class = "chapter " data-level = "1.7.3" data-path = "../工程结构/服务器.html" >
< a href = "../工程结构/服务器.html" >
(三)服务器
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.8" data-path = "../版本历史.html" >
< a href = "../版本历史.html" >
附1: 版本历史
< / a >
< / li >
< li class = "chapter " data-level = "1.9" data-path = "../本手册专有名词.html" >
< a href = "../本手册专有名词.html" >
附2: 本手册专有名词
< / a >
< / li >
< li class = "divider" > < / li >
< li >
< a href = "https://www.gitbook.com" target = "blank" class = "gitbook-link" >
Published with GitBook
< / a >
< / li >
< / ul >
< / nav >
< / div >
< div class = "book-body" >
< div class = "body-inner" >
< div class = "book-header" role = "navigation" >
<!-- Title -->
< h1 >
< i class = "fa fa-circle-o-notch fa-spin" > < / i >
< a href = ".." > ( 四) ORM映射< / a >
< / h1 >
< / div >
< div class = "page-wrapper" tabindex = "-1" role = "main" >
< div class = "page-inner" >
< div id = "book-search-results" >
< div class = "search-noresults" >
< section class = "normal markdown-section" >
< h2 id = "四-orm映射" > (四 ) ORM映 射 < / h2 >
< ol >
< li > 【 强 制 】 在 表 查 询 中 , 一 律 不 要 使 用 * 作 为 查 询 的 字 段 列 表 , 需 要 哪 些 字 段 必 须 明 确 写 明 。
< br > < span style = "color:orange" > 说 明 < / span > : 1) 增 加 查 询 分 析 器 解 析 成 本 。 2) 增 减 字 段 容 易 与 resultMap配 置 不 一 致 。 < / li >
< li > 【 强 制 】 POJO类 的 布 尔 属 性 不 能 加 is, 而 数 据 库 字 段 必 须 加 is_, 要 求 在 resultMap中 进 行 字 段 与 属 性 之 间 的 映 射 。
< br > < span style = "color:orange" > 说 明 < / span > : 参 见 定 义 POJO类 以 及 数 据 库 字 段 定 义 规 定 , 在 < resultmap > 中 增 加 映 射 , 是 必 须 的 。 在 MyBatis Generator生 成 的 代 码 中 , 需 要 进 行 对 应 的 修 改 。 < / resultmap > < / li >
< li > 【 强 制 】 不 要 用 resultClass当 返 回 参 数 , 即 使 所 有 类 属 性 名 与 数 据 库 字 段 一 一 对 应 , 也 需 要 定 义 ; 反 过 来 , 每 一 个 表 也 必 然 有 一 个 与 之 对 应 。
< br > < span style = "color:orange" > 说 明 < / span > : 配 置 映 射 关 系 , 使 字 段 与 DO类 解 耦 , 方 便 维 护 。 < / li >
< li > 【 强 制 】 sql.xml配 置 参 数 使 用 : #{}, #param# 不 要 使 用 ${} 此 种 方 式 容 易 出 现 SQL注 入 。 < / li >
< li > < p > 【 强 制 】 iBATIS自 带 的 queryForList(String statementName,int start,int size)不 推 荐 使 用 。
< br > < span style = "color:orange" > 说 明 < / span > : 其 实 现 方 式 是 在 数 据 库 取 到 statementName对 应 的 SQL语 句 的 所 有 记 录 , 再 通 过 subList取 start,size的 子 集 合 。
< br > < span style = "color:green" > 正 例 < / span > : < / p >
< pre class = "language-" > < code > Map< span class = "token tag" > < span class = "token tag" > < span class = "token punctuation" > < < / span > String,< / span > < span class = "token attr-name" > Object< / span > < span class = "token punctuation" > > < / span > < / span > map = new HashMap< span class = "token tag" > < span class = "token tag" > < span class = "token punctuation" > < < / span > String,< / span > < span class = "token attr-name" > Object< / span > < span class = "token punctuation" > > < / span > < / span > ();
map.put(" start" , start);
map.put(" size" , size);
< / code > < / pre > < / li >
< li > < p > 【 强 制 】 不 允 许 直 接 拿 HashMap与 Hashtable作 为 查 询 结 果 集 的 输 出 。
< br > < span style = "color:orange" > 说 明 < / span > : resultClass=” Hashtable” , 会 置 入 字 段 名 和 属 性 值 , 但 是 值 的 类 型 不 可 控 。 < / p >
< / li >
< li > 【 强 制 】 更 新 数 据 表 记 录 时 , 必 须 同 时 更 新 记 录 对 应 的 gmt_modified字 段 值 为 当 前 时 间 。 < / li >
< li > 【 推 荐 】 不 要 写 一 个 大 而 全 的 数 据 更 新 接 口 。 传 入 为 POJO类 , 不 管 是 不 是 自 己 的 目 标 更 新 字 段 , 都 进 行 update table set c1=value1,c2=value2,c3=value3; 这 是 不 对 的 。 执 行 SQL时 , 不 要 更 新 无 改 动 的 字 段 , 一 是 易 出 错 ; 二 是 效 率 低 ; 三 是 增 加 binlog存 储 。 < / li >
< li > 【 参 考 】 < code > @Transactional< / code > 事 务 不 要 滥 用 。 事 务 会 影 响 数 据 库 的 QPS, 另 外 使 用 事 务 的 地 方 需 要 考 虑 各 方 面 的 回 滚 方 案 , 包 括 缓 存 回 滚 、 搜 索 引 擎 回 滚 、 消 息 补 偿 、 统 计 修 正 等 。 < / li >
< li > 【 参 考 】 < code > < span class = "token tag" > < span class = "token tag" > < span class = "token punctuation" > < < / span > isEqual< / span > < span class = "token punctuation" > > < / span > < / span > < / code > 中 的 compareValue是 与 属 性 值 对 比 的 常 量 , 一 般 是 数 字 , 表 示 相 等 时 带 上 此 条 件 ; < code > < span class = "token tag" > < span class = "token tag" > < span class = "token punctuation" > < < / span > isNotEmpty< / span > < span class = "token punctuation" > > < / span > < / span > < / code > 表 示 不 为 空 且 不 为 null时 执 行 ; < code > < span class = "token tag" > < span class = "token tag" > < span class = "token punctuation" > < < / span > isNotNull< / span > < span class = "token punctuation" > > < / span > < / span > < / code > 表 示 不 为 null值 时 执 行 。 < / li >
< / ol >
< / section >
< / div >
< div class = "search-results" >
< div class = "has-results" >
< h1 class = "search-results-title" > < span class = 'search-results-count' > < / span > results matching "< span class = 'search-query' > < / span > "< / h1 >
< ul class = "search-results-list" > < / ul >
< / div >
< div class = "no-results" >
< h1 class = "search-results-title" > No results matching "< span class = 'search-query' > < / span > "< / h1 >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< a href = "SQL语句.html" class = "navigation navigation-prev navigation-unique" aria-label = "Previous page: ( 三) SQL语句" >
< i class = "fa fa-angle-left" > < / i >
< / a >
< / div >
< script >
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"( 四) ORM映射","level":"1.6.4","depth":2,"next":{"title":"六、工程结构","level":"1.7","depth":1,"ref":"","articles":[{"title":"(一)应用分层","level":"1.7.1","depth":2,"path":"工程结构/应用分层.md","ref":"工程结构/应用分层.md","articles":[]},{"title":"(二)二方库依赖","level":"1.7.2","depth":2,"path":"工程结构/二方库依赖.md","ref":"工程结构/二方库依赖.md","articles":[]},{"title":"(三)服务器","level":"1.7.3","depth":2,"path":"工程结构/服务器.md","ref":"工程结构/服务器.md","articles":[]}]},"previous":{"title":"( 三) SQL语句","level":"1.6.3","depth":2,"path":"MySQL数据库/SQL语句.md","ref":"MySQL数据库/SQL语句.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["book-summary-scroll-position-saver","github","prism","-sharing","-highlight"],"pluginsConfig":{"github":{"url":"https://github.com/alibaba/p3c"},"book-summary-scroll-position-saver":{},"prism":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css"}},"file":{"path":"MySQL数据库/ORM映射.md","mtime":"2018-01-13T07:52:52.580Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-01-15T14:41:43.583Z"},"basePath":"..","book":{"language":""}});
});
< / script >
< / div >
< script src = "../gitbook/gitbook.js" > < / script >
< script src = "../gitbook/theme.js" > < / script >
< script src = "../gitbook/gitbook-plugin-book-summary-scroll-position-saver/book-summary-scroll-position-saver.js" > < / script >
< script src = "../gitbook/gitbook-plugin-github/plugin.js" > < / script >
< script src = "../gitbook/gitbook-plugin-search/search-engine.js" > < / script >
< script src = "../gitbook/gitbook-plugin-search/search.js" > < / script >
< script src = "../gitbook/gitbook-plugin-lunr/lunr.min.js" > < / script >
< script src = "../gitbook/gitbook-plugin-lunr/search-lunr.js" > < / script >
< script src = "../gitbook/gitbook-plugin-fontsettings/fontsettings.js" > < / script >
< / body >
< / html >