5. MyBatis 动态SQl语句 的使用

学习之前 ,你可以吧log4j日志打开,级别调为DEBUG。

动态SQL语句

Mybatis 的映射文件中,有些时候业务逻辑复杂时,我们的 SQL是动态变化的, 此时在前面的学习中我们的 SQL 就不能满足要求了,

主要有这几个标签实现动态SQL语句的编写:

 

 

 

 

动态 SQL 之 if :

我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。

查询条件是 3个都查询:

接口:    

映射文件:  

实现:

 

 

    package com.bihu.Service;

    import com.bihu.Bean.User;
    import com.bihu.Dao.UserMapper;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;

    public class UserService {
        public static void main(String[] args) throws IOException {
            User user = new User();//模拟有User数据【其实单单查一个ID推荐用Integer即可 但这里没有。】
            user.setId(99);
            user.setUsername("Plmm");
            user.setPassword("Plmm9999");

            InputStream sqlMapConfig = Resources.getResourceAsStream("SqlMapConfig.xml");
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(sqlMapConfig);
            SqlSession sqlSession = build.openSession();

            UserMapper mapper = sqlSession.getMapper(UserMapper.class); //获取动态对象
            List<User> userList = mapper.find(user);
            System.out.println(userList);


        }
    }
Service 【模拟】

 

我们运行可以发现 语句和参数都可以看到 :

 

 

 

如果我们希望改变,那么就在映射文件中写映射语句,例如我是用户 如果我只知道我的id 和密码 或 账号和密码,那么你就可以在映射文件中这样写:

<?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="com.bihu.Dao.UserMapper">

    <select id="find" parameterType="User" resultType="User" >    <!--这里的User前面有别名-->
     <!--原本语句:select * from user where id = #{id} and username = #{username} and password = #{password}-->
        select * from user
        <where>            <!--相当于where-->
            <if test="id!=null and id!= 0">
               and id = #{id}                      <!--当id不是null id不是0的时候 这条语句生效-->
            </if>

            <if test="username!=null and username!= ''">
               and username = #{username}                      <!--当username不是null username不为空的时候 这条语句生效-->
            </if>

            <if test="password!=null and password!= ''">
               and password = #{password}                      <!--当password不是null password不为空的时候 这条语句生效-->
            </if>
        </where>
    </select>



    </mapper>
映射文件

 

  查询对象

 

   语句

 

   参数

 

 

我们写任何一个条件都可以查询到了,这个就是动态sql语句,其实这个案例不好,,,好的案例比如商城的筛选功能。

 这就是 IF 标签。

 

posted @ 2021-08-15 16:39  咸瑜  阅读(118)  评论(0编辑  收藏  举报