Mybatis学习系列(1) –– 入门简介

MyBatis简介

Mybatis是Apache的一个Java开开源项目,是一个支持动态Sql语句的持久层框架。Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码在Java类中。与JDBC相比:

  1. Mybatis通过参数映射方式,可以将参数灵活的配置在SQL语句中的配置文件中,避免在Java类中配置参数(JDBC)
  2. Mybatis通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手工检索(JDBC)
  3. Mybatis可以通过Xml配置文件对数据库连接进行管理。

MyBatis整体架构及运行流程

Mybatis整体构造由 数据源配置文件、Sql映射文件、会话工厂、会话、执行器和底层封装对象组成。

1.数据源配置文件

通过配置的方式将数据库的配置信息从应用程序中独立出来,由独立的模块管理和配置。Mybatis的数据源配置文件包含数据库驱动、数据库连接地址、用户名密码、事务管理等,还可以配置连接池的连接数、空闲时间等。

一个SqlMapConfig.xml基本的配置信息如下:

<configuration>
    <!-- 加载数据库属性文件 -->
    <properties resource="db.properties"></properties>
    <environments default="development">
        <environment id="development">
            <!--使用JDBC实务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
</configuration>

2.Sql映射文件

Mybatis中所有数据库的操作都会基于该映射文件和配置的sql语句,在这个配置文件中可以配置任何类型的sql语句。框架会根据配置文件中的参数配置,完成对sql语句以及输入输出参数的映射配置。

Mapper.xml配置文件大致如下:

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sl.dao.ProductDao">
    <!-- 根据id查询user表
        resultType:返回值类型,一条数据库记录也就对应实体类的一个对象
        parameterType:参数类型,也就是查询条件的类型
     -->
    <select id="selectProductById" resultType="com.sl.po.Product" parameterType="int">
     <!-- 这里和普通的sql 查询语句差不多,对于只有一个参数,后面的 #{id}表示占位符,里面不一定要写id,写啥都可以,但是不要空着,如果有多个参数则必须写pojo类里面的属性 -->
        select * from products where id = #{id}
    </select>
</mapper>

3.会话工厂与会话

Mybatis中会话工厂SqlSessionFactory类可以通过加载资源文件,读取数据源配置SqlNapConfig.xml信息,从而产生一种可以与数据库交互的会话实例SqlSession,会话实例SqlSession根据Mapper.xml文件中配置的sql,对数据库进行操作。

4.运行流程

会话工厂SqlSessionFactory通过加载资源文件获取SqlMapConfig.xml配置文件信息,然后生成可以与数据库交互的会话实例SqlSession。会话实例可以根据Mapper配置文件中的Sql配置去执行相应的增删改查操作。在SqlSession会话实例内部,通过执行器Executor对数据库进行操作,Executor依靠封装对象Mappered Statement,它分装了从mapper.xml文件中读取的信息(sql语句,参数,结果集类型)。Mybatis通过执行器与Mappered Statement的结合实现与数据库的交互。

执行流程图:

测试工程搭建

1. 新建maven工程

2. 添加依赖pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sl</groupId>
    <artifactId>mybatis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <junit.version>4.12</junit.version>
        <mybatis.version>3.4.1</mybatis.version>
        <mysql.version>5.1.32</mysql.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>
    <dependencies>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <!-- <scope>test</scope> -->
        </dependency>
        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- 日志处理 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
    </dependencies>
</project>

3.编写数据源配置文件SqlMapConfig.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="db.properties"></properties>
    <environments default="development">
        <!-- id属性必须和上面的defaut一致 -->
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <!--dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
     <!—申明mapper文件 -->
        <mappers>
        <!-- xml实现    注册productMapper.xml文件 -->
        <mapper resource="mapper/productMapper.xml"></mapper>
    </mappers>
</configuration>

4.编写SQL映射配置文件productMapper.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="com.sl.mapper.ProductMapper">

    <select id="selectAllProduct" resultType="com.sl.po.Product">
        select * from products
    </select>

</mapper>

5.编写测试代码TestClient.java

//使用productMapper.xml配置文件
public class TestClient {

    //定义会话SqlSession
    SqlSession session =null;

    @Before
    public void init() throws IOException {
        //定义mabatis全局配置文件
        String resource = "SqlMapConfig.xml";

        //加载mybatis全局配置文件
        //InputStream inputStream = TestClient.class.getClassLoader().getResourceAsStream(resource);

        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(inputStream);
        //根据sqlSessionFactory产生会话sqlsession
        session = factory.openSession();
    }

