mybatis常用条件查询总结(迭代一)

目录

1.mybatis中大于等于小于等于的写法

2.mybatis动态查询条件组装

3.mybatis批量条件

4.mybatis时间查询实现分页总结

1.mybatis中大于等于小于等于的写法

第一种写法(1):

原符号       <        <=      >       >=       &        '        "
替换符号    <    <=   >    >=   &   '  "
例如:sql如下:
create_date_time >= #{startTime} and  create_date_time <= #{endTime}

第二种写法(2):

大于等于
<![CDATA[ >= ]]>
小于等于
<![CDATA[ <= ]]>
例如:sql如下:
create_date_time <![CDATA[ >= ]]> #{startTime} and  create_date_time <![CDATA[ <= ]]> #{endTime}

2.mybatis动态查询条件组装如下:

 <!--  if(判断参数) - 将实体类不为空的属性作为where条件 -->  
    <select id="getStudentList_if" resultMap="resultMap_studentEntity" parameterType="liming.student.manager.data.model.StudentEntity">  
        SELECT ST.STUDENT_ID,  
               ST.STUDENT_NAME,  
               ST.STUDENT_SEX,  
               ST.STUDENT_BIRTHDAY,  
               ST.STUDENT_PHOTO,  
               ST.CLASS_ID,  
               ST.PLACE_ID  
          FROM STUDENT_TBL ST   
         WHERE  
        <if test="studentName !=null ">  
            ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')  
        </if>  
        <if test="studentSex != null and studentSex != '' ">  
            AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}  
        </if>  
        <if test="studentBirthday != null ">  
            AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}  
        </if>  
        <if test="classId != null and classId!= '' ">  
            AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR}  
        </if>  
        <if test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' ">  
            AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR}  
        </if>  
        <if test="placeId != null and placeId != '' ">  
            AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR}  
        </if>  
        <if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' ">  
            AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}  
        </if>  
        <if test="studentId != null and studentId != '' ">  
            AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR}  
        </if>   
    </select> 

3.mybatis批量条件

在Mybatis的xml配置中使用集合,主要是用到了foreach动态语句。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束。
说明:以下示例关于MySQL数据库。由于**传入的参数是多个**,因此把它们封装成一个Map了,当然单参数也可以用Map。.xml文件的部分代码如下:
<update id="updateMessage" parameterType="java.util.Map"> update cx_customer_message set MODIFYTIME = SYSDATE() where MEMBERID = #{memberId, jdbcType=VARCHAR}  and MESSAGE_CLASSIFY = #{messageClassify, jdbcType=VARCHAR}  and MESSAGE_CODE in <foreach collection="messageCode" item="item" index="index" open="(" separator="," close=")"> #{item,jdbcType=VARCHAR}  </foreach></update>


