zoukankan      html  css  js  c++  java
  • MyBatis传递多参数进行查询的四种方法

    假设t_user_test表数据结构及数据如下,我们需要对此表按user_name和sex进行查询,有如下几种方式:

     

    方式一:顺序传递参数法

    1. Mapper映射文件写法参考如下代码

        <select id="selectUserByUsernameAndSex"
            resultType="TUser">
            select * from t_user_test where user_name = #{arg0} and sex = #{arg1}
        </select>

    不同版本,传递的参数名称不同,低版本用 #{0}。如果把上面的{arg0}更改为{userName},则程序报错,内容如下:

    org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'useName' not found. Available parameters are [arg1, arg0, param1, param2]
    ### Cause: org.apache.ibatis.binding.BindingException: Parameter 'useName' not found. Available parameters are [arg1, arg0, param1, param2]

    说明:本例已经在MyBatis配置文件中,用了别名映射,下同。

        <typeAliases> 
           <typeAlias alias="TUser" type="com.clzhang.mybatis.entity.TUser"/> 
        </typeAliases> 

    2. 接口文件写法参考如下代码

        List<TUser> selectUserByUsernameAndSex(String userName, Integer sex);

    3. 调用者按如下方式调用

            List<TUser> users = mapper.selectUserByUsernameAndSex("张三", 0);
            for (TUser tUser : users) {
                System.out.println(tUser);
            }

    4. 结果输出

    TUser(id=4, userName=张三, realName=假张三, sex=0, mobile=13900009999, email=false@163.com, note=哈哈)

    此种方式的缺点是参数不够直观,小型项目或许可以使用。

    二、@Param注解传递参数法

    1. Mapper映射文件写法参考如下代码

        <select id="selectUserByUsernameAndSex"
            resultType="TUser">
            select * from t_user_test where user_name = #{userName} and sex = #{sex}
        </select>

    2. 接口文件写法参考如下代码

    import org.apache.ibatis.annotations.Param;
        List<TUser> selectUserByUsernameAndSex(@Param("userName") String userName, @Param("sex") Integer sex);

    调用者其它不变。此种方式优点是参数名称比较直观,推荐使用。

    三、Map方式传递参数法

    1. Mapper映射文件写法参考如下代码

        <select id="selectUserByUsernameAndSex" parameterType="java.util.Map"
            resultType="TUser">
            select * from t_user_test where user_name = #{userName} and sex = #{sex}
        </select>

    2. 接口文件写法参考如下代码 

        List<TUser> selectUserByUsernameAndSex(Map<String, Object> params);

    3. 调用者按如下方式调用

            Map<String, Object> params = new HashMap<String, Object>();
            params.put("userName", "张三");
            params.put("sex", 0);
            List<TUser> users = mapper.selectUserByUsernameAndSex(params);
            for (TUser tUser : users) {
                System.out.println(tUser);
            }

    4. 结果输出

    TUser(id=4, userName=张三, realName=假张三, sex=0, mobile=13900009999, email=false@163.com, note=哈哈)

    四、Java对象传递参数法

    1. Mapper映射文件写法参考如下代码

        <select id="selectUserByUsernameAndSex" parameterType="TUser"
            resultType="TUser">
            select * from t_user_test where user_name = #{userName} and sex = #{sex}
        </select>

    2. 接口文件写法参考如下代码 

        List<TUser> selectUserByUsernameAndSex(TUser user);

    3. 调用者按如下方式调用

            TUser queryUser = new TUser();
            queryUser.setUserName("张三");
            queryUser.setSex((byte)0);
            List<TUser> users = mapper.selectUserByUsernameAndSex(queryUser);
            for (TUser tUser : users) {
                System.out.println(tUser);
            }

    4. 结果输出

    TUser(id=4, userName=张三, realName=假张三, sex=0, mobile=13900009999, email=false@163.com, note=哈哈)
  • 相关阅读:
    正则获取HTML代码中img的src地址
    System.Diagnostics.Process 启动进程资源或调用外部的命令的使用
    按位取反运算符~
    Nhibernate Query By Criteria 条件查询
    Unit Test测试框架中的测试的执行顺序
    Jquery自定义插件之$.extend()、$.fn和$.fn.extend()
    如何采集QQ群中所有成员QQ号码
    Sql server使用Merge关键字做插入或更新操作
    c#类库和可移值类库的区别
    VS代码管理插件AnkhSvn
  • 原文地址:https://www.cnblogs.com/nayitian/p/15166631.html
Copyright © 2011-2022 走看看