总结-Mybatis

    我自己总结了一下重要的Mybatis知识点。因为我老是忘记,记性不是很好。

1.#{}和${}的区别是什么?

这道题好像是Mybatis经常问到的一题,但是我看完老是忘记。

a:#{}相当于jdbc里的PrepareSatatement,在预编译阶段,会被解析为一个参数占位符?,最后的参数都会加上“”号。

b:${}替换为变量的值,数据直接显示在sql中

c:正因此#{}可以有效的防止sql注入,一般更推荐用#{},当然也有一些地方必须要用${},比如进行order by 排序时候,或者表名时候。

举个例子:

表名是字符串,用sql占位符的替换字符串时候,会加上‘’号,例如:

select * from #{tableName} where name=#{name}

预编译之后变成:

select * from ? where name=?

假设传入的参数tableName为“user”,name=“张三”,

select * from 'user' where name='张三'

这样sql语句就是不正确的,因为表名不能加引号。

所以我们可以这样写

select * from ${tableName} where user_code = #{userCode}

$符是直接拼成sql的 ,#符则会以字符串的形式 与sql进行拼接。

2.like模糊查询有几种实现方式?

第一种在java代码中添加通配符,

示例一:
01.String wildcardName = "%Smi%";  
02.List<Name> names = mapper.selectLike(wildcardName);  


01.<select id="selectLike">  
02.  select * from foo where bar like #{value}  

03.</select>

第二种在sql语句中添加通配符

示例二:
01.String wildcardName = "Smi";  
02.List<Name> names = mapper.selectLike(wildcardName); 


01.<select id="selectLike">  
02.  select * from foo where bar like '%' || '${value}' || '%'  

03.</select>  

三,批量插入

方法一:

使用<foreach>标签

方法二:

mybatis ExecutorType.BATCH

https://my.oschina.net/u/202293/blog/741949

四:传递多个参数的值

http://www.jb51.net/article/85524.htm

一共有三种

第一种:其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

第二种:存贮在map中,用map中的key,映射sql占位符中的变量名

第三种:用注解@para

五.当实体类中属性名和数据表中字段名不同时应该怎么处理?

这个题在实际开发中还是很使用的

第一种:在查询sql中定义字段名的别名,使他与属性名相同(推荐使用,代码简介易懂)

第二种:通过<resultMap>来映射字段名和属性名之间的关系

六.通常一个xml映射文件中,都会写一个Dao接口与之对应,请问这个Dao的工作原理,Dao方法里的参数不同时,可以重载吗?






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值