MyBatis学习(四)

简介: MyBatis学习(四)

动态SQL


一、动态SQL概述


在项目开发中,经常需要根据不同的条件拼接SQL语句,而MyBatis提供了对SQL语句动态的组装能力。MyBatis采用功能强大的基于OGNL(Object Graph Navigation Language,对象导航图语言)的表达式来动态完成SQL


属性名称 描述
if 单条件分支判断语句
choose,when,otherwise 多条件分支判断语句,相当于Java中的case when语句
trim,where,set 用于处理SQL拼装问题、辅助元素
foreach 循环语句



if语句


IUserDao.java

/**
     * 根据传入的参数条件来查询
     * @param user 查询条件,有可能有用户名、有可能有密码、有可能有编号,有可能都有
     * @return
     */
    List<User> findUserByCondition(User user);

SqlMapConfig.xml

<select id="findUserByCondition" parameterType="cn.zhongger.daomain.User" resultType="cn.zhongger.daomain.User">
        select * from users where 1=1
        <if test="user_name != null">
          and  user_name=#{user_name}
        </if>
    </select>


测试类中

@Test
    public void testFindByCondition(){
        User user = new User();
        user.setUser_name("Zhongger");
        List<User> userList = mapper.findUserByCondition(user);
        for (User u:userList
             ) {
            System.out.println(u);
        }
    }

运行结果如下:


201910191626565.png


where语句

IUserDao.java


    /**
     * 根据传入的参数条件来查询
     * @param user 查询条件,有可能有用户名、有可能有密码、有可能有编号,有可能都有
     * @return
     */
    List<User> findUserByCondition1(User user);

IUserDao.xml

<select id="findUserByCondition1" parameterType="cn.zhongger.daomain.User" resultType="cn.zhongger.daomain.User">
        select * from users
        <where>
            <if test="user_name!=null">
                and user_name=#{user_name}
            </if>
            <if test="pass_word!=null">
                and pass_word=#{pass_word}
            </if>
        </where>
    </select>

测试类

@Test
    public void testFindByCondition1(){
        User user = new User();
        user.setUser_name("Zhongger");
        user.setPass_word("211");
        List<User> userList = mapper.findUserByCondition1(user);
        for (User u:userList
                ) {
            System.out.println(u);
        }
    }

查询结果

20191019165708822.png

foreach语句

元素配置信息如下表:

属性名称 描述
collection 接口传进来的参数,可以是数组、List、Set等集合
item 循环中当前的元素
open 以什么符号将集合中的元素包装起来,如"("
separator 各个元素的分隔符
close 以什么符号将集合中的元素包装起来,如")"
index 配置的是当前元素在集合的位置下标


IUserDao.java


List<User> findUserByIds(QueryVo qv);


QueryVo.java

package cn.zhongger.daomain;
import java.util.List;
/**
 * 用于包装多个对象
 * 来作为查询条件的POJO类
 */
public class QueryVo {
    private User user;
    private List<Integer> ids;
    public List<Integer> getIds() {
        return ids;
    }
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

IUserDao.xml

<select id="findUserByIds" resultType="cn.zhongger.daomain.User" parameterType="cn.zhongger.daomain.QueryVo">
        select * from users
        <where>
           <if test="ids!=null and ids.size()>0">
              <foreach collection="ids" open="and id in (" close=")" item="uid" separator=",">
                  #{uid}
              </foreach>
           </if>
        </where>
    </select>

测试类

@Test
    public void testFindUserByIds(){
        QueryVo queryVo = new QueryVo();
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(3);
        list.add(5);
        list.add(8);
        queryVo.setIds(list);
        List<User> userList = mapper.findUserByIds(queryVo);
        for (User u:userList
             ) {
            System.out.println(u);
        }
    }

查询结果


20191019175712747.png


相关文章
|
16天前
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
|
3月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
506 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
4月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
60 5
|
5月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
5月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
5月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
5月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
5月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
5月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
8月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射