zoukankan      html  css  js  c++  java
  • 【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分

  • 相关阅读:
    IOS的系统手机 宽度无法自适应 解决办法
    iframe 设置背景透明
    thinkphp5 常用的2个方法
    thinkphp引入后台模板文件的路径怎么写?
    html的confirm()
    php 如何往数组里添加数据
    thinkphp51 重定向 redirect()
    【Oracle 触发器】(4)触发器应用场景--数据的确认
    【Oracle 触发器】(3)触发器应用场景--复杂的安全性检查
    【Oracle 触发器】(2)触发器的分类(语句级/行级)
  • 原文地址:https://www.cnblogs.com/heyang78/p/15477832.html
Copyright © 2011-2022 走看看