Mybatis前身是iBatis,其源于“Internet”和“ibatis”的组合,本质是一种半自动的ORM框架,除了POJO 和映射关系之外,还需要编写SQL语句;
Mybatis快速入门
1. 加入mybatis的依赖
2. 添加mybatis的配置文件
3. 场景介绍
4. 编写实体类、mapper接口以及mapper xml文件;
5. 编写实例代码
SqlSessionFactoryBuilder:读取配置信息创建SqlSessionFactory,建造者模式,方法级别生命周期;
SqlSessionFactory:创建Sqlsession,工厂单例模式,存在于程序的整个生命周期;
SqlSession:代表一次数据库连接,可以直接发送SQL执行,也可以通过调用Mapper访问数据库;线程不安全,要保
证线程独享(方法级);
SQL Mapper:由一个Java接口和XML文件组成,包含了要执行的SQL语句和结果集映射规则。方法级别生命周期;
resultType元素
resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的 pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。
自动映射
前提:SQL列名和JavaBean的属性是一致的;
使用resultType,如用简写需要配置typeAliases (别名);
如果列名和JavaBean不一致,但列名符合单词下划线分割,Java是驼峰命名法,则 mapUnderscoreToCamelCase可设置为true;
resultMap元素 属性
resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出
来,在对复杂语句进行联合映射的时候,它很可能可以代替数千行的同等功能的代码。
ResultMap 的设计思想是,简单的语句不需要明确的结果映射,而复杂一点的语句只需要描述它们的关系就行了。
resultMap元素 子元素
id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
result – 注入到字段或 JavaBean 属性的普通结果
association – 一个复杂类型的关联;许多结果将包装成这种类型
• 嵌套结果映射 – 关联可以指定为一个 resultMap 元素,或者引用一个
collection – 一个复杂类型的集合
• 嵌套结果映射 – 集合可以指定为一个 resultMap 元素,或者引用一个
传递多个查询入参
使用map传递参数;可读性差,导致可维护性和可扩展性差,杜绝使用;
使用注解传递参数;直观明了,当参数较少一般小于5个的时候,建议使用;
使用Java Bean的方式传递参数;当参数大于5个的时候,建议使用;
insert标签相关属性
selectKey元素
sql元素和参数
sql元素:用来定义可重用的 SQL 代码段,可以包含在其他语句中;
参数:向sql语句中传递的可变参数
预编译 #{}:将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,能够很大程度防止 sql注入;
传值 ${}:传入的数据直接显示生成在sql中,无法防止sql注入;
表名、选取的列是动态的,order by和in操作, 可以考虑使用$
动态sql元素
批量操作
通过foreach动态拼装SQL语句
使用BATCH类型的excutor
Mybatis Generator (MBG) 代码生成器
运行MGB
关联查询
在关系型数据库中,我们经常要处理一对一 、 一对多的关系 。 例如, 一辆汽车需要有一个引擎,这是一对一的 关系。 一辆汽车有 4 个或更多个轮子,这是一对多的关系 。关联元素就是专门用来处理关联关系的;
关联元素 association 一对一关系 collection 一对多关系 discriminator 鉴别器映射
关联方式 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
缓存 一级缓存
缓存 二级缓存