一、Mybatis原理
1.1Myabtis操作过程
MyBatis框架在操作数据库时,大体经过了8个步骤:
1.读取 MyBatis 配置文件:
mybatis-config.xml
是 MyBatis 的配置文件,管理运行环境及数据库连接。
2.加载映射文件:
SQL映射文件配置了数据库操作的SQL语句,在mybatis-config.xml
中加载,可加载多个,每个对应数据库一张表。
3.构造会话工厂:
通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。
4.创建会话对象:
会话工厂创建的SqlSession对象,封装了执行SQL的所有方法,既能执行SQL返回结果,也能获取mapper接口。
5.Executor 执行器:
MyBatis的Executor接口操作数据库,动态生成SQL,负责查询缓存维护,由SqlSession传递参数。
6.MappedStatement 对象:
Executor执行方法中,MappedStatement参数封装映射信息,存储SQL语句id和参数。
7.输入参数映射:
输入参数支持Map、List等集合,基本数据类型及POJO,映射过程类似JDBC设置preparedStatement参数。
8.输出结果映射:
输出结果支持Map、List等集合,基本数据类型及POJO,映射过程类似JDBC解析结果集。
图解(从上往下):
1.2Mybatis核心对象
Resources
加载配置文件,有一种是使用类加载进行加载,我们通过这个类的类加载器进行资源的加载。
SqlSessionFactoryBuilder
构建SqlSessionFactory工厂对象需要的对象。采用了构建者模式,屏蔽了对象构建的细节。
SqlSessionFactory
创建SqlSession对象所用。使用工厂模式创建,目的就是解耦合。
SqlSession
创建代理对象,使用了代理模式。
Executor
操作数据库
MappedStatement
存储SQL语句、参数、输出结果类型
增补:
utils
XMLConfigBuilder:解析XMl配置文件。
DataSourceUtil:获取数据库连接对象。
Executor:执行SQL,封装我们想要的数据。
二、Mybatis传递参数
1、单个参数传递
在UserMapper接口中,设置findUserById()方法:
在UserMapper.xml中,设置SQl
2、按序号传递参数【不推荐】
User findUser(Integer id, String username);
WHERE id=#{param1} and username=#{param2}
我们还有另一种写法:
WHERE id=#{arg0} and username=#{arg1}
3、注解传参【推荐】
User findUser2(@Param("id") Integer id, @Param("username") String username);
WHERE id=#{id} and username=#{username}
这里要注意,方法findUser1中的注解Param中的字符,必须与后续Sql语句中#{}的名字对应
4、对象传参【推荐】
User findUser3(User user);
WHERE id=#{id} and username=#{username}
注意:#{对象属性名},原因:id-->getId
5、Map传参【不推荐】
User findUser4(Map<String, Object> map);
WHERE id=#{id} and username=#{username}
注意:#{map的key},原因:map.get(key)
ps:今天的内容有些偏向理论,所以文字内容比往常要多