mybatis相关

mybatis面试汇总:
jdbc通过参数绑定的形式防止sql注入
mybatis

1、#{}和${}的区别:
	#{} 占位符:预编译,参数占位符 ?,防止sql注入
	${} 拼接符:编译,字符串拼接
	注意事项:
	order by 和 like 在使用时只能使用$()拼接符:
		用 #{}会导致sql语句中多个 ’ ’ ,sql语句失效.
	limit可以使用#{}
2、当实体类中的属性名和表中的字段名不一样 ,
	第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。
	第2种: 通过<resultMap>来映射字段名和实体类属性名的一一对应的关系。
		 <select id="getOrder" parameterType="int" resultMap="orderresultmap">
			select * from orders where order_id=#{id}
		</select>
	 
	   <resultMap type=”me.gacl.domain.order” id=”orderresultmap”>
			<!–用id属性来映射主键字段–>
			<id property=”id” column=”order_id”>
	 
			<!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–>
			<result property = “orderno” column =”order_no”/>
			<result property=”price” column=”order_price” />
		</reslutMap>
3、模糊查询like语句
	第1种:在Java代码中添加sql通配符。(#())
	第2种:在sql语句中拼接通配符,会引起sql注入($())
4、如何获取自动生成的(主)键值?
	insert 方法总是返回一个int值 ,这个值代表的是插入的行数。
	如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传入的参数对象中。
	
22、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
答:Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。	它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。
当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

15、Mybatis动态sql有什么用?执行原理?有哪些动态sql?
Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接sql的功能。
Mybatis提供了9种动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind。

16、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
答:<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,其中<sql>为sql片段标签,通过<include>标签引入sql片段,<selectKey>为不支持自增的主键生成策略标签。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值