MyBatis bind标签起什么作用呢?

  • Post author:
  • Post category:其他


转自:


MyBatis bind标签起什么作用呢?



bind标签的功能



是一个拼接函数,其功能类似于MySQL中的concat函数,Oracle中的”||”符号等



例: 使用bind函数帮忙一个name的模糊查询操作

 

<select id="selectUserInfo" resultType="com.java265.po.UserInfo">
    <bind name="pattern" value="'%'+_parameter+'%'" />
    SELECT id,name,notes
    FROM UserInfo
    WHERE name like #{pattern}
</select>

“_parameter”代表传递进来的参数 
 它和通配符连接后,赋值给pattern
再结合select语句中使用这个变量进行模糊查询

bind元素的属性说明:
    value:对应传入实体类的某个字段,可以进行字符串拼接等特殊处理。
    name:给对应参数取的别名。

例 UserInfoMapper 类中方法

public List<UserInfo> selectUserInfo(UserInfo userInfo);

SQL 映射文件代码

 
<select id="selectUserInfo" resultType="com.java265.po.UserInfo">
    <bind name="pattern_name" value="'%'+name+'%'" />
    <bind name="pattern_notes" value="'%'+notes+'%'" />
    SELECT id,name,notes
    FROM UserInfo
    WHERE name like #{pattern_name}
    AND notes like #{pattern_notes}
</select>

测试代码

public class Test {
    public static void main(String[] args) throws IOException {
        // 读取配置文件mybatis-config.xml
        InputStream config = Resources.getResourceAsStream("mybatis-config.xml"); // 根据配置文件构建
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
        // 通过SqlSessionFactory创建SqlSession
        SqlSession ss = ssf.openSession();
        UserInfo userInfo = new UserInfo();
        userInfo.setname("王二");
        userInfo.setNotes("喜喜");
        List<UserInfo> userList = ss.selectList("com.java265.mapper.UserInfoMapper.selectUserInfo", userInfo);
        for (UserInfo t : userList) {
            System.out.println(t);
        }
    }
}

运行结果—

DEBUG [main] – ==> Preparing: SELECT id,name,notes FROM UserInfo WHERE name like ? AND notes like ?

DEBUG [main] – ==> Parameters: %王二%(String), %喜喜%(String)

DEBUG [main] – <== Total: 1

UserInfo[id=1,name=王二,notes=喜喜]



版权声明:本文为qq_25073223原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。