mybatis generator 的复合查询

阅读更多

  mybatis generator可以自动生成sqlmap文件和查询语句,但是只能完成单表的查询,自己改了下,可以实现复合查询,感觉能比自己写查询语句能方便一些吧。
下面就讲讲怎么改的,和主要区别。
先说下表结构,主表stockclothestbl,副表有很多,那其中一个colortbl表举例。
正常通过generator可以自动生成StockclothestblExample.java,ColortblExample.java和StockclothestblMapper.xml,ColortblMapper.xml,4个文件。StockclothestblExample.java和ColortblExample.java文件用于查询。新建StockclothesExample.java。用于包含2个查询对象。
public class StockclothesExample {

    public StockclothestblExample stockclothestblExample;

    public ColortblExample colortblExample;

    public StockclothestblExample getStockclothestblExample() {
        return stockclothestblExample;
    }

    public void setStockclothestblExample(StockclothestblExample stockclothestblExample) {
        this.stockclothestblExample = stockclothestblExample;
    }

    public ColortblExample getColortblExample() {
        return colortblExample;
    }

    public void setColortblExample(ColortblExample colortblExample) {
        this.colortblExample = colortblExample;
    }
}

然后开始修改StockclothestblMapper.xml和ColortblMapper.xml文件

StockclothestblMapper.xml 文件里,添加sql,仿照自动生成的单表查询。
 
 

解释下这个sql
id="selectStockclothes",是以后java端调用的方法名。
resultMap="selectStockclothesResult"  这个是返回结果,引用selectStockclothesResult,下面是selectStockclothesResult

 
     
     
     
     
     
     
     
 
其中  
就是ColortblMapper.xml文件中最上边的命名空间+ColortblMapper.xml文件中BaseResultMap的id。

继续上边,parameterType="cn.com.shopdepot.javaModel.custom.StockclothesExample" 参数就是我们自己添加的StockclothesExample.java文件的全路径。
,这个地方要修改,原来自动生成的是修改成
 。这样才能反射找到是stockclothestblExample对象里的distinct。
stockclothestblExample---是我们自己添加StockclothesExample类里的成员

 ,这个同理resultMap的,查询sql的字段,colortbl表的字段。
下面修改的相对比较多
   
       
           
               
               
           
         
   
自动生成的单表查询的以前的下面
   
     
   

添加了colortbl的查询

以前的refid="Example_Where_Clause"------变成Example_Where_Clause_Complex,Example_Where_Clause是自动生成的,
Example_Where_Clause_Complex是我自己添加的,仿照Example_Where_Clause。下面是2个表的Example_Where_Clause_Complex。
分别写在2个自己的xml中。
StockclothestblMapper.xml添加的Example_Where_Clause_Complex
 
     
       
           
             
               
                  and ${criterion.condition}
               
               
                  and ${criterion.condition} #{criterion.value}
               
               
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
               
               
                  and ${criterion.condition}
                 
                    #{listItem}
                 
               
             
           
       
     
 

StockclothestblMapper.xml自动生成的Example_Where_Clause
 
   
      collection="oredCriteria" item="criteria" separator="or" >
       
         
           
             
               
                  and ${criterion.condition}
               
               
                  and ${criterion.condition} #{criterion.value}
               
               
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
               
               
                  and ${criterion.condition}
                 
                    #{listItem}
                 
               
             
           
         
       
     
    
 
比较看下,红色的去修改的,去掉where和trim,因为2个要在最外层加,上边画的蓝色部分。
collection="oredCriteria"变成collection="stockclothestblExample.oredCriteria",因为你的指定到你的类的具体对象。

同上
ColortblMapper.xml 添加的Example_Where_Clause_Complex
 
    
      
          
            
              
                 and ${criterion.condition}
              
              
                 and ${criterion.condition} #{criterion.value}
              
              
                 and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
              
              
                 and ${criterion.condition}
                
                   #{listItem}
                
              
            
          
      
    
 
ColortblMapper.xml自动生成的Example_Where_Clause
 
   
     
       
         
           
             
               
                  and ${criterion.condition}
               
               
                  and ${criterion.condition} #{criterion.value}
               
               
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
               
               
                  and ${criterion.condition}
                 
                    #{listItem}
                 
               
             
           
         
       
     
   
 


继续上边的解释
    stockclothestblExample.orderByClause != null" >
      order by ${stockclothestblExample.orderByClause}
   
也是指定到具体对象的排序,绿色部分。

sqlmap基本就改完了,剩下没解释的,是分页limit,就不解释了,贴一下代码
 
   
      limit ${stockclothestblExample.limitStart}, ${stockclothestblExample.limitEnd}
     
 

以上基本就完成了。
然后在自动生成的StockclothestblMapper.java,添加方法
    /**
     * sqlmap id=selectStockclothes
     * 
     * @author wang
     * @param example
     * @return
     */
    List selectStockclothes(StockclothesExample example);

这样就可以使用了。大概写下

        StockclothesExample example = new StockclothesExample();

        StockclothestblExample stockclothestblExample = new StockclothestblExample();
        StockclothestblExample.Criteria stockclothestbl_criteria = stockclothestblExample.createCriteria();

        ColortblExample colortblExample = new ColortblExample();
        ColortblExample.Criteria colortbl_criteria = colortblExample.createCriteria();
        if (null != selBrand && !"".equals(selBrand)) {
            stockclothestbl_criteria.andBrandLike("%" + selBrand + "%");
        }
        if (null != selColor && !"".equals(selColor)) {
            colortbl_criteria.andColorLike("%" + selColor + "%");
        }
        example.setStockclothestblExample(stockclothestblExample);
        example.setColortblExample(colortblExample);
        .....   中间省略.......
      List list=stockclothestblMapper.selectStockclothes(example)

Stockclothes类封装的genertor自动生成的tbl

结束!

你可能感兴趣的:(like,mybatis,generator,Criteria)