Java开发之SSM框架-初始MyBatis框架

本文详细介绍了MyBatis框架的概念、ORM原理,演示如何搭建开发环境,包括添加jar包、配置文件编写、实体类创建、映射文件编写和使用示例。重点讲解了配置文件的配置项、SQL映射和事务管理,以及如何通过MyBatis高效地进行数据库操作。

框架的概念及作用

框架(Framework)是一种经过检验的,具有特定功能的半成品软件。
框架针对特定的功能或架构需要,对基础代码进行了封装并提供相应的API,不同的口框架能够提供不同的功能。

数据的持久化及ORM

持久化简介
持久化就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。也就是说,可以将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型。

ORM简介
ORM(Object/Relational Mapping),即对象/关系映射.ORM是一类框架的总称,这类框架完成了对象数据到关系型数据的映射.使开发人员能够以面向对象的思想,操作数据库。

常见的ORM框架
MyBatis,Hibernate,TopLink…

认识Mybatis框架
概念:
MyBatis是一种基于Java的持久层框架,支持定制化SQL,存储过程以及高级映射的持久层框架.最初是apache的开源项目–iBatis,2010年由apache迁移到google,并改名为MyBatis.在2013年11月由google迁移到GitHub。

特点:

  1. MyBatis是一个轻量级ORM框架,只需mybatis-*.jar和数据库驱动器即可运行.
  2. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  3. 将SQL代码与程序代码分离,利于SQL重用和修改
  4. MyBatis不会对应用程序或数据库的设计强加任何影响,提高应用的灵活性

官网:
https://mybatis.org/mybatis-3/zh/index.html

下载地址:
https://github.com/mybatis/mybatis-3/releases

使用MyBatis框架实现数据库操作

搭建基于MyBatis框架的开发环境
开发步骤:
第1步: 添加jar包
mybatis-3.5.1.jar
mysql-connector-java-5.1.22-bin.jar
将jar文件添加到项目中:
在这里插入图片描述

第2步: 编写配置文件
注意: 配置文件名称和位置不限,但是通常称为mybatis-config.xml,存入到src下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="驱动器入口类的全名称"/>
                <property name="url" value="url地址信息"/>
                <property name="username" value="账户"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!--添加映射文件-->
    <mappers>
        <mapper resource="包名1/包名2/.../文件名.xml"/>
    </mappers>
</configuration>

第3步:创建实体类

package cn.bran.pojo;

public class Branchesmgr {
    private int id;
    private String businessNo;
    private String name;
    private String cityArea;
    private String address;
    private String phone;
    private String summary;
//有参无参  get   set 方法

第4步: 编写映射文件

<?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">
<!--在当前XML中编写针对User的CURD操作命令-->
<mapper namespace="命名空间[类似包的作用]">
    <select/insert/update/delete id="业务标记名" resultType="实体类全名" parameterType="占位符类型">
        SQL命令
    </select/insert/update/delete>
</mapper>

备注:映射文件用于实现 实体对象与数据表字段的映射关系。

第4步: 编写启动程序

