mybatis入门基础--纯sql和自定义的动态sql

前言: 在使用mybatis的过程中,总是要去注意 类似 > < 一类的特殊字符需要进行转义,十分别扭而且难记,于是笔者就自己写了一些比较笨拙的方法来实现,

    1.首先就是 动态sql直接使用:

        这里我使用java来动态的拼接 ,比如一个动态查询场景下,查询参数是不一定的,所以每次的查询可能都不一样,所以

        我会将 mapper.xml中定义一个 字符串,

<select id="DynamicQuery"
          parameterType="java.util.HashMap" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
     from
    tb_user a
    where  1=1
     ${sqlStr}
  </select>

  而serviceImpl层;

     public  List<TbUser> DynamicQuery(GetUserAndOrgsInfo item){
        Map map=new HashMap();
        StringBuffer sbStr=new StringBuffer();
        sbStr.append( "  and  1=1   "  );
        if(!Strings.isNullOrEmpty(item.name)){
            sbStr.append("   and a.user_name= '"+ item.name+"'   ");
        }
        if(!Strings.isNullOrEmpty(item.orgsStr)){
            sbStr.append("   and a.user_orgsid= '"+ item.orgsStr+"'   ");
        } 
        map.put("sqlStr",sbStr);  
        return  tbUserMapper.DynamicQuery(map);
    }

**********************************************************************************

 2 mybatis使用纯sql语句去实现复杂的多表查询,参考上面的代码

       新建一个实体类   SqlAdapter: 只需要一个属性, private   String  sql

public class SqlAdapter {
    String sql;
    public SqlAdapter(){}
    public SqlAdapter(String sql) {this.sql = sql; }
    public String getSql() { return sql; }
    public void setSql(String sql) { this.sql = sql; }
}

serviceImpl层:自己去写纯sql,

public  List<Map> getAllDynamic(GetUserAndOrgsInfo item){
        StringBuilder sb=new StringBuilder();
        sb.append("  select * from tb_user a  where a.id>11 order by **  ");
        SqlAdapter sqlstr=new SqlAdapter(sb.toString());
        return  tbUserMapper.getAllDynamic(sqlstr);
    }
mapper.xml层:

 <select id="getAllDynamic" parameterType="com.XX.entity.SqlAdapter"
                  resultType="java.util.HashMap">
                 ${sql}
 </select>

************************************************************************


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值