MyBatis 中SQL语句怎么样使用两种类型的参数带条件查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 中SQL语句怎么样使用两种类型的参数带条件查询相关的知识,希望对你有一定的参考价值。

具体意思就是需要两表连接查询,但是条件与两个表的列名都相关。

最简单的直接设置resultType=“map”,得到的就是一个List<Map<String,Object>>
每一个Map的key就是查询结果的列名,也就是表的字段名。当然sql语句中最好as一下

复杂一点可以自定义一个resultMap标签
<resultMap id="result" type="java.util.Map">
<result property="c1" column="column1"/>
<result property="c2" column="column2"/>
</resultMap>
其中result可以自定义,select标签中的resultMap="result",和上面的resultMap标签的id对应
property设置的是自定义的字段名称,也就是结果集中每一个Map的key
column设置查询结果的字段名称
然后通过
for(List<Map<String,Object> map:list)
map.get("c1");//获取c1对应的字段的值
。。。

参考技术A 在ibatis配置文件写sql语句的时候对于一些比如“<”,">","<>","&","
'
","
"
"是不能够识别的,并且会抛异常。
一般可以如下改写:
<
<
>
>
<>
<>
&
&
'
'
"
"

Mybatis 的输入参数学习

mybatis 的输入参数:

    指得就是parameterType的参数 这个参数就代表的sql语句中的输入参数

 

    

      sql语句中的参数使用  有两种方式 :

       使用#{} 获取:  8个基本数据类型 + String 类型 都可以随意起名 比如 #{aaa}  当然不推荐 最好写的规范一些

                select * from where stuno = #{id}  这个id只是随意起的名字

              引用数据类型 就要写 实体类中的名字 比如 我实体类中有一个属性 private Sting stuno; 那么应该写 #{stuno} 不能瞎写

                select * from where stuno= #{stuno}

       使用${} 获取   8个基本数据类型 + String 类型 必须写${value} 必须是这个 不能更改  (普通的查询不推荐使用$()形式)

                select * from where stuno = ${value}    必须这样写

              引用数据类型跟#{} 的使用一样 必须写实体类中规定的属性

                select * from where stuno= ${stuno}  

        

                模糊查询,方式一: 测试类
              select stuno,stuname,stuage from student where stuage= #{stuAge} or stuname like #{stuName}
              Student student = new Student();
              student.setStuAge(24);
              student.setStuName("%w%");
              List<Student> students = studentMapper.queryStudentBystuageOrstuName(student) ;//接口的方法->SQL

                模糊查询,方式二: xml中
              
              select stuno,stuname,stuage from student where stuage= #{stuAge} or stuname like \'%${stuName}%\'

 

                

          #{}自动给String类型加上\'\' (自动类型转换)

 

          ${} 原样输出,但是适合于 动态排序(动态字段)

 

     简单介绍下parameterType"复杂"的输入参数:  

 

     i: hasMap 类型  :parameterType的属性值填写HashMap  sql语句中可以的名字没有要求

        

              

              测试的时候 key的值需要跟sql语句中的对应

     ii:嵌套对象的查询;

          我的数据中Studen表有两个地址,分别是学校地址跟家庭地址  我的实体类Student类 只有一个        private  Address address;  我的Address类中有 两个属性 学校地址跟家庭地址

          看图:

            Student类

              

                    Student表:

              

 

            Address类:

              

                    StudentMapper.xml   我的输入参数为对象类型 我就可以使用对象属性.另一个属性

                address.stu_shcooladdress

                (Student内的属性). (Address中的属性)

              

                     测试类:

                       

 

      

以上是关于MyBatis 中SQL语句怎么样使用两种类型的参数带条件查询的主要内容,如果未能解决你的问题,请参考以下文章

关于mybatis的使用之怎么传递参数总结

Mybatis 的输入参数学习

java mybatis学习之$和#区别,mapper代理接口,动态SQL,在日志中输出mybatis的sql语句

mybatis中xml映射和方法注解两种配置sql语句的方式是不是可以同时存在

JAVA SUM SQL语句怎么拼 带动态传参的 一直报错

Mybatis 中在传参时,${} 和#{} 的区别