【Mybatis】茴字的四种写法,通过Mybatis操作DB,书写SQL语句的三种方式
第一种方式:直接将SQL语句写在接口类里,如:
@Mapper public interface UserMapper { ... @Select(" select * from mc_user where name=#{name} and pswd=#{pswd} ") User findByNamePswd(@Param("name") String name, @Param("pswd") String pswd); ... }
此方式优势:简洁,对于短SQL很合适。
劣势:对于长SQL很不合适,当把有子查询和各种连接的SQL做成长长一句后,维护起来是不讨好的。
第二种方式:将SQL写到一个特定的类里,如:
@Mapper public interface ReputationMapper { @SelectProvider(type=ReputationMapperSql.class,method="getQueryDeadAllSql") List<Reputation> queryDeadAll(); }
ReputationMapperSql类:
public class ReputationMapperSql { public String getQueryDeadAllSql() { StringBuilder sb=new StringBuilder(); sb.append(" select "); sb.append(" a.id, "); sb.append(" a.name, "); sb.append(" a.brief, "); sb.append(" a.deleted, "); sb.append(" to_char(a.create_time,'yyyy-mm-dd hh24:mi:ss') as ctime, "); sb.append(" b.name as creater "); sb.append(" from ( select * from mc_reputation where deleted=1 ) a "); sb.append(" left join mc_user b "); sb.append(" on a.create_uid=b.id "); sb.append(" order by a.id "); String sql=sb.toString(); return sql; } }
此方式优势:挺适合写长的复杂SQL。
劣势:可能导致SQL分散到诸多类中,不集中,另可能被XML派诟病又回到JDBC时代。
第三种方式即坊间用得最多的**Mapper.xml
首先告诉SpringBoot到哪里去找Mapper.xml文件(下面定义是放在resource目录的子目录mapperxml里):
mybatis-plus: mapperLocations: classpath:mapperxml/*Mapper.xml
然后把文件内容和接口类对应上:
文件内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.hy.myapp.mapper.ReputationMapper"> <!-- 查询活的全部成名 --> <select id="queryAliveAll" resultType="com.hy.myapp.Entity.Reputation"> select a.id, a.name, a.brief, a.deleted, to_char(a.create_time,'yyyy-mm-dd hh24:mi:ss') as ctime, b.name as creater from ( select * from mc_reputation where deleted=0 ) a left join mc_user b on a.create_uid=b.id order by a.id </select> </mapper>
接口类:
@Mapper public interface ReputationMapper { ...... /** * 查询活的(deleted=0)全部成名 * @return */ List<Reputation> queryAliveAll(); ...... }
此方式优势:受众广泛,资料也多。
此方式劣势:标签毕竟不如Java语句灵活。
另外还有一种lamda方式请见https://www.cnblogs.com/heyang78/p/15369564.html,具体用哪种,由您自己做主。
2021年10月28日21点26分
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-10-28 [MyBatis]调用存储过程