mybatis无脑增删改查法

使用mybatis generator 生成mapper、po以后最好不要修改这些自动生成的文件。尤其是在开发阶段,每次表字段改动,重新生成mapper、po的时候,还要把新增的SQL从旧文件拷出来粘贴到新文件中,非常麻烦。若不改动generator生成的文件,我们自己写的SQL应该写到那里去呢?

首先看下生成的mapper.xml

mybatis无脑增删改查法_第1张图片

上图中SpringCache.xml的namespace为SpringCache.java的全名。

事实上mybatis的mapper.xml和mapper.java要建立映射关系只要满足以下条件:

    1、XxMapper.xml和XxMapper.java文件名相同。

    2、编译之后生成的XxMapper.xml、XxMapper.class在同一个文件夹中

    3、XxMapper.xml的namespace(命名空间)为XxMapper.java的全名

由此想到,可以同一个目录中新建一个拓展的xml:XxExpandMapper.xml和一个拓展的java:XxExpandMapper.java,将xml中的namespace指定为java的全名,这样就建立xml和java的映射关系了。

如下图:

mybatis无脑增删改查法_第2张图片

xml和java映射上了,那么java中的方法和xml中的SQL如何映射呢?

映射规则如下:

    1、xml中SQL语句的id就是java方法名。

    2、xml中SQL语句的resultType、resultMap就是java方法的返回值类型(返回多条则是List中元素的类型)

    3、java方法的参数在SQL中用#{},${}获取。其中${}存在SQL注入风险。

mybatis无脑增删改查法_第3张图片

在上图的,我们自定义的SQL写在了SpringCacheExpandMapper.xml中,调用SpringCacheExpandMapper来测试。结果如下:

mybatis无脑增删改查法_第4张图片

 

补充:

  mybatis无脑增删改查法_第5张图片

如上图:可以使用子类SpringCacheExpandMapper调用父类的selectByPrimaryKey方法,不必注入SpringCacheMapper。

 

mybatis无脑增删改查法_第6张图片

如上图:拓展的xml可以通过extends继承基础xml的resultMap等

 

mybatis无脑增删改查法_第7张图片

如上图:include可以通过refid引用其他xml中定义好的SQL片段。

 

总结:新建拓展的java和xml,通过namespace把Java和xml映射上,把自定义的SQL写到这些文件中,生成的文件不要动。

 

还没完,Part 2

mybatis generator默认会生成一些条件查询的方法,不建议禁用。generatorConfig.xml配置如下:




  
    
    
    
      
    
    
    
    
      
    
    
      
      
    
    
      
    
    
      
    
    
    

 

生成的mapper.java如下:

 

public interface SpringCacheMapper {
    long countByExample(SpringCacheExample example);

    int deleteByExample(SpringCacheExample example);

    int deleteByPrimaryKey(String id);

    int insert(SpringCache record);

    int insertSelective(SpringCache record);

    List selectByExample(SpringCacheExample example);

    SpringCache selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(SpringCache record);

    int updateByPrimaryKey(SpringCache record);
}

 

简单使用下mybatis generator的条件查询,具体用法请自行百度、Google。

 

 

//简单展示Example、Criteria
@Test
public void test2() {
   SpringCacheExample example = new SpringCacheExample();
   SpringCacheExample.Criteria criteria = example.createCriteria();
   // date倒序排列
     example.setOrderByClause("date DESC");
   Integer num = 100;
   //num小于100
   if (num != null){
      criteria.andNumLessThan( num);
   }
   List list = springCacheExpandMapper.selectByExample(example);
   System.out.println(list);
}

打印的SQL如下:

 

mybatis无脑增删改查法_第8张图片

如上图所示,criteria对象的方法虽然很多,但其实都很好记,完全可以望文生义,方法名无非就是and表字段条件

推荐使用mybatis的Examle、criteria作为条件查询,虽然大家也能写出通用的条件查询方法,但是你写一两次过过瘾就行了,重复造这些单表增删改查的轮子,有意思吗?!

补充:

    updateByPrimaryKeySelective方法有bug不建议使用,如下:

  
    update spring_cache_relevance
    
      
      
        name = #{name,jdbcType=VARCHAR},
      
      
        relevance_text = #{relevanceText,jdbcType=VARCHAR},
      
    
    where id = #{id,jdbcType=VARCHAR}
  
 

暂时未知晓如何配置generatorConfig.xml能去掉updateByPrimaryKeySelective但保留updateByPrimaryKey,知道的朋友请留言。

updateByExample也是使用if test="name != null"这种判断,所以在generatorConfig.xml中配置enableUpdateByExample="false",不生成updateByExample

示例代码下载:https://pan.baidu.com/s/1n51sNZIkfASpNwuauk4A8g

 

 

 

你可能感兴趣的:(mybatis无脑增删改查法)