一、对Mybatis的认识
1.MyBatis是一个优秀的基于Java的持久层框架,支持自定义SQL,存储过程和高级映射。其对原有JDBC操作进行了封装,几乎消除了所有JDBC代码,使开发者只需关注 SQL 本身。可以使用简单的XML或Annotation来配置执行SQL,并自动完成ORM操作,将执行结果返回
2. MyBatis框架和Hibernate框架Hibernate是一个全自动化ORM框架,MyBatis是一个对JDBC进行封装的框架,也是一个半自动化的ORM框架。
全自动化:开发者只需要调用相关接口就可以完成操作,整个流程框架都已经进行了封装。Hibernate实现了POJO和数据库之间的映射,同时可以自动生成SQL语句并完成执行。
半自动化:框架只提供一部分功能,剩下的工作仍需要开发者手动完成,MyBatis没有提供POJO与数据库表的映射,只实现了POJO与SQL之间的映射关系,需要开发者自定义SQL语句,以及数据与POJO之间的装配关系。
3.MyBatis框架和Hibernate框架的区别
MyBatis需要开发者手动编写SQL语句,在提供灵活性的同时,可能缺乏一些全面性的功能,对于高级查询,需要开发者自行编写SQL语句以及ResultMap。而Hibernate则通过对象关系映射自动生成SQL语句,具有良好的映射机制,使得开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。
3.ORM框架
(1).ORM ( Object Relational Mapping )对象关系映射,将程序中的 一个对象与表中的一行数据 一一对应(2).ORM 框架提供了持久化类与表的映射关系,在运行时参照映射文件的信息, 把对象持久化到数据库中。
二、ORM映射【重点】
Mybatis中的ORM映射是指将Java对象与数据库表之间的映射关系进行配置的过程
1.MyBatis自动ORM失效。
2.三种解决方案
方案一:列的别名:在SQL中使用 as 为查询字段添加列别名,以匹配属性名
<select id="getAll1" resultType="product">
select p_id pid,t_id tid,p_name name,p_time time,p_price price ,
p_state state ,p_image image, p_info info,isdel del from product;
</select>
<select id="getAll2" resultType="map">
select * from product;
</select>
//解决方法2:直接返回一个Map集合
List<Map<String,Object>> getAll2();
<!-- resultMap属性 表示自定义映射的id -->
<select id="getAll3" resultMap="productMap" >
select * from product;
</select>
<!-- resultMap标签 表示自定义映射 id:唯一标识 type:映射类型 -->
<resultMap id="productMap" type="product">
<!-- id标签一般表示主键 result标签一般表示普通字段 (不是必须的) -->
<!-- 属性:d
column 表示数据库中的字段名 property表示实体类中的属性名
djavaType 表示java中的类型 jdbcType表示数据类型中数据类型(mybatis可以自动识
别) -->
<id column="p_id" property="pid"/>
<result column="t_id" property="tid"/>
<result column="p_name" property="name"/>
<result column="p_time" property="time"/>
<result column="p_price" property="price"/>
<result column="p_info" property="info"/>
<result column="p_state" property="state"/>
<result column="p_image" property="image"/>
<result column="isdel" property="del"/>
</resultMap>