    //查询所有user表所有数据
    @Test
    public void testSelectAllUser() {
        String statement = "com.sl.mapper.ProductMapper.selectAllProduct";
        List<Product> listProduct =session.selectList(statement);
        for(Product product:listProduct)
        {
            System.out.println(product);
        }
        //关闭会话
        session.close();
    }

}

public class Product {
    private int Id;
    private String Name;
    private String Description;
    private BigDecimal UnitPrice;
    private String ImageUrl;
    private Boolean IsNew;

    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 String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        this.Description = description;
    }

    public BigDecimal getUnitPrice() {
        return UnitPrice;
    }

    public void setUnitPrice(BigDecimal unitprice) {
        this.UnitPrice = unitprice;
    }

    public String getImageUrl() {
        return Name;
    }

    public void setImageUrl(String imageurl) {
        this.ImageUrl = imageurl;
    }

    public boolean getIsNew() {
        return IsNew;
    }

    public void setIsNew(boolean isnew) {
        this.IsNew = isnew;
    }

    @Override
    public String toString() {
        return "Product [id=" + Id + ", Name=" + Name + ", Description=" + Description
                + ", UnitPrice=" + UnitPrice + ", ImageUrl=" + ImageUrl + ", IsNew=" + IsNew+ "]";
    }
}

6.运行测试用例

原文地址:https://www.cnblogs.com/ashleyboy/p/9255153.html

时间: 2024-08-29 14:17:42

Mybatis学习系列(1) –– 入门简介的相关文章

MyBatis学习(一)简介及入门案例

1.什么是MyBatis? MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和Java的POJO映射成数据库中的记录. MyBatis作为持久层框架,主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中,以实现SQL的灵活配置.这样的好处是将SQL语句和程序代码分离,可以在不修改代码的前提下,直接在配置文件中修

Mybatis 学习系列文章

深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇) 深入浅出Mybatis系列(九)---强大的动态SQL 南轲梦 2014-11-12 16:47 深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap 深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇) 深入浅出Mybatis系列(四)

MyBatis学习系列一之环境搭建

学习一个新的知识,首先做一个简单的例子使用一下,然后再逐步深入.MyBatis的学习我们也从一个小例子开始. 1.MyBatis的作用: 简单的说MyBatis实现的是DAO层,通过XML文件配置SQL,映射到PO. 2.需要准备的引用包 mybatis-3.2.8.jar:myBatis框架使用 ojdbc6.jar:数据库连接 3.结构分析 1)需要配置文件连接数据库: 2)需要公共方法提供数据库连接的使用: 3)PO:持久对象 4)数据查询SQL配置XML文件: 5)对外接口: 4.结构搭

MyBatis学习系列二之增删改查

数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连接数据库的配置单独放在.properties 文件中,然后在XML文件中引用,示例如下: config.properties: driver=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@127.0.0.1:1521:orcl username=pho

Mybatis学习系列(二)Mapper映射文件

Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<update>.<delete> 常见增删改查示例 <!-- namespace:此处使用包名+文件名 的形式 --> <mapper namespace="com.sl.mapper.ProductMapper"> <!--select – 映射

mybatis学习系列三(部分)

1 forearch_oracle下批量保存(47) oracle批量插入 不支持values(),(),()方式 1.多个insert放在begin-end里面 begin insert into myemployeee(id,last_name,email,gender,dept_id) values (myemployeee_seq.nextval,#{emp.lastName,jdbcType=VARCHAR},#{emp.email,jdbcType=VARCHAR}, insert

mybatis学习系列四--mybatis generator逆向工程

采用命令行方式执行逆向工程 1.配置文件generatorConfig.xml 保存在目录:D:\E\workspace\eclipse\mybatis_generator <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEgeneratorConfiguration PUBLIC"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//E

springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits springmvcmybatis学习笔记汇总 目录 联系作者 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,涉及概念介绍.环境搭建.编程细节.运行调试等方面. 这套笔记整体偏入门和应用,适合快速上手,对底层实现和机理并未做过多分析.我后续会研读spring源码,并把学习的收获写成博客

Asp.Net MVC5入门学习系列①

原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个项目,具体如下图: VS13与12/10不同的是创建Web的时候你不能像以前那样直接选你要创建框架项目,而把这个选择集中在了第二步骤,当你操作完上面点击确定就可以看到一个集中所有web框架供你选择的窗体,具体如下: 然后点击确定,vs会帮我们完成创建mvc应用程序的动作. 创建完成后,我们的VS会呈