MessageMapper.Java
public interface MessageMapper{ //更新 public int updateMessage(Map<String, Object> message);}

MessageManager.java
public interface MessageManager { public int updateMessage(MessageReq messageReq); }

MessageManagerImpl.java
@Componentpublic class MessageManagerImpl implements MessageManager { @Autowired private MessageMapper messageMapper; @Override public int updateMessage(MessageReq messageReq) { int affectRows; Map<String, Object> message= new HashMap<String, Object>(); message.put("memberId", messageReq.getMemberId()); message.put("messageClassify",messageReq.getMessageClassify()); message.put("messageCode", messageReq.getMessageCode()); affectRows = messageMapper.updateDefualtMessage(message); return affectRows; } }

![](http://static.blog.csdn.net/images/save_snippets.png)

collection属性是必须指定的,在不同情况下该属性的值是不一样的:
如上述例子,传入的参数是多个时,collection属性值为传入List或array在**map里面的key**;传入的是单参数且参数类型是List时,collection属性值为list;传入的是单参数且参数类型array时,collection的属性值为array。

3.1mybatis批量插入

1. 在接口UserMapper中添加批量增加方法。

**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
    * 批量增加操作 
    * @param users 
    */  
   public void batchInsertUsers(List<User> users);  

2.在User.xml中添加批量增加操作的配置。
**[html]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

<!-- 批量增加操作 -->  
    <insert id="batchInsertUsers" parameterType="java.util.List">  
        insert into mhc_user(userName,password) values  
        <foreach collection="list" item="item" index="index" separator=",">  
            (#{item.userName},#{item.password})  
        </foreach>  
    </insert>  

       由于批量增加的方法中参数为List,所以parameterType的值为[Java](http://lib.csdn.net/base/java).util.List。
3. 创建批量操作的工具类BatchDataUtils,编写批量增加方法。
**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
     * 批量增加操作 
     * @param users 
     */  
    public static void batchInsertUsers(List<User> users){  
          
        SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();  
        SqlSession session = ssf.openSession();  
          
        try {  
            UserMapper userMapper = session.getMapper(UserMapper.class);  
            userMapper.batchInsertUsers(users);  
            session.commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            MyBatisUtil.closeSession(session);  
        }  
    }  

3.2批量删除条件

**批量删除操作步骤**
1. 在接口UserMapper中添加删除增加方法。
**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
     * 批量删除操作 
     * @param ids 
     */  
    public void batchDeleteUsers(List ids);  

2.在User.xml中添加批量增加操作的配置。
**[html]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

<!-- 批量删除操作 -->  
    <delete id="batchDeleteUsers" parameterType="java.util.List">  
        delete from mhc_user where id in  
        <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">  
            #{item}  
        </foreach>  
    </delete>  

由于批量删除的方法中参数为List,所以parameterType的值为java.util.List。
3. 在批量操作的工具类BatchDataUtils中编写批量删除方法。
**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
     * 批量删除操作 
     * @param ids 
     */  
    public static void batchDeleteUsers(List ids){  
        SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();  
        SqlSession session = ssf.openSession();  
          
        try {  
            UserMapper userMapper = session.getMapper(UserMapper.class);  
            userMapper.batchDeleteUsers(ids);  
            session.commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            MyBatisUtil.closeSession(session);  
        }  
} 

3.3批量查询操作步骤

1. 在接口UserMapper中添加批量查询方法。
**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
    * 批量查询操作  
    * @param ids 
    * @return 
    */  
    public List<User> batchSelectUsers(List ids);  

2.在User.xml中添加批量查询操作的配置。
**[html]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

<!-- 批量查询操作 -->  
    <select id="batchSelectUsers" resultType="User">  
        select *  
        from mhc_user where id in  
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">  
        #{item}  
        </foreach>  
    </select>  

由于批量查询的方法的返回为List<User>,所以resultType的值为User,即com.mahaochen.mybatis.domain.User。详见configuration.xml中。
**[html]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

<typeAliases>  
        <!-- 注册实体Bean -->  
        <typeAlias type="com.mahaochen.mybatis.domain.User" alias="User"/>  
</typeAliases>  

3. 创建批量操作的工具类BatchDataUtils,编写批量查询方法。

**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
    * 批量查询操作  
    * @param ids 
    * @return 
    */  
    public static List<User> batchSelectUsers(List ids){  
        SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();  
        SqlSession session = ssf.openSession();  
        List<User> users = null;  
        try {  
            UserMapper userMapper = session.getMapper(UserMapper.class);  
            users = userMapper.batchSelectUsers(ids);  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            MyBatisUtil.closeSession(session);  
        }  
        return users;  
    }  
}  

3.4批量更细操作步骤

1. 在接口UserMapper中添加批量增加方法。
**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
     * 批量更新操作  
     * @param ids 
     */  
    public void batchUpdateUsers(List users);  

2.在User.xml中添加批量更新操作的配置。
**[html]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

<!-- 批量更新操作 -->  
    <!-- FOR MySQL mysql需要数据库连接配置&allowMultiQueries=true   
        例如:jdbc:mysql://127.0.0.1:3306/mhc?allowMultiQueries=true -->  
    <update id="batchUpdateUsers" parameterType="java.util.List">  
        <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
        update mhc_user   
        <set>  
            userName = #{item.userName}, password = #{item.password}  
        </set>  
        where id = #{item.id}  
        </foreach>  
    </update>  
      
    <!-- 【扩展知识】 FOR Oracle  有以下三种方式-->  
    <!-- 方式一 -->  
    <update id="batchUpdateUsers01" parameterType="java.util.List">  
        <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";" >   
            update mhc_user   
            <set>         
                userName = #{item.userName}, password = #{item.password}  
            </set>  
            where id = #{item.id}  
        </foreach>  
    </update>  
    <!-- 方式二 -->  
    <update id="batchUpdateUsers02" parameterType="java.util.List">  
        <foreach collection="list" item="item" index="index" open="begin" close="end;" separator="" >   
            update mhc_user   
            <set>         
                userName = #{item.userName}, password = #{item.password}  
            </set>  
            where id = #{item.id};  
        </foreach>  
    </update>  
    <!-- 方式三 -->  
    <update id="batchUpdateUsers03" parameterType="java.util.List">  
        begin  
        <foreach collection="list" item="item" index="index" separator="" >   
            update mhc_user   
            <set>         
                userName = #{item.userName}, password = #{item.password}  
            </set>  
            where id = #{item.id};  
        </foreach>  
        end;  
    </update>  

         由于批量更新的方法中参数为List,所以parameterType的值为java.util.List。

3. 创建批量操作的工具类BatchDataUtils,编写批量更新方法。
**[java]** [view plain](http://blog.csdn.net/mahoking/article/details/46811865#) [copy](http://blog.csdn.net/mahoking/article/details/46811865#)
 [print](http://blog.csdn.net/mahoking/article/details/46811865#)[?](http://blog.csdn.net/mahoking/article/details/46811865#)

/** 
    * 批量更新操作  
    * @param users 
    */  
   public static void batchUpdateUsers(List users){  
    SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();  
    SqlSession session = ssf.openSession();  
      
    try {  
        UserMapper userMapper = session.getMapper(UserMapper.class);  
        userMapper.batchUpdateUsers(users);  
        session.commit();  
    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        MyBatisUtil.closeSession(session);  
    }  
   } 

4mybatis分页查询实现总结

4.1分页实现根据时间的范围
<!-- param_where_query 查询条件 -->
    <sql id="param_where_query">
        <trim prefix="(" suffix=")" prefixOverrides="and">
            <!-- 自增主键 -->
            <if test="id != null">
                and id in
                <foreach item="item" index="index" collection="id" open="("
                    separator="," close=")">#{item}</foreach>
            </if>
            <!-- memberId -->
            <if test="memberId != null">
                and member_id in
                 <foreach item="item_member" index="index" collection="memberId" open="(" separator="," close=")">#{item_member}</foreach>
            </if>
            <!-- 手机号 -->
            <if test="mobile != null">
                and mobile = #{mobile}
            </if>
            <!-- 公司名称 -->
            <if test="companyName != null">
                and company_name like CONCAT('%',#{companyName},'%')
            </if>
            
            <!-- 公司名称全称 -->
            <if test="fullCompanyName != null">
                and company_name = #{fullCompanyName}
            </if>
            <!-- 池类型(1:会员池,2:客户池) -->
            <if test="type != null">
                and type = #{type}
            </if>
            <!-- 起始时间 -->
            <if test="startPoolCreate != null">
                and pool_create &gt;= #{startPoolCreate}
            </if>
            <!-- 结束时间 -->
            <if test="endPoolCreate != null">
                and pool_create &lt;= #{endPoolCreate}
            </if>
        </trim>
    </sql>

<select id="query" parameterType="com.wuage.clm.param.ClmPoolParam"
        resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from clm_pool
        <where>
            <include refid="param_where_query" />
        </where>
        order by id desc
        limit #{startNum}, #{pageSize}
    </select>
    
入参的类型中的时间处理
图片.png

4.2查询出数据后的根据count进行分页

                    int totalPage =0,pageSize=10;
                    int count= clmCirculationRes.getCount();
                    totalPage = (count+ pageSize - 1) / pageSize;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容