• 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=哈哈)
  • 相关阅读:
    Django创建模型。
    Kubernetes APIService资源
    应用系统管理风险
    [Golang] go list命令查看依赖的版本
    [Golang] 升级gin框架和jwtgo
    [Git] 解决git错误 OpenSSL SSL_read: Connection was reset, errno 10054
    [Github] 配置ssh免密码登录解决 You've successfully authenticated, but GitHub does not provide shell access.
    go循环遍历小坑
    Go 字符串拼接6种,最快的方式 strings.builder
    uniapp安卓真机调试提示检测不到手机【解决办法】
  • 原文地址:https://www.cnblogs.com/nayitian/p/15166631.html
Copyright © 2020-2023  润新知