MyBatis框架学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis框架学习相关的知识,希望对你有一定的参考价值。

 
MyBatis介绍
 
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并改名为MyBatis。2013年11月迁移到Github。iBatis一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
 
当我们在DAO层使用jdbc连接数据查询数据时,会发现有许多重复的代码。
为了减少代码量与遵循开发规范,我们可以使用MyBatis框架。
MyBatis作为一个持久层的框架,几乎消除了jdbc代码。
它能够将数据库中的记录映射成基本类型、Map类型和Pojo类型。
 
MyBatis在开发中的位置
技术分享
由上图可以看出MyBatis位于DAO层,具体来说是DAO层下面连接数据库的实现类中。
 
我们可以分析一下jdbc连接数据那些变化的部分
技术分享
从上面的图片我们可以看出在使用jdbc连接数据的时候那些变化的部分:
  1、输入参数类型
  2、sql语句
  3、参数设置
  4、封装数据
那些重复的部分交给MyBatis框架完成,变化的部分我们在程序中仍要实现,就好像我们之前使用的根据类一样。
只不过在使用了框架之后,实现的方式有写代码的方式转到配置文件元素的方式而已。
 
 
MyBatis应用的简单程序
1、新建Java工程
2、导入相关的jar包
技术分享
3、编写全局配置文件
<?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>

    <!-- mybatis的运行环境
        数据库信息
        事务
     -->
    <environments default="development">
        <environment id="development">
            <!-- jdbc事务 -->
            <transactionManager type="JDBC" />
            <!-- mybatis自身数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />
                <property name="username" value="scott" />
                <property name="password" value="tiger" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 映射文件的信息  -->
    <mappers>
        <mapper resource="sqlmap/GoodsDAO.xml"/>
    </mappers>
</configuration>

 

4、实体类:GoodsModel
技术分享
package cn.sxt.mybatis.vo;

public class GoodsModel {
    private int uuid;
    private String name;
    private String description;
    private float price;
    
    public GoodsModel() {
        
    }

    public GoodsModel(int uuid, String name, String description, float price) {
        this.uuid = uuid;
        this.name = name;
        this.description = description;
        this.price = price;
    }

    public int getUuid() {
        return uuid;
    }
    public void setUuid(int uuid) {
        this.uuid = uuid;
    }
    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 float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((description == null) ? 0 : description.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + Float.floatToIntBits(price);
        result = prime * result + uuid;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        GoodsModel other = (GoodsModel) obj;
        if (description == null) {
            if (other.description != null)
                return false;
        } else if (!description.equals(other.description))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (Float.floatToIntBits(price) != Float.floatToIntBits(other.price))
            return false;
        if (uuid != other.uuid)
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "GoodsModel [uuid=" + uuid + ", name=" + name + ", description="
                + description + ", price=" + price + "]";
    }
}
View Code

 

5、编写mapper文件
<?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="goods">
    <select id="getByUuid" parameterType="int" resultType="cn.sxt.mybatis.vo.GoodsModel">
        select * from tbl_goods where uuid=#{uuid}
    </select>
</mapper>

 

6、编写测试类
package cn.sxt.mybatis.test;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import cn.sxt.mybatis.vo.GoodsModel;

public class TestApp {
    public static void main(String[] args) throws IOException {
        String resource = "SqlMapConfig.xml";
        //根据全局配置文件得到输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //根据输入流创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //根据SqlSessionFactory创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        //操作
        GoodsModel gm = sqlSession.selectOne("goods.getByUuid", 1);
        System.out.println(gm);
        
        sqlSession.close();
    }
}

 

数据库表:
技术分享
从上面的程序我们可以看出:
  1、相关的jar包无须解释。
  2、全局配置文件是和我们所用的数据库有关,里面的mapper元素需要我们进行手动配置。
  3、mapper文件是使用MyBatis的一个重点。
    namespace:命名空间,防止多个id一样的方法,在调用方法时用到。
    id:方法名
    parameterType:输入参数类型
    resultType:返回结果类型
    sql语句:#{uuid} 相当于之前的‘?‘
  4、在TestApp中,我们不需要再写jdbc中那些重复的步骤。相比之下,我们需要得到一个SqlSession实例,而这个这实例可以从MyBatis框架中获取,我们可以忽略它。然后就是调用它的相对应的方法,输入相应的参数,获取查询结果。
  
 
 
 
 
 
 
 
 
 
 
 
 

以上是关于MyBatis框架学习的主要内容,如果未能解决你的问题,请参考以下文章

Spring+SpringMVC+MyBatis+Maven框架整合

mybatis学习 mybatis框架的特性

Mybatis框架学习——我的第一个Mybatis程序

学习017 Mybatis框架

MyBatis框架学习

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段