【MyBatis】的初步认识与相关对象、配置元素的认识

MyBatis框架

hibernate和MyBatis都是半自动框架

一些简单名词的认识:

SSH:Struts2【拦截器】、spring【粘合剂】、hibernate【dao层】

SSM:springMVC、spring、myBatis

Struts2:MVC设计模式的实现【拦截器、可变和可重用的标签】

hibernate:ORM,简化数据库操作、DAO层

Spring:依赖注入容器 / AOP实现【声明式事务、简化Java EE应用、黏合剂,将大家组装到一起】

Spring MVC:结构最清晰的MVC Model2实现【高度可配置,支持多种视图技术、定制化开发】

MyBatis:半自动化的ORM实现、DAO层、动态SQL【sql中可写循环】

持久化与ORM:

持久化是程序数据在瞬时状态和持久状态间转换的过程

  • 持久化:将数据存入的硬盘,通俗点就是存到数据的数据是持久化状态【毕设答辩会问哦~】
  • 顺序化:内存里的数据,存入一个对象,new一个String,通过jdbc存入数据库,这是顺序状态。
  • ORM==【Object Relational Mapping】对象关系映射:对象是java的对象,映射即绑定。【实体类对象和数据库】

MyBatis简介:

  • MyBatis前身是iBatis(版本升级改名了),本是Apache的一个开源的项目

  • 官方网站:http://mybatis.org

  • ORM框架

  • 实体类和SQL语句之间建立映射关系

  • 特点:

    • 基于SQL语法(sql都得自己写),简单易学
    • 能了解底层封装过程
    • SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
    • 方便程序代码调试

与JDBC的比较:

创建模块,导入坐标

编写MyBatis核心配置文件–>替换连接信息解决硬编码问题

编写SQL映射文件–>统一管理sql语句,解决硬编码问题
在这里插入图片描述

搭建MyBatis开发环境

▶步骤:
  • 下载jar包导入
  • 编写MyBatis核心配置文件(mybatis-config.xml)
  • 创建实体类POJO
  • DAO层接口—sql映射文件(xxx.xml)
  • 创建测试类:
    • 读取核心配置文件
    • 创建SqlSessionFactory对象,读取配置文件
    • 创建SqlSession对象
    • 调用mapper文件进行数据操作
▶MyBatis框架的优缺点

优点

​ 与JDBC相比,减少了50%以上的代码量

​ 最简单的持久化框架,小巧并简单易学

​ SQL代码从程序代码中彻底分离,可重用

​ 提供XML标签,支持编写动态SQL

​ 提供映射标签,支持对象与数据库的ORM字段映射

缺点

​ SQL语句编写工作量大,对开发人员有一定要求

​ 数据库移植性差

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目

▶MyBatis基本要素:
  • MyBatis的核心对象

    SqlSessionFactoryBuilder

    SqlSessionFactory

    SqlSession

  • mybatis-config.xml 系统核心配置文件

  • mapper.xml SQL映射文件

▶核心接口和类的结构:

SqlSessionFactoryBulider-----【build()】---->SqlSessionFactory----【openSession()】----->Sqlsession

核心对象一:SqlSessionFactoryBuilder
  • 配置信息以三种形式提供给SqlSessionFactory的build方法:

    InputStream (字节流)、Reader(字符流)、Configuration(类)

  • 读取XML文件构造方式:

    String resource = "mybatis-config.xml";
    
    InputStream is = Resources.getResourceAsStream(resource);  
    
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    
核心对象二:SqlSessionFactory
  • SqlSessionFactory是每个MyBatis应用的核心

  • 作用:创建SqlSession实例

    SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
    
    

    boolean autoCommit:ture–关闭事务控制,默认;false–开启事务控制

  • 作用域:Application

  • 生命周期与应用的生命周期相同

  • 单例:存在于整个应用运行时,并且同时只存在一个对象实例

核心对象三:SqlSession
  • 包含了执行SQL所需的所有方法
  • 对应一次数据库会话,会话结束必须关闭
  • 线程级别,不能共享
SqlSession session = sqlSessionFactory.openSession();
try {
    // do work
} finally {
    session.close(); 
    //关闭SqlSession非常重要,必须要明确在finall方法体中正常关闭
}

​ ▲在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建

  • SqlSession的获取方式

    String resource = "mybatis-config.xml";   
    InputStream  is = Resources.getResourceAsStream(resource); 
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
    
    SqlSession sqlSession = factory.openSession();
    
  • SqlSession的两种使用方式:

    1. 通过SqlSession实例直接运行映射的SQL语句

    2. 基于Mapper接口方式操作数据

