基础框架-Mybatis知识点

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

答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换

#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,取值方式为使用反射从参数对象中获取属性值

5.2.2Xml映射文件中,除了常见的select,insert,update,delete标签,还有哪些标签?

答:<resultMap>,<parameterMap>,<sql>,<include>,<selectKey>,加上动态sql的9个标签,trim,where,set,foreach,if,choose,when,otherwise,bind等,通过<include>标签引入sql,<selectKey>为不支持自增的主键生成策略标签 

5.2.3最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名就是映射文件中的MappeedStatement的id值,接口方法内的参数,就是传给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可委一定位一个MapperStatement

在Mybatis中,每一个<select>,<insert>,<update>,<delete>标签,都会被解析为一个MappedStatement。

  • Mapper层方法语法上可以重载,但是重载之后的多个方法对应Xml中的一个Id,Xml中id不可重复;所以要求每个方法的参数都可以和xml中的传参数对应。(但实际使用中目前未使用过Mapper层方法重载)
  • 底层:在Mybaits初始化解析所有Xml时,会维护一个Map(Configuration#mappedStatements),key是Xml中的【命名空间+id】(命名空间namespace就是对应Mapper类的全限定名),在进行Mapper层方法调用时,会以所在类的【全限定名+方法名】(和方法的参数无关)为key从mappedStatements中获取对应的MappedStatement,然后执行对应的Sql。

5.2.4Mybatis是如何进行分页的?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值