为了账号安全,请及时绑定邮箱和手机立即绑定

MyBatis3.2.x从入门到精通之第六章

标签:
JAVA MySQL

一、基本概念
mybtais核心:对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
二、还是老样子先写需求:
用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。
对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。
三、上代码
mapp.xml内容如下:注意看代码里面的注释

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.mybatis.mapper.UserMapper">

    <select id="findUserList" parameterType="cn.mybatis.po.UserQueryVo"
        resultType="cn.mybatis.po.UserCustom">
        select * from user
        <where>
        <!-- 引入SQL片段 -->
            <include refid="query_user_where" />
        </where>
    </select>

    <select id="findUserCount" parameterType="cn.mybatis.po.UserQueryVo"
        resultType="int">
        select count(*) from user
        <!-- where标签可以去掉查询条件中的第一个and关键字 -->
        <where>
        <!-- 引入SQL片段 -->
            <include refid="query_user_where" />
        <!-- 还可以引用其他sql片段 -->
        </where>
    </select>

    <!-- 
        定义sql片段 id:唯一标识 
        经验:是基于单表来定义sql片段,这样这个sql片段重用性才高 在sql片段中不要包括where关键字
    -->
    <sql id="query_user_where">
        <if test="userCustom != null">
            <if test="userCustom.sex !=null || userCustom.sex !=''">
                and user.sex = #{userCustom.sex}
            </if>
            <if test="userCustom.username !=null||userCustom.username !=''">
                and user.username like '%${userCustom.username}%'
            </if>
        </if>
        <if test="ids !=null">
        <!-- 
            使用foreach遍历传入ids
            collection:指定输入对象中集合属性
            item:每次遍历生成对象
            open:开始遍历时拼接的串
            close:结束遍历时拼接的串
            separator分隔符:遍历的两个对象中需要拼接的串
        -->
         <!-- 
             使用实现下边的sql拼接
             AND (ID =1 or ID=10 or ID=16)

             <foreach collection="ids" item="user_id" open="and(" close=")" separator="or">
                    id=#{user_id}
             </foreach>
         -->
             <!-- 实现 and id IN(1,10,16)拼接 -->
             <foreach collection="ids" item="user_id" open=" and id IN(" close=")" separator=",">
                    #{user_id}
             </foreach>
        </if>
    </sql>
</mapper>

mapper.java:

package cn.mybatis.mapper;

import java.util.List;

import cn.mybatis.po.UserCustom;
import cn.mybatis.po.UserQueryVo;
import cn.mybatis.pojo.User;

/**
 * 输出映射
 * 
 * @author Hanson
 * 
 */
public interface UserMapper {
    // 用户的信息综合查询
    public List<UserCustom> findUserList(UserQueryVo userQueryVo)
            throws Exception;

    // 用户信息的总数
    public int findUserCount(UserQueryVo userQueryVo) throws Exception;
}

测试代码:

@Test
    public void testFindUserList() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        UserCustom userCustom = new UserCustom();
        userCustom.setSex("1");
        /*userCustom.setUsername("张三丰");*/

        List<Integer> ids = new ArrayList<Integer>();
        ids.add(1);
        ids.add(10);
        ids.add(16);
        UserQueryVo userQueryVo = new UserQueryVo();
        userQueryVo.setUserCustom(userCustom);
        userQueryVo.setIds(ids);
        List<UserCustom> list = userMapper.findUserList(userQueryVo);
        for(User user:list){
        System.out.println(user);
        }
    }

    @Test
    public void testFindUserConut() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        UserCustom userCustom = new UserCustom();
        userCustom.setSex("1");
        /*userCustom.setUsername("张三丰");*/
        UserQueryVo userQueryVo = new UserQueryVo();
        userQueryVo.setUserCustom(userCustom);
        int list = userMapper.findUserCount(userQueryVo);
        System.out.println(list);
    }
知识点基本上都在注释里面。如果是看了前面几张结合起来,把代码直接复制拷贝是能够直接运行的。

本文为慕课网作者原创,转载请标明【原文作者及本文链接地址】。侵权必究,谢谢合作!

点击查看更多内容
13人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消