一、概述

1.现在JDBC代码的问题

1) 存在大量的冗余代码,不同表的DAO操作,操作步骤相同只是SQL语句不同
2) 给?占位符设置麻烦,需要手动完成
3) 针对查询结果的处理比较麻烦,需要手动封装实体
4) SQL语句 写在JAVA代码中,导致SQL的维护麻烦

2.概念

MyBatis框架是一个基于java的 持久层框架,主要用于 对数据库进行增删改查 等操作。
是对现有JDBC-DAO层代码的合理封装,可以自动完成对象关系映射 (ORM),极大的简化开发,提高开发效率。

3.与JDBC的对比

java框架如何适配多数据库 java sql框架_SQL

二、环境搭建

1.导jar包

java框架如何适配多数据库 java sql框架_java_02

2.配置文件

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_03

java框架如何适配多数据库 java sql框架_java_04

事务管理用JDBC

java框架如何适配多数据库 java sql框架_java_05

连接池:用POOLED

java框架如何适配多数据库 java sql框架_缓存_06

3.测试环境

三、第一个程序(查一个)

开发步骤(查1个) :
	1. 根据表结构,定义实体类(同JDBC)
	2. 创建DAO接口(同JDBC)
	3. 使用mapper映射文件,实现接口【重点】
	4. 注册mapper文件(在mybatis-config.xml核心配置文件)【重点】
	5. 测试

1.创建实体类

同JDBC。
注意:必须有 默认的公共无参构造方法!

2.创建DAO接口

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_07

3.创建mapper文件

java框架如何适配多数据库 java sql框架_xml_08

4.注册mapper文件

在mybatis-config.xml中,注册mapper文件

java框架如何适配多数据库 java sql框架_SQL_09

5.测试

java框架如何适配多数据库 java sql框架_java_10

注意:

  • 查询默认不参加事务
  • 增删改需要控制事务
注意:查询时,MyBatis根据"查询结果的字段名" 给"同名属性" 赋值! 如果没找到同名属性,则赋值失败!

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_11

  • 注解:给sql语句字段起别名 别名==实体类的属性名

四、其它CRUD操作

1.查所有

java框架如何适配多数据库 java sql框架_SQL_12

2.模糊查询

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_13

3.删除

  • 增删改注意要加事务

java框架如何适配多数据库 java sql框架_缓存_14


java框架如何适配多数据库 java sql框架_缓存_15


java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_16

4.添加

java框架如何适配多数据库 java sql框架_java_17

5.增强添加

使用序列自动生成主键值,并且添加成功后,于获取新添加的主键值。

java框架如何适配多数据库 java sql框架_缓存_18

6.修改

java框架如何适配多数据库 java sql框架_xml_19


五、MyBatisUtil工具类的封装

借鉴jdbcUtil工具类的封装。

java框架如何适配多数据库 java sql框架_xml_20

六、方法的多参处理

1.特殊字符的处理

1) 使用实体引用

java框架如何适配多数据库 java sql框架_xml_21

  • 小于号<需要替换 大于号>不需要替换
<select id="" >
	select ... from ... where price < #{price}
</select>
  1. 使用CDATA
<select id="" >
	<![CDATA[
		select ... from ... where price < #{price}
	]]>
</select>

2.分页查询

  • Mybatis中如果mapper需要从dao层接受多个参数 在dao层的参数需要使用@Param(“别名”)分别给多个参数定义名称
  • #{}中只能取值,不能做运算

七、JDBC业务层的修改

java框架如何适配多数据库 java sql框架_缓存_22

八、mybatis对null值的处理

mybatis3.x中,往数据库添加/修改字段值时,如果内容是null,会出现异常信息,如下图所示:无效的1111

java框架如何适配多数据库 java sql框架_缓存_23

解决方法:在mapper文件是给字段赋值时使用jdbcType,语法:#{属性名,jdbcType=类型}

java框架如何适配多数据库 java sql框架_SQL_24

九、核心配置文件的补充

1.类型别名

  • 不建议使用 找错 维护不方便

2.引入小配置文件

java框架如何适配多数据库 java sql框架_xml_25

十、mybatis的关系映射

1.DB中表和表的关系

数据库中,两张表有关联关系,需要使用外键(Foreign Key)进行定义。
	1.一对一		学生 和 电脑
	2.一对多(多对一)	班级 和 学生  (学生和班级)
	3.多对多		学生 和 课程

