面试题:mybatis常见问题

一、mybatis的基本工作流程

1)读取配置文件,获取数据库连接信息、Mapper映射文件或者Mapper包路径。

2)创建SqlSessionFactory(生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡)

3)SqlSessionFactory建立SqlSession(生命周期是过程级,方法结束应该关闭)

4)使用mapper.xml文件时,mybatis会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,通过映射包装成java对象。

二、MyBatis接口映射是什么?

接口映射是指在MyBatis中定义接口,然后把接口里面的方法和SQL语句绑定。

接口绑定有两种:

注解绑定(接口的方法上添加@Select、@Update等注解)

xml绑定(xml文件中写SQL来绑定)

三、#{}和${}的区别?

#{}是预编译处理,而${}是字符串替换。

处理${}时,就是把${}替换成变量的值。

处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值。使用#{}可以有效的防止SQL注入,提高系统安全性。

四、Mybatis是如何将sql执行结果封装为目标对象并返回的?

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

2)是使用sql列的别名功能,将列别名书写为对象属性名。Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回。

五、为什么说Mybatis是半自动ORM映射工具?

全自动ORM映射工具查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取。

Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成。

发布了83 篇原创文章 · 获赞 0 · 访问量 4525

猜你喜欢

转载自blog.csdn.net/zhangdx001/article/details/105419578