最近,再找工作,还是一个菜鸟的我,感觉找个工作还是比较困难,一个契机,公司给发了一个面试题,如下
这也让我对 Mybatis
有了一个入门的了解
上述Demo地址
Mybatis
简介 官网对 Mybatis
的介绍:
MyBatis
是支持定制化 SQL
、存储过程以及高级映射的优秀的持久层框架。 MyBatis
避免了几乎所有的 JDBC
代码和手工设置参数以及抽取结果集。 MyBatis
使用简单的 XML
或注解来配置和映射基本体,将接口和 Java
的 POJOs
( Plain Old Java Objects
,普通的 Java
对象)映射成数据库中的记录。
官网地址
提到 Mybatis
就会想到 Hibernate
;
Hibernate
与 Mybatis
又有什么区别呢!
Hibernate
与 Mybatis
区别 1. mybatis
本身就很小且简单,即学即用,比较灵活
2. 可以进行更为细致的 SQL
优化,可以减少查询字段(不需要使用 JsonView
)。
3. 编写 SQL
语句时工作量很大,尤其是字段多、关联表多时,更是如此。
4. 不太容易适应快速数据库修改,对 SQL
语句编写能力要求高
5. SQL
语句依赖于数据库,导致数据库移植性差,不能更换数据库。
1. 功能强大,数据库无关性好,开发速度很快,效率高。
2. Hibernate
可以自动生成 SQL
语句,自动执行,不需要编写的SQL语句。
3. 使用 Hibernate
,移植性好(只要使用Hibernate标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的操作)
4. 缺点就是学习门槛不低,比较复杂,要学到精通门槛更高。
hibernate
是全自动,而 mybatis
是半自动
Mybatis
配置 // 对应的xml配置文件 mybatis.mapper-locations=classpath:mapper/*Mapper.xml // 对应的实体包 mybatis.type-aliases-package=com.example.demo.entity
Mybatis
映射关系 <resultMap id="goodResultMap" type="com.example.demo.entity.Good④"> <id property="id③" column="p_id②"/> <result property="name③" column="name1②"/> <result property="description③" column="description②"/> <result property="stock③" column="stock②"/> <association property="unit" javaType="Unit"> <id property="id" column="c_id②"/> </association> </resultMap> <select id="findById⑤" resultMap="goodResultMap"> SELECT good.id① AS p_id, good.description①, good.`name`① AS name1, good.stock①, good.unit_id① AS c_id, FROM good LEFT OUTER JOIN unit ON good.unit_id = unit.id WHERE good.id = #{id⑥,jdbcType=INTEGER}; </select>
① 既查询需要返回的字段名称,对应数据表
② 对应AS后的名称(相当于把 name
起了一个别名叫 name1
,既 name1
与②对应);如果没有起别名既与原来数据表中名称一致
③ 对应④实体里边的字段名称
⑤ 对应仓库层的方法名称,如 Good findById(@Param("id")⑥ Long id);
⑥ 对应传入的参数id
Mybatis
注解 同时 Mybatis
也提供了一些注解
基础CRUD注解,
@Select
@Insert
@Update
@Delete
在使用 @Select
注解查询时,只能对单表进行查询,要想查询关联表需要映射注解
映射注解:
@Results 用于填写结果集的多个字段的映射关系.
@Result 用于填写结果集的单个字段的映射关系.
@ResultMap 根据ID关联XML里面<resultMap>.
对于注解还只是了解层面,没有使用过注解进行关系映射,只是使用简单的单表CRUD
要一辈子跟自己的无知作斗争,活到老,学到老,学海无涯!!