【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分

 

posted @   逆火狂飙  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· 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]调用存储过程
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示