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

来源:互联网 发布:kik软件 编辑:程序博客网 时间:2024/06/02 01:58

前言: 在使用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>

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


原创粉丝点击