Mybatis使用简述
<h2><strong><span style="font-family: "Segoe UI"">什么是</span> MyBatis?</strong></h2><p>MyBatis <span style="font-family: 宋体">是一款优秀的 </span><span style="font-family: Calibri">Java </span><span style="font-family: 宋体">持久层框架,它通过 </span><span style="font-family: Calibri">XML </span><span style="font-family: 宋体">或注解的方式将 </span><span style="font-family: Calibri">Java </span><span style="font-family: 宋体">对象与数据库中的记录进行映射。与传统的 </span><span style="font-family: Calibri">JDBC </span><span style="font-family: 宋体">相比,</span><span style="font-family: Calibri">MyBatis </span><span style="font-family: 宋体">极大地简化了数据库操作代码,让开发者能够更专注于业务逻辑而不是繁琐的数据访问细节。</span></p>
<p><strong>MyBatis <span style="font-family: 宋体">的核心特点:</span></strong></p>
<p><span style="font-family: 宋体">简化了</span> JDBC <span style="font-family: 宋体">的复杂操作</span></p>
<p><span style="font-family: 宋体">支持动态</span> SQL<span style="font-family: 宋体">,能够根据条件灵活构建查询语句</span></p>
<p><span style="font-family: 宋体">提供了强大的映射机制,支持复杂的对象关系映射</span></p>
<p><span style="font-family: 宋体">与</span> Spring <span style="font-family: 宋体">等主流框架无缝集成</span></p>
<p><span style="font-family: 宋体">学习曲线平缓,配置灵活</span></p>
<p> </p>
<h2><strong><span style="font-family: "Segoe UI"">为什么选择</span> MyBatis?</strong></h2>
<h3><strong>与其它持久层框架的对比</strong></h3>
<p><span style="font-family: 宋体">相比于</span> Hibernate <span style="font-family: 宋体">这样的全自动 </span><span style="font-family: Calibri">ORM </span><span style="font-family: 宋体">框架,</span><span style="font-family: Calibri">MyBatis </span><span style="font-family: 宋体">提供了更多的灵活性。</span><span style="font-family: Calibri">MyBatis </span><span style="font-family: 宋体">允许你直接编写原生 </span><span style="font-family: Calibri">SQL</span><span style="font-family: 宋体">,这在处理复杂查询或需要优化 </span><span style="font-family: Calibri">SQL </span><span style="font-family: 宋体">性能时具有明显优势。</span></p>
<p><strong><span style="font-family: 宋体">主要优势:</span></strong></p>
<p><strong><span style="font-family: 宋体">灵活性:</span></strong><span style="font-family: 宋体">可以编写原生</span> SQL<span style="font-family: 宋体">,灵活控制查询逻辑</span></p>
<p><strong><span style="font-family: 宋体">性能优化:</span></strong><span style="font-family: 宋体">直接控制</span> SQL <span style="font-family: 宋体">语句,便于性能调优</span></p>
<p><strong><span style="font-family: 宋体">简化开发:</span></strong><span style="font-family: 宋体">减少了大量</span> JDBC <span style="font-family: 宋体">模板代码</span></p>
<p><strong><span style="font-family: 宋体">易于学习:</span></strong><span style="font-family: 宋体">学习曲线平缓,上手快速</span></p>
<p><strong><span style="font-family: 宋体">与</span> Spring <span style="font-family: 宋体">集成良好:</span></strong><span style="font-family: 宋体">可以无缝集成到</span> Spring <span style="font-family: 宋体">框架中</span></p>
<p> </p>
<p> </p>
<h2><strong>环境搭建</strong></h2>
<p><strong>创建springboot项目</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028182559340-2078494474.png"></p>
<p><strong> 导入mybatis起步依赖、mysql驱动及其他需求(首次使用下载时间会较长)</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028190403503-1337533589.png"></p>
<p><strong> 连接数据源</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028191221715-103700783.png"></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028192921575-1609952727.png"></p>
<p><strong> 建立数据库</strong></p>
<p>范例代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)"> 创建数据库</span>
<span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">DATABASE</span> <span style="color: rgba(0, 0, 255, 1)">IF</span> <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(128, 128, 128, 1)">EXISTS</span><span style="color: rgba(0, 0, 0, 1)"> demo;
</span><span style="color: rgba(0, 0, 255, 1)">USE</span><span style="color: rgba(0, 0, 0, 1)"> demo;
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)"> 创建员工表</span>
<span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span><span style="color: rgba(0, 0, 0, 1)"> employees (
id </span><span style="color: rgba(0, 0, 255, 1)">INT</span> <span style="color: rgba(0, 0, 255, 1)">PRIMARY</span> <span style="color: rgba(0, 0, 255, 1)">KEY</span><span style="color: rgba(0, 0, 0, 1)"> AUTO_INCREMENT,
employee_id </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">20</span>) <span style="color: rgba(0, 0, 255, 1)">UNIQUE</span> <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
name </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
gender ENUM(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">男</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">女</span><span style="color: rgba(255, 0, 0, 1)">'</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
age </span><span style="color: rgba(0, 0, 255, 1)">INT</span><span style="color: rgba(0, 0, 0, 1)">,
department </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
position </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">50</span>) <span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
salary </span><span style="color: rgba(0, 0, 255, 1)">DECIMAL</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">10</span>,<span style="color: rgba(128, 0, 0, 1); font-weight: bold">2</span><span style="color: rgba(0, 0, 0, 1)">),
hire_date DATE </span><span style="color: rgba(128, 128, 128, 1)">NOT</span> <span style="color: rgba(0, 0, 255, 1)">NULL</span><span style="color: rgba(0, 0, 0, 1)">,
email </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">100</span><span style="color: rgba(0, 0, 0, 1)">),
phone </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">20</span><span style="color: rgba(0, 0, 0, 1)">),
address </span><span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">200</span><span style="color: rgba(0, 0, 0, 1)">),
created_at </span><span style="color: rgba(0, 0, 255, 1)">TIMESTAMP</span> <span style="color: rgba(0, 0, 255, 1)">DEFAULT</span> <span style="color: rgba(255, 0, 255, 1)">CURRENT_TIMESTAMP</span><span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(0, 128, 128, 1)">--</span><span style="color: rgba(0, 128, 128, 1)"> 插入示例数据</span>
<span style="color: rgba(0, 0, 255, 1)">INSERT</span> <span style="color: rgba(0, 0, 255, 1)">INTO</span><span style="color: rgba(0, 0, 0, 1)"> employees (employee_id, name, gender, age, department, position, salary, hire_date, email, phone, address)
</span><span style="color: rgba(0, 0, 255, 1)">VALUES</span><span style="color: rgba(0, 0, 0, 1)">
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP001</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">张三</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">男</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">28</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">技术部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">软件工程师</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">15000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2020-03-15</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">zhangsan@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138001</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市海淀区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP002</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">李四</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">女</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">32</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">人力资源部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">HR经理</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">12000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2018-06-20</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">lisi@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138002</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市朝阳区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP003</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">王五</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">男</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">35</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">财务部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">财务主管</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">18000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2016-09-10</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">wangwu@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138003</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市西城区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP004</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">赵六</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">女</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">26</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">市场部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">市场专员</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">8000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2021-01-08</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">zhaoliu@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138004</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市东城区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP005</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">钱七</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">男</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">30</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">技术部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">高级工程师</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">20000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2019-11-25</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">qianqi@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138005</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市丰台区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP006</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">孙八</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">女</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">29</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">销售部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">销售经理</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">16000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2020-07-30</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">sunba@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138006</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市石景山区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP007</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">周九</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">男</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">27</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">技术部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">前端开发</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">13000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2021-03-12</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">zhoujiu@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138007</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市通州区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP008</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">吴十</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">女</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">33</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">行政部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">行政主管</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">11000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2017-05-18</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">wushi@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138008</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市昌平区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP009</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">郑十一</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">男</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">31</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">财务部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">会计</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">10000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2019-08-22</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">zhengshiyi@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138009</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市大兴区</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
(</span><span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">EMP010</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">王芳</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">女</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">25</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">市场部</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">市场助理</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1); font-weight: bold">7000.00</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">2022-02-14</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">wangfang@company.com</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">13800138010</span><span style="color: rgba(255, 0, 0, 1)">'</span>, <span style="color: rgba(255, 0, 0, 1)">'</span><span style="color: rgba(255, 0, 0, 1)">北京市房山区</span><span style="color: rgba(255, 0, 0, 1)">'</span>);</pre>
</div>
<p>范例效果:</p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028193418313-1211057434.png"></p>
<p> 若已有数据库,则直接连接</p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028193721265-343364204.png"></p>
<p><strong> 在application.properties文件中配置数据库连接信息:</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028193945996-1908098961.png"></p>
<div class="cnblogs_code">
<pre>spring.application.name=<span style="color: rgba(0, 0, 0, 1)">demo
#驱动类名称
spring.datasource.driver</span>-<span style="color: rgba(0, 0, 255, 1)">class</span>-name=<span style="color: rgba(0, 0, 0, 1)">com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url</span>=jdbc:mysql:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:3306/demo</span>
<span style="color: rgba(0, 0, 0, 1)">#连接数据库的用户名
spring.datasource.username</span>=<span style="color: rgba(0, 0, 0, 1)">root
#连接数据库的密码
spring.datasource.password</span>=1234</pre>
</div>
<h2><strong>实体类设计</strong></h2>
<p><span style="font-family: 宋体">在</span> MyBatis <span style="font-family: 宋体">中,实体类对应数据库中的表结构。良好的实体类设计是使用 </span><span style="font-family: Calibri">MyBatis </span><span style="font-family: 宋体">的基础。</span></p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@Data
@NoArgsConstructor
@AllArgsConstructor
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Emp {
</span><span style="color: rgba(0, 0, 255, 1)">private</span> Integer id; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">ID</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String username; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户名</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String password; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">密码</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String name; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">姓名</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> Short gender; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">性别 , 1 男, 2 女</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> String image; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">图像url</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> Short job; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">职位 , 1 班主任 , 2 讲师 , 3 学工主管 , 4 教研主管 , 5 咨询师</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> LocalDate entrydate; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">入职日期</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> Integer deptId; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">部门ID</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> LocalDateTime createTime; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建时间</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> LocalDateTime updateTime; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修改时间</span>
}</pre>
</div>
<p> </p>
<h2><strong>Mapper 接口设计</strong></h2>
<p>Mapper <span style="font-family: 宋体">接口定义了数据访问的方法,可以使用注解完成接口的实现</span><span style="font-family: 宋体">。(例如实例代码中“分页查询”“查询数据总数”“新增员工”“根据id查询员工信息”这些功能的实现)</span></p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@Mapper
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> EmpMapper {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分页查询</span>
@Select("select * from emp limit #{start},#{pageSize}"<span style="color: rgba(0, 0, 0, 1)">)
List</span><Emp><span style="color: rgba(0, 0, 0, 1)"> page(Integer start, Integer pageSize);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">条件分页查询</span>
List<Emp><span style="color: rgba(0, 0, 0, 1)"> list(Integer start, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询数据总数</span>
@Select("select count(*) from emp"<span style="color: rgba(0, 0, 0, 1)">)
Long count();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">批量删除员工</span>
<span style="color: rgba(0, 0, 255, 1)">void</span> delete(List<Integer><span style="color: rgba(0, 0, 0, 1)"> ids);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">新增员工</span>
@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +
"value(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> save(Emp emp);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据id更新员工信息</span>
<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> update(Emp emp);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据id查询员工信息</span>
@Select("select * from emp where id = #{id}"<span style="color: rgba(0, 0, 0, 1)">)
Emp getById(Integer id);
}</span></pre>
</div>
<p> </p>
<h2><strong>Mapper XML 映射文件</strong></h2>
<p>XML <span style="font-family: 宋体">映射文件是 </span><span style="font-family: Calibri">MyBatis </span><span style="font-family: 宋体">的核心,它定义了 </span><span style="font-family: Calibri">SQL </span><span style="font-family: 宋体">语句和结果映射。在sql语句较复杂的情况下,不建议使用注解实现mapper接口(这样会使得代码显得杂乱不易阅读),而是在XML映射文件中编写sql语句。需要注意的是,XML映射文件的路径名称必须于mapper接口路径名称相同。(EmpMapper接口文件路径名称为:cn.nuist.tlias.mapper.EmpMapper,XML映射文件路径名称也为:cn.nuist.tlias.mapper.EmpMapper)</span></p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/3291169/202510/3291169-20251028210143759-489858995.png"></p>
<p> mapper<span style="font-family: 宋体">接口中的</span><span style="font-family: Calibri">“</span><span style="font-family: 宋体">分页条件查询</span><span style="font-family: Calibri">”“</span><span style="font-family: 宋体">批量删除员工信息</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">和</span><span style="font-family: Calibri">“</span><span style="font-family: 宋体">根据</span><span style="font-family: Calibri">id</span><span style="font-family: 宋体">更新员工信息</span><span style="font-family: Calibri">”</span><span style="font-family: 宋体">功能在</span><span style="font-family: Calibri">XML</span><span style="font-family: 宋体">映射文件中实现:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><?</span><span style="color: rgba(255, 0, 255, 1)">xml version="1.0" encoding="UTF-8" </span><span style="color: rgba(0, 0, 255, 1)">?></span>
<span style="color: rgba(0, 0, 255, 1)"><!</span><span style="color: rgba(255, 0, 255, 1)">DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">mapper </span><span style="color: rgba(255, 0, 0, 1)">namespace</span><span style="color: rgba(0, 0, 255, 1)">="cn.nuist.tlias.mapper.EmpMapper"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">select </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="list"</span><span style="color: rgba(255, 0, 0, 1)"> resultType</span><span style="color: rgba(0, 0, 255, 1)">="cn.nuist.tlias.pojp.Emp"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
select *
from emp
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">where</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="name != null and name != ''"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
name like concat('%',#{name},'%')
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="gender != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
and gender = #{gender}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="begin != null and end != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
and entrydate between #{begin} and #{end}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">where</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
order by update_time desc
limit #{start},#{pageSize}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">select</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">delete </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="delete"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
delete
from emp
where id in
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">foreach </span><span style="color: rgba(255, 0, 0, 1)">collection</span><span style="color: rgba(0, 0, 255, 1)">="ids"</span><span style="color: rgba(255, 0, 0, 1)"> item</span><span style="color: rgba(0, 0, 255, 1)">="id"</span><span style="color: rgba(255, 0, 0, 1)"> open</span><span style="color: rgba(0, 0, 255, 1)">="("</span><span style="color: rgba(255, 0, 0, 1)"> separator</span><span style="color: rgba(0, 0, 255, 1)">=","</span><span style="color: rgba(255, 0, 0, 1)"> close</span><span style="color: rgba(0, 0, 255, 1)">=")"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
#{id}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">foreach</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">delete</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">update </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="update"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
update emp
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">set</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="username != null and username != ''"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
username = #{username}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="name != null and name != ''"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
name = #{name}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="gender != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
gender = #{gender}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="image != null and image != ''"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
image = #{image}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="job != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
job = #{job}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="entrydate != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
entrydate = #{entrydate}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="deptId != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
dept_id = #{deptId}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">if </span><span style="color: rgba(255, 0, 0, 1)">test</span><span style="color: rgba(0, 0, 255, 1)">="updateTime != null"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
update_time = #{updateTime}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">if</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">set</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
where id = #{id}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">update</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">mapper</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h2><strong><span style="font-family: "Segoe UI"">动态</span> SQL:灵活构建查询</strong></h2>
<p>MyBatis <span style="font-family: 宋体">的强大特性之一就是动态 </span><span style="font-family: Calibri">SQL</span><span style="font-family: 宋体">,它允许你根据条件动态生成 </span><span style="font-family: Calibri">SQL </span><span style="font-family: 宋体">语句。</span></p>
<p> </p>
<p><if> <span style="font-family: 宋体">:</span><span style="font-family: 宋体">根据条件包含</span> SQL <span style="font-family: 宋体">片段</span></p>
<p> </p>
<p><choose>, <when>, <otherwise>:<span style="font-family: 宋体">实现类似</span> switch-case <span style="font-family: 宋体">的逻辑</span></p>
<p> </p>
<p><where>:<span style="font-family: 宋体">智能处理</span> WHERE <span style="font-family: 宋体">条件,自动去除多余的 </span><span style="font-family: Calibri">AND/OR</span></p>
<p> </p>
<p><set>:<span style="font-family: 宋体">用于</span> UPDATE <span style="font-family: 宋体">语句,智能处理 </span><span style="font-family: Calibri">SET </span><span style="font-family: 宋体">子句</span></p>
<p> </p>
<p><foreach>:<span style="font-family: 宋体">遍历集合,常用于</span> IN <span style="font-family: 宋体">条件或批量操作</span></p>
<p> </p>
<p><trim>:<span style="font-family: 宋体">更灵活的字符串修剪功能</span></p>
<p> </p>
<p><bind>:<span style="font-family: 宋体">创建变量并在当前上下文使用</span></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/syf0824/p/19172780
頁:
[1]