java框架如何适配多数据库 java sql框架_缓存_26

2.单向多对一

DB中,两张表的关联关系  使用 外键定义!
mybatis中的关系 使用 关系属性!

2.1定义关系属性

java框架如何适配多数据库 java sql框架_xml_27

2.2定义dao接口

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_28

2.3查询结果的手动映射

java框架如何适配多数据库 java sql框架_java_29

java框架如何适配多数据库 java sql框架_SQL_30

经典出错案例:

  • 没用在mybatis-config.xml中注册mapper.xml的文件位置

java框架如何适配多数据库 java sql框架_缓存_31

2.4添加功能

添加页面:1) 使用下拉列表 列出 所有班级 以供选择,其中每项的value属性值是 班级编号
         2) 下拉列表的名称是 对象名.关系属性名.主属性名

java框架如何适配多数据库 java sql框架_缓存_32

Dao接口:
    public void insertStudent(Student stu);
mapping映射文件:
	在SQL语句中,给FK字段指定值时 使用 #{关系属性名.主属性名}

java框架如何适配多数据库 java sql框架_java_33

3.单向一对多

3.1定义关系属性

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_34

3.2定义dao接口

java框架如何适配多数据库 java sql框架_缓存_35

3.3查询结果的手动映射

java框架如何适配多数据库 java sql框架_SQL_36


java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_37

十一、一对一

1.DB中表的关系

java框架如何适配多数据库 java sql框架_xml_38

2.mybatis的关系映射

2.1定义关系属性

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_39

2.2定义dao接口

java框架如何适配多数据库 java sql框架_java_40

2.3查询结果的手动映射

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_41

2.4添加功能

添加页面:

java框架如何适配多数据库 java sql框架_缓存_42

业务类的处理:

java框架如何适配多数据库 java sql框架_xml_43

mapper文件:

java框架如何适配多数据库 java sql框架_java_44

十二、多对多

1.DB中表的关系

java框架如何适配多数据库 java sql框架_xml_45

2.mybatis的关系映射

2.1定义关系属性

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_46

2.2定义dao接口

java框架如何适配多数据库 java sql框架_xml_47

2.3查询结果的手动映射

java框架如何适配多数据库 java sql框架_SQL_48

  • 修改跳转前查一个,页面超链接标签的href中内容

java框架如何适配多数据库 java sql框架_SQL_49

  • 修改查所有查一个跨包跳转
  • forward跳转特点:共用一个request作用域
  • 页面显示当前用户所在分组

十三、动态SQL

1.SQL片段的复用

java框架如何适配多数据库 java sql框架_xml_50

2.where标签【重点】

where标签的动态SQL 在开发中 使用在高级搜索功能上。

java框架如何适配多数据库 java sql框架_java_51

第二种写法(使用trim标签):

java框架如何适配多数据库 java sql框架_缓存_52

3.set标签

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_53

第二种写法(使用trim标签):

java框架如何适配多数据库 java sql框架_缓存_54

4.foreach标签

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_55

十四、缓存

1.缓存

缓存,是计算机中的内存存储空间。
    内存存储--优:读写效率高
             缺:存储量小、不能永久存储
    硬盘存储--优:存储量大,永久存储
             缺:读写效率低
    目前数据库中数据 是存储在硬盘中,所以效率低。
    
好处:使用缓存可以提高 减少与DB的交互次数,从而提高 DB操作的效率
     (用 空间 换 时间)

java框架如何适配多数据库 java sql框架_java_56

2.mybatis的缓存分类

mybatis的缓存分类:
	一级缓存:SqlSession级别---默认使用
			基于同一个SqlSession的操作 可以缓存起来进行使用 提高效率)
	二级缓存:SqlSessionFactory级别--默认没使用
			基于同一个SqlSessionFactory的操作 可以缓存起来使用 提高效率)

3.mybatis二级缓存的使用

mybatis二级缓存的使用步骤(共三步):
步骤1> 配置启用mybatis的缓存

java框架如何适配多数据库 java sql框架_xml_57

步骤2> 在Mapper映射文件中使用缓存

java框架如何适配多数据库 java sql框架_java_58

步骤3> 实体类必须实现Serializable接口

java框架如何适配多数据库 java sql框架_java框架如何适配多数据库_59

注意:1) session.close() 时,往缓存中 存内容;
     2) session.commit() 时,清空 已有缓存中的 数据。