Mybatis入门(1)

一、Mybatis介绍

背景介绍

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java POJOsPlain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

总体流程

(1)加载配置并初始化

触发条件:加载配置文件

SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQLID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求触发条件:API接口层传递请求过来

传入参数:为SQLID和传入参数对象

处理过程:

(A)根据SQLID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。

功能架构

MyBatis架构

功能架构讲解:

我们把Mybatis的功能架构分为三层:

(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

框架架构

框架架构讲解:

(1)加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个

mybatis结构

MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQLID和传入对象(可以是MapJavaBean或者基本数据类型),Mybatis会根据SQLID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。

3SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

(4)结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMapJavaBean或者基本数据类型,并将最终结果返回。

动态SQL

MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的
  经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在
columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。
  尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中
  使用强大的动态SQL来改进这些状况。
  动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉
  的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只
  剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素。

 

 

 

 

 

  MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

二、mybatis快速入门

2.1、准备开发环境

 1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:

  

 

2、添加相应的jar包

  【mybatis】

         mybatis-3.1.1.jar

【MYSQL驱动包】
    mysql-connector-java-5.1.7-bin.jar

【oracle驱动包】

                 Ojdbc.jar

   

3、创建数据库和表,针对MySQL数据库

  SQL脚本如下:

 create database mybatis;

 use mybatis;

 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);

 INSERT INTO users(NAME, age) VALUES('李四', 22);

 INSERT INTO users(NAME, age) VALUES('张三', 27);

  将SQL脚本在MySQL数据库中执行,完成创建数据库和表的操作,如下:

  

 

  到此,前期的开发环境准备工作全部完成。

2.2、使用MyBatis查询表中的数据

  1、添加Mybatis的配置文件SqlMapConfig.xml

  在src目录下创建一个src/config/SqlMapConfig.xml文件,如下图所示:

  

 

SqlMapConfig.xml文件中的内容如下

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <!-- 配置mysql文件-->

    <properties resource="config/jdbc-mysql.properties" />

    <!--

       配置oracle文件 <properties resource="config/jdbc.properties"/>

    -->

    <environments default="development">

       <environment id="development">

           <transactionManager type="JDBC" />

           <dataSource type="POOLED">

              <property name="driver"value="${driverClassName}" />

              <property name="url"value="${url}" />

              <property name="username"value="${username}" />

              <property name="password"value="${password}" />

           </dataSource>

       </environment>

    </environments>

    <mappers>

       <!--

           注册userMapper.xml文件,

           userMapper.xml位于com/yun/mapping/这个包下,所以resource写成com/yun/mapping/userMapper.xml

       -->

       <mapper resource="com/yun/mapping/userMapper.xml"/>

    </mappers>

</configuration>

 

如果采用mysql数据库则建立

jdbc-mysql.properties

内容

    username=root

    password=123

    url=jdbc:mysql://localhost:3306/mybatis

driverClassName=com.mysql.jdbc.Driver

如果采用oracle数据库则建立

jdbc.properties

内容

    username=scott

    password=123

    url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL

driverClassName=oracle.jdbc.driver.OracleDriver

  2、定义表所对应的实体类,如下图所示:

  

User类的代码如下:

package com.yun.model;

 

public class User {

    private int id;

    private String name;

    private int age;

 

    public int getId() {

       return id;

    }

 

    public void setId(int id) {

       this.id = id;

    }

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public int getAge() {

       return age;

    }

 

    public void setAge(int age) {

       this.age = age;

    }

 

    @Override

    public String toString() {

       return "User[id=" + id + ",name=" + name + ",age=" + age + "]";

    }

}

 

  3、定义操作users表的sql映射文件userMapper.xml

  创建一个com.yun.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.xml文件,如下图所示:

  

 

userMapper.xml文件的内容如下:

<?xml version="1.0"encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <!--

       为这个mapper指定一个唯一的namespacenamespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的

       例如namespace="com.yun.mapping.userMapper"就是com.yun.mapping(包名)+userMapper(userMapper.xml文件去除后缀)

    -->

<mapper namespace="com.yun.mapping.userMapper">

    <!--

       select标签中编写查询的SQL语句,设置select标签的id属性为getUserid属性值必须是唯一的,不能够重复

       使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型

       resultType="com.yun.model.User"就表示将查询结果封装成一个User类的对象返回

       User类就是users表所对应的实体类

    -->

    <!--

        根据id查询得到一个user对象

     -->

    <select id="getUser" parameterType="int"resultType="com.yun.model.User">

       select *

       from users where id=#{id}

    </select>

    <!-- 创建用户(Create) -->

 

    <insert id="addUser" parameterType="com.yun.model.User">

       insert into users(name,age)

       values(#{name},#{age})

     </insert>

 

    <!-- 删除用户(Remove) -->

    <delete id="deleteUser" parameterType="int">

       delete from users where

       id=#{id}

    </delete>

 

    <!-- 修改用户(Update) -->

    <update id="updateUser" parameterType="com.yun.model.User">

       update users set

       name=#{name},age=#{age} where id=#{id}

    </update>

 

    <!-- 查询全部用户-->

    <select id="getAllUsers" resultType="com.yun.model.User">

       select * from users

    </select>

 

</mapper>

4、在conf.xml文件中注册userMapper.xml文件

<mappers>

       <!--

           注册userMapper.xml文件,

           userMapper.xml位于com/yun/mapping/这个包下,所以resource写成com/yun/mapping/userMapper.xml

       -->

       <mapper resource="com/yun/mapping/userMapper.xml"/>

    </mappers>

  5、编写测试代码:执行定义的select语句

  创建一个Test1类,编写如下的测试代码:

packagetest;

importjava.util.List;

importorg.apache.ibatis.session.SqlSession;

importcom.yun.model.User;

importcom.yun.util.MyBatisUtil;

publicclass Test01 {

    /**

     *@param args

     */

    public static void main(String[] args) {

        SqlSession session=MyBatisUtil.getSession();

  String addString="com.yun.mapping.userMapper.addUser";

        User user=new User();

        user.setName("addUser1");

        user.setAge(18);

        session.insert(addString,user);

       session.commit();

    }

 

}


猜你喜欢

转载自blog.csdn.net/liuyunshengsir/article/details/50128871
今日推荐