MyBatis框架

1.#{}和${}的区别

        #{}:主要用于SQL语句中参数的动态替换。MyBatis在处理#{}时,会将其解析为一个JDBC预编译语句(prepared statement)的参数占位符。这样做的好处是可以防止SQL注入,因为预编译语句在编译时会将参数值视为常量,从而避免了执行时恶意代码的注入。

        ${}:主要用于SQL语句中的字符串替换。{}会被直接替换为变量的值,不会进行预编译处理,因此在使用时需要格外注意防止SQL注入。同时,${}也不会对字符串类型的数据自动加引号,需要用户自行处理。

2.xml映射文件中,有哪些常见标签

        有select、delete、update、insert、resultMap、parameterMap、sql、include、selectKey这些标签。

3.Dao接口的工作原理是什么,Dao接口里的方法,参数不同时,方法能重载吗

       工作原理:通过定义接口方法,映射sql方法,使用JDK动态代理生成代理对象,执行sql语句并返回结果,实现了JAVA接口和数据库操作之间的无缝衔接。

        可以重载,但是MyBatis里的xml文件中的id不允许重复

4.MyBaits是如何实现分页的,分页插件的原理是什么

        1.使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页

        2.在sql内直接书写带物理分页的参数来完成物理分页功能

        3.使用分页插件来完成分页

        分页插件的原理:使用MyBaits提供的插件接口,实现自定义插件,在插件的拦截方法内拦截带执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数

5.MyBatis动态sql是做什么的,都有哪些动态sql,动态sql的执行原理

        动态sql可以让我们在xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能

        MyBatis共有9中动态sql,if,where,choose,foreach,bind,trim,set,when,otherwise

        执行原理:使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能

6.MyBatis是如何将sql执行结果封装为目标对像并返回的

        1.使用resultMap标签,逐一定义列名和对象属性名之间的映射关系

        2.使用sql列的别名功能,将列别名书写为对象属性名

7.MyBaits能实现一对一,多对多的关联查询吗

        可以,MyBatis不仅可以实现一对一,多对多,还可以实现多对一,一对多的关联查询方式

8.MyBatis的xml映射文件中,不同的xml映射文件,id是否可以重复

        不同的xml映射文件,如果配置了namespace,那么id可以重复,如果没有,就不能重复,毕竟namespace不是必须的,只是最佳实践而已

9.MyBatis中如何执行批处理

        使用BatchExecutor完成批处理

10.为什么说MyBatis是半自动ORM映射工具

        Hibernate属于全自动ORM映射工具,是同Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型 直接获取,所以是全自动的,而MyBatis在查询关联对象或者关联集合对象时,需要手动编入sql来完成,所有是半自动ORM映射工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值