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语句怎么样使用两种类型的参数带条件查询的主要内容,如果未能解决你的问题,请参考以下文章
java mybatis学习之$和#区别,mapper代理接口,动态SQL,在日志中输出mybatis的sql语句