Mybatis自动生成常用问题

5人阅读 评论(0) 收藏 举报
分类:

多字段查询问题

Mybatis 自动生成的代码不支持多字段的模糊查询,并且同时查询其他内容,
单个字段的模糊查询可以通过原有方法andXXXlike:Criteria.andNameLike(value);

1.查询结构

Select * from t_table where a=? and concat(‘’,’’,’’) like concat(‘’)
该查询语句中需要通过and连接 ,但是连接的内容为多个字段的模糊查询

2.添加结构

修改方法均为BeanCriteria方法中方法:
该方法利用自动生成工具生成的typeHandle属性,添加方法:

 /**
         * 多字段查询
         * @param condition
         * @param value1模糊查询,查询字段
         * @param value2
         * @param property
         */
        protected void addCriterion(String condition, Object value1, Object value2, String property,String typeHandle) {
            if (value1 == null || value2 == null) {
                throw new RuntimeException("Contact values for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value1, value2,typeHandle));
        }

修改构造函数,主要变更是添加typeHandler 的使用:

/**
         * 模糊查询
         * @param condition
         * @param value
         * @param secondValue
         * @param typeHandler contact仅支持多字段,不支持单字段
         */
        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.secondValue = secondValue;
            this.typeHandler = typeHandler;
            if (null == typeHandler || "".equals(typeHandler)) {
                this.betweenValue = true;
            }else{//多字段模糊查询
                this.listValue = true;
            }

        }

添加模糊查询方法

       /**
         * 模糊查询Criteria 添加方法
         * @param columnIds
         * @param searchText
         * @return
         */
        public Criteria andConcatListLike(List<String> columnIds,String searchText) {
            // AND CONCAT(`VALUE_CODE`, `NAME`) LIKE CONCAT('%',#{searchParam},'%')
            addCriterion("Concat", columnIds,searchText, columnIds.toString(),"concat");
            return (Criteria) this;
        }

XML文件更改:<sql id="Example_Where_Clause">中部分修改

<when test="criterion.listValue">
                    <if test="criterion.typeHandler == 'concat'">
                         and CONCAT
                        <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                            ${listItem}
                        </foreach>
                        LIKE  CONCAT('%',#{criterion.secondValue},'%')
                    </if>

                    <if test="criterion.typeHandler!='concat'">
                        and ${criterion.condition}
                        <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                            #{listItem}
                        </foreach>
                    </if>
                </when>

${}与#{}区别

注意事项:${}不会做特殊处理,#{}会将参数处理为字符串

查看评论

Mybatis 常用及复杂查询,mybatis-generator自动生成mapper接口

mybatis-generator   自动生成Mapper和Mapper.xml 没有mybatis-generator的朋友 请自行百度下载 重要的事情说三遍 每一次用mybatis-gen...
  • jieerlianshan
  • jieerlianshan
  • 2018-02-02 12:14:20
  • 185

mybatis自动生成出现的错误

今天用mybatis生成实体类的时候,不小心在generatorConfig.xml中重复配置了两次bill表导致以下的内容重复插入金了billmapper.XML文件中,导致了报以下的错。 ...
  • c466254931
  • c466254931
  • 2016-03-23 09:42:03
  • 961

mybatis 代码自动生成 配置

  • 2017年10月01日 18:50
  • 3KB
  • 下载

基于eclipse的mybatis映射代码自动生成的插件

基于各种原因,老大突然提出“以后的项目全部用mybatis代替hibernate”的要求。 咱也没什么说的,谁让别人是老大的,那话就是圣旨了。 于是,又开始了hello world……(只用过ib...
  • fu9958
  • fu9958
  • 2012-04-29 00:15:22
  • 24929

mybatis自动生成实体类和配制文件

  • 2015年08月13日 10:49
  • 1.32MB
  • 下载

Mybatis中自动生成主键

Mybatis中自动生成主键 在INSERT语句中,我们为可以自动生成(auto-generated)主键的列 STUD_ID 插入值。我们可以使用useGeneratedKeys和keyPr...
  • suwu150
  • suwu150
  • 2016-10-22 23:36:20
  • 4378

mybatis sql自动生成

本文提供了一种自动生成sql语句的方法。
  • alvin_010
  • alvin_010
  • 2016-11-11 22:41:02
  • 1066

MyBatis自动生成代码(Maven)

参照: 利用mybatis-generator自动生成代码
  • PL_12345_
  • PL_12345_
  • 2017-04-20 15:17:20
  • 1421

mybatis逆向工程自动生成generator.xml

  • 2017年11月21日 13:55
  • 2KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1044
    排名: 4万+
    最新评论