mybatis学习之路----bind的简单使用

版权声明:原创文章,相互提高。 https://blog.csdn.net/xu1916659422/article/details/78112871

点滴记载,点滴进步,愿自己更上一层楼。

mybatis的bind元素可以执行一个表达式,创建一个变量。

可以用于模糊查询。

可以给特定参数加些特殊的业务前缀等等。

其实就是执行传入对象中的某个方法,进行特殊的业务处理。当然get set方法也是方法。

 <select id="selectUseIf" parameterType="com.soft.test.model.DynamicTestModel" resultMap="userMap">
        <if test="username != null and username neq ''">
            <bind name="pattern" value="'%' + _parameter.getUsername() + '%'" />
        </if>
        select * from t_user
        <where>
            <if test="username != null and username neq ''">
                username like #{pattern}
            </if>
        </where>
    </select>


两个属性  name  创建的变量名称,

  value 创建变量的值,包含可执行的表达式,执行一些特殊的操作。

其中的_parameter固定,代表的是传入对象,.getUsername() 传入对象中方法,

如果调用的是对象中的对象的某个方法,_parameter.getDynamicTest1Model().getString()

getDynamicTest1Model 对象中的get方法 获取对象,getString()对象中的对象中的方法。

需要注意:确保被调用的属性已经实例化了,否则会空指针异常。

      加一层if判断最适合。

测试方法

private DynamicSqlDao dynamicSqlDao;
    @Test
    public void dynamic() throws Exception {
        dynamicSqlDao = new DynamicSqlDaoImpl();
        DynamicTestModel user = new DynamicTestModel();
        user.setUsername("xiao");
        List<User> userList = dynamicSqlDao.dynamic(user);
        System.out.println(userList);
    }
测试结果:

DEBUG [main] - ==>  Preparing: select * from t_user WHERE username like ? 
DEBUG [main] - ==> Parameters: %xiao%(String)


上面说过bind里面的vlaue属性,可以执行的是一个对象的方法,对象必须实例化。下面演示一个自己的随便写的方法,通过bind调用

在model里面定义下面的方法,并在xml的bind里面使用。

    public String handleUsername(){
        String username = this.username;
        return "%" + username + "%";
    }
    <select id="selectUseIf" parameterType="com.soft.test.model.DynamicTestModel" resultMap="userMap">
        <if test="username != null and username neq ''">
            <bind name="pattern" value=" _parameter.handleUsername() " />
        </if>
        select * from t_user
        <where>
            <if test="username != null and username neq ''">
                username like #{pattern}
            </if>
        </where>
    </select>
测试结果:
DEBUG [main] - ==>  Preparing: select * from t_user WHERE username like ? 
DEBUG [main] - ==> Parameters: %xiaohon%(String)

也是可以执行的。

注意点就是可执行的方法的对象必须实例化,否则空指针。


猜你喜欢

转载自blog.csdn.net/xu1916659422/article/details/78112871