小结:

非集成环境下的最佳实践

  • SqlSessionFactoryBuilder:

    用过即丢,推荐作用域范围:方法体内

  • SqlSessionFactory:

    最佳作用域范围:应用的全局作用域
    生命周期与应用的生命周期相同

  • SqlSession:

    线程级

    一个request请求期间


系统核心配置文件

mybatis-config.xml系统核心配置文件

configuration 配置:【加粗的是重要的】

properties 可以配置在Java 属性配置文件中

settings 修改 MyBatis 在运行时的行为方式

typeAliases 为 Java 类型命名一个别名(简称)

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

​ transactionManager 事务管理器

​ dataSource 数据源

mappers 映射器

properties
  • 配置properties元素的两种方式:

1.通过外部指定的方式(database.properties这个文件放的数据库连接的url账号密码等)、实现动态配置

2.直接配置为xml,实现动态配置

示例1:配置properties的resource属性

<properties resource="database.properties"/>      
......
<dataSource type="POOLED">
	<property name="driver" value="${driver}"/>
	<property name="url" value="${url}"/>
	<property name="username" value="${user}"/>
	<property name="password" value="${password}"/>
</dataSource>

示例二:配置property的name和value

<properties>
		<property name="driver" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
		<property name="user" value="root"/>
		<property name="password" value="root"/>
</properties>
......
<dataSource type="POOLED">
		<property name="driver" value="${driver}"/>
		<property name="url" value="${url}"/>
		<property name="username" value="${user}"/>
		<property name="password" value="${password}"/>
</dataSource>

结论:两种方式的优先级,resource属性值的优先级高于property子节点配置的值

settings元素
  • 用来修改MyBatis运行时的行为方式

  • 主要是MyBatis的一些全局配置属性的设置

设置项描述允许值默认值
cacheEnabled开启缓存,对在此配置文件下的所有cache 进行全局性开/关设置true| falsetrue
lazyLoadingEnabled全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载true | falsetrue
autoMappingBehaviorMyBatis对于resultMap自动映射匹配级别NONE | PARTIAL | FULLPARTIAL
……(9个)

settings的一个使用:
1.在控制台输出sql信息的打印- - -

 <settings>
       <!-- value="STDOUT_LOGGING"  配置打印SQL语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

2.如果想让它在日志里面打印- - - 将之前的log4j配置文件复制到资源中

 <settings>
    	<!-- value="LOG4J"  日志打印SQL语句 -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
typeAliases元素:
  • 类型别名
  • 仅仅只关联XML配置,简写冗长的Java类名
    示例1:
//这是给单个实体类起别名使用,alias就是用来定义别名的
<typeAliases>
	<typeAlias alias="User" type="xx.xx.pojo.User"/>
</typeAliases>

示例2:

//将实体类所在的整个包定义别名,在resultType使用的别名就是实体类的名字,不分大小写
<typeAliases>
	<package name="xx.xx.pojo"/>
</typeAliases>
environments元素:
  • 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上。

  • 子元素结点:environment,但是必须指定其中一个为默认运行环境(通过default指定)

  • 每个SqlSessionFactory实例只能选择一个运行环境

    <environments default="development">---默认的运行环境ID
        <environment id="development">---运行环境ID
            <transactionManager type="JDBC"/>---事务管理器配置
            <dataSource type="POOLED">---数据源配置
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="test">---运行环境ID
            ……
        </environment>
    </environments>
    
transactionManager-事务管理器:
<transactionManager type="[ JDBC | MANAGED ]" />
							JDBC	托管
dataSource:
  1. dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
  2. 有三种内建的数据源类型
<dataSource type=" [UNPOOLED | POOLED | JNDI]" />
mappers元素
  • 映射器,定义SQL映射语句

  • 须在配置中引用mapper映射文件

  • 方式一:使用类资源路径获取资源

    <!-- 将mapper映射文件加入到系统核心配置文件中 -->
    <mappers>
    	<mapper  resource="cn/smbms/dao/user/UserMapper.xml"/>
    </mappers>
    
  • 方式二:使用URL获取资源

    <mappers>
    		<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
    		<mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/>
    </mappers>
    

配置中引用mapper映射文件

  • 方式一:使用类资源路径获取资源

    <!-- 将mapper映射文件加入到系统核心配置文件中 -->
    <mappers>
    	<mapper  resource="cn/smbms/dao/user/UserMapper.xml"/>
    </mappers>
    
  • 方式二:使用URL获取资源

    <mappers>
    		<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
    		<mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/>
    </mappers>
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱尔斯Jules

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值