 //获得MyBatis的配置文件: 数据库信息,映射文件信息[SQL]
    InputStream is=Resources.getResourceAsStream(配置文件位置/配置文件名.xml");//参数为配置文件的位置: a/mybatis-config.xml
    //基于配置信息创建SqlSessionFactory
    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
    //获得SqlSession: 连接数据库
    SqlSession session=factory.openSession();

    //数据库操作: CURD
    session.CURD方法名("命名空间.业务标识名");//映射文件中的命名空间和业务标识名
    //执行映射文件中的哪个SQL

    //提交事务
    session.commit();
    //关闭连接
    session.close();

配置文件

介绍:
MyBatis的配置文件中包含了影响MyBatis行为和属性的信息,控制MyBatis的整体运行方式.配置文件中主要配置数据源[驱动类,URL,账号,密码],事务管理,加载指定映射文件。

说明:
1.MyBatis配置文件的名称和位置自定义.
2.MyBatis未提供源码和案例,配置和映射内容参考官网或使用指南
3.MyBatis配置文件顶层结构如下:
在这里插入图片描述
基本格式:
在这里插入图片描述

配置标签:
environments:
作用:
声明一组运行环境.[支持多数据库]
属性:
default: 设置默认运行环境,属性值为某个environment的id值.
environment:
作用:
定义1个运行环境
属性:
id: 设置当前环境的匿称,名称任意.通常为development和work.
transactionManager:
作用:
指定事务管理器,MyBatis含有2种事务管理器[JDBC和MANAGED]
属性:
type: JDBC[使用JDBC的提交和回滚设置],MANAGED[使用其他容器管理事务提交和回滚]
dataSource:
作用:
该标签通过标准的JDBC数据源接口来配置JDBC连接对象的资源
属性:
type: 设置数据源的类型,属性值为POOLED|UNPOOLED|JNDI
POOLED:使用连接池.从连接池中取出连接,关闭时将该连接放回连接池
UNPOOLED: 不使用连接池.每次都打开新连接,关闭时将彻底关闭该连接
JNDI: 从其他容器中获得连接
property:
作用:
定义数据源的指定属性和值
属性:
name: 属性名.在dataSource中,name通常为driver/url/username/password或其他
value: 属性值.。

配置数据源
方式1: 直接在property中写明参数值

<dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</dataSource>

方式2:

<!--配置环境-->
<properties>
    <property name="mydriver" value="com.mysql.jdbc.Driver"/>
    <property name="myurl" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="myusername" value="root"/>
    <property name="mypassword" value="123456"/>
</properties>
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/><!--配置事务管理的方式: JDBC,MANAGED-->
        <!--配置数据源: 账户/密码  URL  驱动器  连接数据库 -->
        <dataSource type="POOLED"><!--type定义数据连接方式: POOLED[使用连接池]|UNPOOLED|JNDI-->
            <property name="driver" value="${mydriver}"/><!--Class.forName("com.mysql.jdbc.Driver")-->
            <property name="url" value="${myurl}"/>
            <property name="username" value="${myusername}"/>
            <property name="password" value="${mypassword}"/>
        </dataSource>
    </environment>
</environments>

方式3:引用外部.properties文件

<properties resource="DBSource.properties" />
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/><!--配置事务管理的方式: JDBC,MANAGED-->
        <dataSource type="POOLED"><!--type定义数据连接方式: POOLED[使用连接池]|UNPOOLED|JNDI-->
            <property name="driver" value="${db.driver}"/><!--Class.forName("com.mysql.jdbc.Driver")-->
            <property name="url" value="${db.url}"/>
            <property name="username" value="${db.user}"/>
            <property name="password" value="${db.password}"/>
        </dataSource>
    </environment>
</environments>

加载映射文件:
方式1: mapper:
格式:
mapper resource/url/class=“映射文件路径”
说明:
1.resource: 使用相对类路径,指出映射文件的位置.比如 bean/User.xml
2.url: 使用绝对路径,指出映射文件的位置.比如: file:///bean/User.xml
3.class: 使用类全名,指出映射器接口的位置.比如: bean.UserMapper[UserMapper为接口
方式2: package:
格式:
package name=“包名” /
说明:
将指定包中所有接口类,在MyBatis中注册.
注意: mapper接口和映射文件名称要相同,且在同1目录下
|----自定义别名:
格式:
typeAliases

typeAlias type=“类全名” alias=“别名[名称任意]” /

package name=“包名” /
/typeAliases
说明:
name值为包名,包中类的别名为类名[大小写均可]

核心接口和类

  1. SqlSessionFactory实例是由MyBatis框架应用程序的核心。
  2. SqlSessionFactory实例由SqlSessionFactoryBuilder对象根据XML配置文件或Configuration类的实例进行构建。
  3. 通过SqlSessionFactory实例可获取SqlSession实例。SqlSession实例包含执行SQL操作的方法可以通过该实例执行已映射的SQL语句。

1.SqlSessionFactoryBuilder
SqlSessionFactoryBuilder负责根据配置信息构建SqlSessionFactory实例。
核心的build()重载方法有三种,其它重载方法实际是这三种方法的简化调用。

  • build(Reader reader,Stirng environment,Propertes properties)。
  • build(InputStream inputStream,Stirng environment,Propertes properties)。
  • build(Configuration configuration)。

分别是字节流InputStream,字符流Reader 和Configuration类。

一旦创建了SqlSessionFactory对象,就不在需要SqlSessionFactoryBuilder了,因此SqlSessionFactoryBuilder的最佳作用域范围是存在于方法体内,即为局部变量,用完即销毁。

2.SqlSessionFactory
由SqlSessionFactoryBuilder构建的SqlSessionFactory实例时MyBatis框架应用的核心。SqlSessionFactory是创建SqlSession的工厂,SqlSessionFactory提供了openSession()方法来获取SqlSession实例,

注意:openSession()方法中的boolean类型的参数用于控制是否开启自动提交。true表示开启自动提交,关闭事务控制。false表示关闭自动提交,开启事务控制。

不建议反复销毁和创建SqlSessionFactory实例的代码进行优化,使SqlSessionFactory实例一旦创建就应该在应用的运行周期中始终存在。

需要对SqlSessionFactory实例的代码进行优化,使SqlSessionFactory实例只被创建一次,并可反复使用。创建工具类MyBatisUtil实现该需求。

pubilc class MyBatisUtil{
	private static SqlSessionFactory factory;

	static{
		try{
			InputStream is  = Resources.getResourceAsStream("mybatis-config.xml");
			factory = new SqlSessionFactoryBuilder().build(is);
		}catch(IOException e){
			throw new RuntimeException("初始化失败",e)
		}
	}
	//创建并返回SqlSession实例
	public static SqlSession createSqlSession(){
		return factory.openSession(false);
	}
	//关闭SqlSession()
	public static void closeSqlSession(SqlSession sqlsession){
		if(sqlsession!=null){
			sqlsession.close();
		}
	}
}

SqlSession表示一次数据库会话。SqlSession实例是非线程安全的,不能被共享,每个线程都应该使用自己独立的SqlSession实例,SqlSession实例的生命周期不应该是永久的。因此,SqlSession实例最佳的作用域范围是一次请求,或方法作用域内。

及时关闭SqlSession是非常重要的。

|----认识映射文件:

介绍:
MyBatis的映射文件主要用于定义业务操作命令,实现对象与数据表字段的映射,并控制对最终结果的封装.MyBatis是针对SQL构建,相对具有相同功能的JDBC代码,减少了95%的代码量。

基本格式:

<mapper namespace="匿名空间">
    <select/insert/update/delete等等 id="业务标识名" resultType="封装结果的对象[实体类全名]" parameterType="占位符的来源">
        SQL命令
    </select/insert/update/delete等等>
</mapper>

说明:
1.namespace: 表示命名空间,类似Java包的作用.[在旧版中可选,在新版中必须配置]
2.id: 设置业务操作匿名,方便程序中调用.
3.parameterType: 指出将要传入SQL命令中的占位符的类型,可以是普通类型或自定义类.
4.resultType: 指出SQL命令执行结果的类型.若结果为集合,该属性值为元素的类型名.
5.statementType: 设置SQL执行对象的类型: STATEMENT,PREPARED[默认值],CALLABLE.
6.SQL命令末尾后的分号,可选

|-----占位符:
介绍:
Mybatis映射文件中的SQL命令,支持以占位符方式设置字段的值.同JDBC那样,当执行SQL命令时需要额外指出占位符的值.
格式:
#{占位符名}
说明:
1.占位符的值可以来自实体对象,Map集合,普通数据
2.若占位符的值来自普通数据,占位符名 任意. [仅1个占位符,比如 id]
3.若占位符的值来自实体对象,占位符名 必须为对象的属性名
4.若占位符的值来自Map集合,占位符名 必须为键名

----结果映射
介绍:
MyBatis自动将POJO对象的属性与查询结果集中字段名或添加/修改/删除中占位符名映射,实现对象与表的映射关系.
同时,MyBatis提供了手动设置POJO对象属性与执行结果映射的方式: resultMap。

解决字段名与属性名不同,无法映射:
方式1: 设置字段匿名
select id, username as name, sex,age,address from user

方式2: resultMap

<resultMap>
    <select id="" resultType="" resultMap="resultMap匿名A">
        SQL命令
    </select>
    <!--自定义映射规则-->
    <resultMap id="resultMap匿名A" type="实体类全名">
        <id property="主键属性" column="主键字段名" />
        <result property="普通属性" column="字段名" />
    </resultMap>

自定义映射原理:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值