java中的接口是类吗
226
2023-06-13
Mybatis输入输出映射及动态SQL Review
一、输入映射
通过parameterType指定输入参数的类型,可以是简单类型、pojo包装类、HashMap等
1、jnZbgJ输入简单类型
select * from user where id=#{id}
2、输入pojo包装类
select * from user where username like ‘%{user.usernjnZbgJame}%'
Pojo类可根据业务需求,创建某单一实体的扩展实体,User类的扩展类-User和订单实体的综合实体。
3、输入HashMap类型
select * from user where id=#{id} and username like ‘%{username}%'
参数id 和username 对应hashmap中的key-value
二、输出映射
1、resultType类型输出
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。适用于单表查询,级联查询时使用该类型输出需要重新创建关联pojo扩展类进行映射。
如果查询出来的列名和pojo中的属性名全部不一致,就不会创建该pojo对象。只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。映射失败的查询字段返回为空。
2、resultMap类型输出
如果查询出来的列名和pojo的属性名不一致时,可使用resultMap,通过定义一个resultMap列名和pojo属性名之间作一个映射关系。得以映射输出结果。
1)定义resultMap
2)使用resultMap作为statement的输出映射类型
SELECT id id_,username username_ FROM USER WHERE id=#{value}
三、动态SQL
Mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
1、动态SQL示例
首先创建pojo类,提供该pojo对应的mapper映射文件,对crud方法分别配置
update items
id = #{record.id,jdbcType=INTEGER},
name = #{record.name,jdbcType=VARCHAR},
price = #{record.price,jdbcType=REAL},
pic = #{record.pic,jdbcType=VARCHAR},
createtime = #{record.createtime,jdbcType=TIMESTAMP},
detail = #{record.detail,jdbcType=LONGVARCHAR},
2、SQL片段
将SQL中的判断条件进行封装,提高复用
1)定义sql片段
and user.sex = #{userCustom.sex}
and user.username LIKE '%${userCustom.username}%'
id=#{user_id}
2)引用sql片段
SELECT * FROM USER
注:在使用动态sql时注意
1、#{}和${}的不同
#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。当使用#{}接收简单类型参数时,#{}中可以写成value或其它名称。当接收pojo对象值,写入对象的属性值,形如对象.属性.属性.属性...的方式获取。
${}${}表示一个拼接符号,接收输入参数,类型可以是简单类型,pojo、hashmap。接收简单类型,${}中只能写成value。接受pojo对象时,与#{}相同。注意使用$拼接,会引用sql注入,所以不建议使用${}。
2、使用where 标签,第一个and 条件为空时,自动跳过。所以可以不添加where 1=1 保证sql语法正确。
3、使用sql执行insert之后返回主键id-selectKey元素的使用&SELECT LAST_INSERT_ID() 函数的使用
1)id为自增类型
SELECT LAST_INSERT_ID()
insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
2)id非自增,uuid类型-mysql select uuid()函数
SELECT uuid()
insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
以上所述是给大家介绍的Mybatis输入输出映射及动态SQL Review,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~