IDEA创建MyBatis——初始

来源:互联网 发布:生命的本质是什么知乎 编辑:程序博客网 时间:2024/06/10 11:54






一、为什么需要框架技术


1.框架技术
是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件



2.分析优势
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序 


二、MyBatis


1.半自动化的ORM实现
2.DAO层
3.动态SQL
4.小巧灵活、简单易学


1.持久化与ORM

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




01.ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储


02.ORM解决方案包含下面四个部分
在持久化对象上执行基本的增、删、改、查操作
对持久化对象提供一种查询语言或者API
对象关系映射工具
提供与事务对象交互、执行检查、延迟加载以及其他优化功能

2.MyBatis简介

*MyBatis前身是iBatis,本是Apache的一个开源的项目
*官方网站
http://mybatis.org
*ORM框架
实体类和SQL语句之间建立映射关系
*特点
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试

3.搭建MyBatis开发环境

使用MyBatis的开发步骤


   a.下载mybatis-3.2.2.jar包并导入工程
   b.编写MyBatis核心配置文件(configuration.xml)
   c.创建实体类-POJO
   d.DAO层-SQL映射文件(mapper.xml)
   e.创建测试类

          读取核心配置文件mybatis-config.xml
          创建SqlSessionFactory对象,读取配置文件
          创建SqlSession对象
          调用mapper文件进行数据操作

项目结构如图所示:





pom.xml

<dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.31</version>    </dependency>    <dependency>      <groupId>org.mybatis</groupId>      <artifactId>mybatis</artifactId>      <version>3.2.2</version>    </dependency>    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.17</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>RELEASE</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>RELEASE</version>    </dependency>    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>1.7.4</version>    </dependency>    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-log4j12</artifactId>      <version>1.7.5</version>      <scope>test</scope>    </dependency>  </dependencies>  <build>  <resources>    <resource>      <directory>src/main/java</directory>      <includes>        <include>**/*.xml</include>      </includes>    </resource>  </resources>  </build>

mybatis-config.xml——核心配置文件

<?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>    <properties resource="database.properties"></properties>    <typeAliases>        <package name="cn.happy.entity"/>    </typeAliases>    <environments default="development">        <environment id="development">            <transactionManager type="JDBC"></transactionManager>            <dataSource type="POOLED">                <property name="driver" value="${database.driver}" />                <property name="url" value="${database.url}" />                <property name="username" value="${database.username}" />                <property name="password" value="${database.password}" />            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="cn/happy/dao/department.xml"></mapper>    </mappers></configuration>

database.properties  数据库接连的相关配置

database.driver=com.mysql.jdbc.Driverdatabase.url=jdbc:mysql://localhost:3306/empdbdatabase.username=rootdatabase.password=


department.xml

<?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.happy.dao.DeptDao">    <!--可以重用的SQL块,也可以被其他语句引用-->    <sql id="columns">        id,name    </sql>    <!--用来描述数据库结果集和对象的对应关系-->    <!-- 1.查找所有部门-->    <select id="getAllDept" resultType="Department">        select <include refid="columns"></include> from department    </select></mapper>

DepartmentTest     部门测试类


  @Test    public void deptTest() throws IOException {        String resource="mybatis-config.xml";        InputStream stream= Resources.getResourceAsStream(resource);        //获得会话工厂        SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(stream);        //会话        SqlSession session=sf.openSession();        //01.弱类型  通过命名空间唯一锁定要执行的sql       // List<Department> list = session.selectList("cn.happy.dao.getAllDept");        //02.强类型        DeptDao dao = session.getMapper(DeptDao.class);        List<Department> list = dao.getAllDept();        for (Department item:list){            System.out.println(item.getName());        }        session.close();    }

实现思路:


1、 mybatis配置 
mybatis-config.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。 
mapper.xml文件即sql映射文件,文件中配置了操作数据库sql语句。此文件需要在mybatis-config.xml中加载。

2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂 
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。 
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。 
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。 
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。 
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

输出映射(返回的结果集可以有哪些类型)

1)基本类型

2)pojo类型

3)List类型

3.MyBatis框架优缺点

优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差

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


4.MyBatis基本要素

01.MyBatis的核心对象  SqlSessionFactoryBuilder 、  SqlSessionFactory 、SqlSession
02.mybatis-config.xml  系统核心配置文件
03.mapper.xml  SQL映射文件

核心对象:

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

2.SqlSessionFactory
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
作用域:Application
生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例

3.SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享

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

SqlSession的两种使用方式
01.通过SqlSession实例直接运行映射的SQL语句
02.基于Mapper接口方式操作数据

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



a.配置properties元素的两种方式
1.通过外部指定的方式(database.properties),实现动态配置
2.直接配置为xml,实现动态配置

b.Setting元素

用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置



c:typeAliases元素

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

//方式一<typeAliases><typeAlias alias="User" type="cn.smbms.pojo.User"/></typeAliases>//方式二:<typeAliases><package name ="cn.smbms.pojo" /></typeAliases>

d:environments元素

表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)


transactionManager-事务管理器


dataSource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型


e:mappers元素



5.MyBatis与Hibernate的区别