MyBatis随笔(防止日常痴呆记不住)

1.1框架:
框架是一个可重用的公共结构的半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架时,直接调用封装好的API,可以省去很多代码编写,从而提高工作效率和开发速度(就是模板的意思,新手最喜欢的东西)
-----是一个应用程序的半成品
-----提供可重用的公共结构
-----按一定规则组织的一组组件
优势
-----不再考虑公共问题
-----专心在业务是线上
-----结构统一,易于维护

1.2数据持久化:
数据持久化是将内存中的数据模型转换为存储摸型,以及将存储模型转换为内存中的数据模型的统称。例如:文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储摸型可以是关系模型、XML、二进制流等。
简单来说,保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的。数据持久化就是将内存中的瞬时数据保存到存储设备中,保证及时在手机或电脑关机的情况下,防止数据丢失。

1.3什么是ORM
对象/关系映射(Object/Relational Mapping,ORM)是一种数据持久化技术,他在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过javaBean对象去操作数据库表中的数据。是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过实用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM解决方案包含下面四个部分
-----在持久化对象上执行基本的增、删、改、查操作
-----对持久化对象提供一种查询语言或者API
-----对象关系映射工具
-----提供与事务对象交互、执行检查、延迟加载以及其他优化功能

1.4什么是MyBatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
也就是说,它内部封装了jdbc,开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接、创建statement等等复杂的过程,啥都整好了,写好sql语句就行。

了解完了基础理论,接下来说说开发步骤
2.1使用MyBatis的开发步骤
—下载jar包导入工程
—编写MyBatis核心配置文件(sqlMapConfig.xml)
—创建实体类
—SQL映射文件(mapper.xml)
—创建测试类
------读取核心配置文件mybatis-config.xml
------创建SqlSessionFactory对象,读取配置文件
------创建SqlSession对象
------调用mapper文件进行数据操作

2.2.环境搭建
1)导入jar包

  • mysql-connector-java-5.1.37-bin.jar
  • mybatis-3.5.3.jar
  • log4j-1.2.17.jar
    2)创建MyBatis配置文件mybatis-config.xml,配置数据库信息
<!-- 通过properties标签,读取java配置文件的内容 -->
<properties resource="db.properties" />
 
<!-- 配置mybatis的环境信息 -->
<environments default="development">
	<environment id="development">
		<!-- 配置JDBC事务控制,由mybatis进行管理 -->
		<transactionManager type="JDBC"></transactionManager>
		<!-- 配置数据源,采用dbcp连接池 -->
		<dataSource type="POOLED">
			<property name="driver" value="${db.driver}"/>
			<property name="url" value="${db.url}"/>
			<property name="username" value="${db.username}"/>
			<property name="password" value="${db.password}"/>
		</dataSource>
	</environment>
</environments>

3)编写实体类
4)编写SQL映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.kgc.kgc67.mapper.SmbmsProviderMapper" >
	<select id="querySmbmsProdiverAllByProName" resultType="SmbmsProvider" parameterType="java.lang.String">
		select * from smbms_provider where proName like concat('%',#{proName},'%');
	</select>
</mapper>

5)测试运行

3.1MyBatis框架优缺点
优点

  • 与JDBC相比,减少了50%以上的代码量
  • 最贱但的持久化框架,小巧简单易学
  • SQL代码从程序代码中彻底分离,可重用
  • 提供XML标签,支持编写动态SQL
  • 提供映射标签,支持对象与数据库的ORM字段映射

缺点

  • SQL语句编写工作量大
  • 数据库移植性差
    (MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的项目)

3.2MyBatis基本要素
MyBatis的和新对象

  • SqlSessionFactoryBuilder
  • SqlSessionFactory
  • SqlSession

mybatis-config.xml系统核心配置文件
mapper.xml SQL映射文件
在这里插入图片描述
3.3核心对象
SqlSessionFactoryBuilder

  • 用过即丢,其生命周期只存在于方法体内
  • 可重用其来创建多个 SqlSessionFactory 实例
  • 负责构建SqlSessionFactory,并提供多个build方法的重载

读取XML文件构造方式:

String resource = "mybatis-config.xml";   
InputStream is = Resources.getResourceAsStream(resource);   
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

SqlSessionFactory

  • SqlSessionFactory是每个MyBatis应用的核心
  • 作用:创建SqlSession实例
  • 作用域:Application
  • 生命周期与应用的生命周期相同
  • 单例:存在于整个应用运行时,并且同时只存在一个对象实例
SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);//为true关闭事务控制(默认)false:开启事务控制

SqlSession

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

注:在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的两种使用方式

  • 通过SqlSession实例直接运行映射的SQL语句
  • 基于Mapper接口方式操作数据

小结:

非集成环境下的最佳实践

  • SqlSessionFactoryBuilder
    • 用过即丢,推荐作用域范围:方法体内
  • SqlSessionFactory
    • 最佳作用域范围:应用的全局作用域
    • 生命周期与应用的生命周期相同
      SqlSession
    • 线程级
    • 一个request请求期间

4.1系统核心配置文件
mybatis-config.xml 系统核心配置文件
在这里插入图片描述
(要注意节点顺序)
4.2配置properties元素的两种方式

  • 通过外部指定的方式(database.properties),实现动态配置
  • 直接配置为xml,实现动态配置

4.3通过外部指定的方式(database.properties),实现动态配置

  • 配置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>

4.4直接配置为xml,实现动态配置
配置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子节点配置的值

5.1typeAliases元素
类型别名
仅仅只关联XML配置,简写冗长的Java类名

<typeAliases>
	<typeAlias alias="User" type="cn.smbms.pojo.User"/>
</typeAliases>

指定包下JavaBean的非限定类名

<typeAliases>
	<package name ="cn.smbms.pojo" />
</typeAliases>

5.2environments元素

  • 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
  • 子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)
<!-- default="development"默认的运行环境ID -->
<environments default="development">
<!-- id="development"运行环境ID -->
<environment id="development">
<!-- type="JDBC"事务管理器配置 -->
<transactionManager type="JDBC"/>
<!-- type="POOLED"数据源配置 -->
<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>
<!-- id="test"运行环境ID -->
<environment id="test">
……
</environment>
</environments>

transactionManager-事务管理器
语法:

<!-- MANAGED(托管) -->
<transactionManager type="[ JDBC | MANAGED ]" />

dataSource

  • dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
  • 有三种内建的数据源类型
<dataSource type=" [UNPOOLED | POOLED | JNDI]" />
<dataSource type="POOLED">
	<property name="driver" value="${driver}"/>
 	<property name="url" value="${url}"/>
	<property name="username" value="${user}"/>
	<property name="password" value="${password}"/>
</dataSource>

6.1mappers元素
映射器,定义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>

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值