前言
最近,再找工作,还是一个菜鸟的我,感觉找个工作还是比较困难,一个契机,公司给发了一个面试题,如下
这也让我对Mybatis
有了一个入门的了解
Mybatis
简介
官网对Mybatis
的介绍:
MyBatis
是支持定制化 SQL
、存储过程以及高级映射的优秀的持久层框架。MyBatis
避免了几乎所有的 JDBC
代码和手工设置参数以及抽取结果集。MyBatis
使用简单的 XML
或注解来配置和映射基本体,将接口和 Java
的 POJOs
(Plain Old Java Objects
,普通的 Java
对象)映射成数据库中的记录。
提到Mybatis
就会想到Hibernate
;Hibernate
与Mybatis
又有什么区别呢!
Hibernate
与Mybatis
区别
- Mybatis:
1.
mybatis
本身就很小且简单,即学即用,比较灵活2. 可以进行更为细致的
SQL
优化,可以减少查询字段(不需要使用JsonView
)。3. 编写
SQL
语句时工作量很大,尤其是字段多、关联表多时,更是如此。
4. 不太容易适应快速数据库修改,对SQL
语句编写能力要求高5.
SQL
语句依赖于数据库,导致数据库移植性差,不能更换数据库。 - hibernate:
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
// 开启debug模式,打印SQL语句
logging.level.com.example.demo.mapper=debug
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
总结
要一辈子跟自己的无知作斗争,活到老,学到老,学海无涯!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。