Mybatis知识点总结目录
1. Mybatis对象分析
1.1 Resources 类
- Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象。
1.2 SqlSessionFactoryBuilder 类
- SqlSessionFactory 的 创 建 , 需 要 使 用 SqlSessionFactoryBuilder 对 象 的 build() 方 法 。 由 于SqlSessionFactoryBuilder对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该 对象创建为一个方法内的局部对象,方法结束,对象销毁。
1.3 SqlSessionFactory 接口
- SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession()方法。
- openSession(true):创建一个有自动提交功能的 SqlSession
- openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交
- CopenSession():同 openSession(false)
1.4 SqlSession 接口
- SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。
- SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。
2. SQL配置文件优化
2.1 添加日志打印输出
- 文件加入日志配置,可以在控制台输出执行的 sql 语句和参数.
<!--设置日志输出-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
2.2 为实体类起别名
- 由于XXXmapper.xml文件中入参和返回值都要使用实体类的对象,而我们在使用的时候必须书写实体类的完全限定类名,这样比较麻烦,我们可以通过起别名的方式来简化此操作.起别名的方式有两种.
2.2.1 单个实体类起别名
- 使用typeAliases以及typeAias标签
<typeAliases>
<!--单个实体类别名注册-->
<typeAlias type="com.lcl.pojo.Student" alias="student">
</typeAlias>
</typeAliases>
2.2.2 批量别名注册
- 可以通过< package >来批量的为实体类起别名,只要指定实体类所在的包的名称即可.MyBatis框架会自动为每个实体类起别名为类型的全小写或类名的大小写混合.推荐使用类名的全小写.
<typeAliases>
<package name="com.lcl.pojo"/>
</typeAliases>
2.3 SqlMapConfig.xml文件中注册XXXMapper.xml
注册XXXMapper.xml文件的方式有四种.
2.3.1 使用resource注册
<!--注册mapper.xml文件-->
<mappers>
<!--resource:从resources中找指定的文件名称注册
url:使用绝对路径注册
class:动态代理方式下的注册-->
<mapper resource="StudentMapper.xml"></mapper>
</mappers>
2.3.2 使用class注册
<mapper class="com.lcl.mapper.UsersMapper"></mapper>
备注:
动态代理的方式,使用此种注册,class的值是接口的完全限定名称.
2.3.3 使用url注册
<mapper url="file:///E:/UserMapper.xml"></mapper>
备注:指定绝对路径注册,注意file后面是双杠.
2.3.4 使用< package >注册
<package name="com.lcl.mapper"/>
3. 动态代理
3.1 动态代理开发规范
MyBatis框架使用动态代理的方式来进行数据库的访问.
Mapper接口的开发相当于是过去的Dao接口的开发。由MyBatis框架根据接口定义创建动态代理对象,代理对象的方法体同Dao接口实现类的方法。在设计时要遵守以下规范.
① Mapper接口与Mapper.xml文件在同一个目录下
② Mapper接口的完全限定名与Mapper.xml文件中的namespace的值相同。
③Mapper接口方法名称与Mapper.xml中的标签的statement 的ID完全相同。
④Mapper接口方法的输入参数类型与Mapper.xml的每个sql的parameterType的类型相同
⑤Mapper接口方法的输出参数与Mapper.xml的每个sql的resultType的类型相同。
⑥Mapper文件中的namespace的值是接口的完全限定名称.
⑦在SqlMapConfig.xml文件中注册时,使用class属性=接口的完全限定名.