关于mybatis返回结果映射和条件查询和ResultMap ResultMap
基本使⽤
适合使⽤返回值是⾃定义实体类的情况
映射实体类的数据类型
id:resultMap的唯⼀标识
column: 库表的字段名
property: 实体类⾥的属性名
resultType可以直接返回给出的返回值类型,⽐如String、int、Map,等等,其中返回List也是将返回类型定义为Map,然后mybatis会⾃动将这些map放在⼀个List中,resultType还可以是⼀个对象
<?xml version="1.0" encoding="UTF-8" ?>
dreamweaver网页设计机考答案<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<!-- namespace:当前库表映射⽂件的命名空间,唯⼀的不能重复 -->
<mapper namespace="com.hao947.sql.mapper.PersonMapper">
<!-- type:映射实体类的数据类型 id:resultMap的唯⼀标识 -->
<resultMap type="person" id="BaseResultMap">
<!-- column:库表的字段名 property:实体类⾥的属性名 -->
mysql语句的执行顺序<id column="person_id" property="personId" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="person_addr" property="personAddr" />
<result column="birthday" property="birthday" />
</resultMap>
<!--id:当前sql的唯⼀标识
parameterType:输⼊参数的数据类型
resultType:返回值的数据类型
#{}:⽤来接受参数的,如果是传递⼀个参数#{id}内容任意,如果是多个参数就有⼀定的规则,采⽤的是预编译的形式select
* from person p where p.id = ? ,安全性很⾼ -->
<!-- sql语句返回值类型使⽤resultMap -->
<select id="selectPersonById" parameterType="java.lang.Integer"
resultMap="BaseResultMap">
select * from person p where p.person_id = #{id}
</select>
<!-- resultMap:适合使⽤返回值是⾃定义实体类的情况
resultType:适合使⽤返回值的数据类型是⾮⾃定义的,即jdk的提供的类型 -->
<select id="selectPersonCount" resultType="java.lang.Integer">
select count(*) from
person
</select>
vim入门<select id="selectPersonByIdWithMap" parameterType="java.lang.Integer"
resultType="java.util.Map">
select * from person p where p.person_id= #{id}
</select>软件编程零基础学会
</mapper>
resultType是结果集的⼀个映射,可以简单的写成resultType="map"或者resultType="hashmap",其中"map"和"hashmap"都是mybatis能够识别的别名,写成"java.util.HashMap"当然也没有问题,在java代码端,是这么写的:
List<Map<String,Object>> list =sqlSession.selectList("st");
for(Map<String,Object> map :list){
System.out.("id"));  //通过("key"),就可以获取你需要的结果。
}
****************************************MyBatis如何写条件查询**************************************************
基本标签语句
<select id="" parameterType="" resultMap="xxResultMap">
sql语句
汉字转unicode软件</select>
id标识该查询;parameterType指参数类型;resultMap指返回类型,这⾥与下⾯设置的resultMap关联。
soapclient ssrf作为查询语句,返回结果是⼀个List,当选择性的输出字段时,需要添加⼀个ResultMap属性与之关联。id标识主键,result标识字段。property指向实体类的属性,column指向数据库列名。
拼接条件之前需要加where关键字。
因为可能没有查询条件,所以写成where 1=1。或者⽤查询的必要条件拼接。
拼接条件为“=”的情况
⽤ if 判断是否为空,不为空则⽤AND拼接。变量写成#{xx}
拼接条件为"LIKE"模糊查询,适⽤于MySql数据库
if 条件⼀样,另外要⽤concat作拼接。
like concat('%', #{userName}, '%')
oracle数据库中,模糊查询报错“参数缺失”。
模糊查询的格式问题
法⼀:⽤"||"分隔。like '%' || #{userName} || '%'
法⼆:like concat(concat('%', #{userName}), '%')
Mybatis中实现传统多条件查询
数据表student如下:
已有的数据如下:
我们现在进⾏如下查询:
查询表中grade>70 age>20 的⼥⽣
SQL语句⾃然如下:
select * from student where sex="⼥" and grade>70 and age>20;在数据库中直接执⾏这句SQL语句:
现在使⽤Mybatis完成这个操作:
在l中添加如下配置语句:
测试语句:
因为传⼊的参数有多个 所以需要使⽤Map来传递
可以得到刚才的答案
这样的查询引出了下⾯三个问题:
1.⽆法灵活的添加条件
2.如果只想按照年龄与成绩查询 不能在sex处赋值为空 仍需要新的SQL语句
3.如果采⽤拼接的⽅式(其实这样也算改变了SQL语句)⾮常容易产⽣格式错误或者顺序错误动态SQL:if
应⽤场景1:
假设我们现在需要对student表进⾏两种操作:
查询所有信息
根据专业名进⾏模糊查询
按照现在的⽅式 我们必须提供2条SQL语句分别应对这两种操作
此时我们介绍⼀下动态SQL中的if标签在这⾥的使⽤:
我们来解释⼀下这条SQL语句:
这条语句意味着:如果没有传⼊参数major 那么执⾏select * from student 即查询所有
如果传⼊了参数majo 那么执⾏这句模糊查询
注意:这⾥的<if test>中的test仅为语法 实际等于if()
测试⼀下这两种情况:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。