ORM模型:数据库的表和POJO的映射关键模型。plain ordinary java object.
Hiberate:全表映射模型,对jdbc封装较高。不需要SQL,需要使用HQL。
pojo + 映射关系
hbm.xml:描述pojo 和数据库表的映射关系。
Hiberate,最致命的是性能问题,全表映射。存储过程不支持。
MyBatis:半自动映射框架 ,我们需要提供映射文件和SQL语句。
SQL+映射关系+POJO。
MyBatis的基本构成
SqlSessionFactoryBuilder :构造器,根据配置信息或者代码生成->SqlSessionFactory:工程结构生成-> SqlSession: 一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口。
SQL Mapper :Java接口+XML文件(映射器)
MyBatis应用都是以SqlSessionFactory的实例为中心。主要任务创建SqlSession(类似于jdbc的Connection).
映射器:
package com.learn.chapter2.mapper;
import com.learn.chapter2.po.Role;
public interface RoleMapper{
public Role getRole(Long id);
}
<mapper namespace ="com.learn.chapter2.mapper.RoleMapper">
<select id ="getRole" parameterType = "long" resultType ="role">
select id,role_name as roleName,note from t_role where id =#{id}
</select>
</mapper>
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Role role = roleMapper.getRole(1L);
System.out.println(role.getRoleName):
xml 的命名空间和我们定义的接口的全限定名一致。id 和我们接口方法一致。 parameterType 传递的参数,resultType 返回类型,由于id,roleName,note 和pojo的属性名称一致,MyBatis 自动映射。
RoleMapper 没有实现类,但是MyBatis 会为这个接口生成代理类对象,根据接口全路径+方法名,找到对应的XML文件去完成它所需要的任务。