一、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来完成。