MyBatis-1 概述与HelloWorld

  MyBatis是支持定制化SQL、存储过程和高级映射的优秀且轻量级的持久层框架。其避免了几乎所有的JDBC代码和手动设置参数和获取结果集的繁琐工作,开发人员只需要掌握好SQL语句,方便进行性能优化;另外,MyBatis可以使用简单的XML或注解来配置原始映射,将JavaBean映射成数据库中的记录。
  其中,MyBatis概述与HelloWorld的具体实现代码下载地址:http://download.csdn.net/download/bingbeichen/9812888


1. 概述

  这里写图片描述

  MyBatis原是Apache的开源项目iBatis,2010年6月该项目由Apache Software Foundation迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis 3.x正式更名为MyBatis ,代码于2013年11月迁移到Github(下载地址:https://github.com/mybatis/mybatis-3/)。
  其中,iBatis一词来源于internet和abatis的组合,是一个基于Java的持久层框架,iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。


2. HelloWorld

  ①. 在MySQL的mybatis数据库中创建一张测试数据表

CREATE TABLE tbl_employee(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    last_name VARCHAR(255),
    gender CHAR(1),
    email VARCHAR(255)
)

  ②. 在Eclipse中创建新的工程,新建lib目录并添加所依赖的jar包
  这里写图片描述

  ③. 创建测试数据表所对应的JavaBean

package com.qiaobc.mybatis.bean;

public class Employee {

    private Integer id;

    private String lastName;

    private String gender;

    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", gender="
                + gender + ", email=" + email + "]";
    }

}

  ④. 创建SQL映射文件,用于保存SQL语句的映射信息,将SQL语句与Java代码解耦

<!-- EmployeeMapper.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">

<!-- 
    namespace:命名空间
    id:SQL语句的唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中获取id值
 -->
<mapper namespace="com.qiaobc.mybatis.EmployeeMapper">
    <select id="selectEmployee" resultType="com.qiaobc.mybatis.bean.Employee">
        select id, last_name lastName, gender, email from tbl_employee where id = #{id}
    </select>
</mapper>

  ⑤. 创建MyBatis全局配置文件,配置数据源、事务管理器等系统运行环境信息

<!-- 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>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />

            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>

        </environment>
    </environments>

    <!-- 将SQL映射文件(EmployeeMapper.xml)注册到全局配置文件(mybatis-config.xml)中 -->
    <mappers>
        <mapper resource="EmployeeMapper.xml" />
    </mappers>

</configuration>

  ⑥. 具体测试

package com.qiaobc.mybatis.test;
public class MyBatisTest {

    @Test
    public void test() throws Exception {
        // 1. 根据MyBatis全局配置文件,创建SqlSessionFactory实例
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 获取SqlSession实例:其能够执行已经映射的SQL语句,且一个SqlSession对象代表和数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 3. 执行已经映射的SQL语句
        // SQL语句的唯一标识:statement Unique identifier matching the statement to use.
        // 执行SQL语句所需参数:parameter A parameter object to pass to the statement.
        try {
            Employee employee = sqlSession.selectOne("selectEmployee", 1);
            System.out.println(employee);
        } finally {
            // 4. 关闭SqlSession
            sqlSession.close();
        }
    }
}

3. 接口式编程

  主要问题:使用XML文件的方式创建SqlSessionFactory实例,进而获取SqlSession对象进行数据库操作时,已映射SQL语句的唯一标识信息较长且执行SQL所需要参数的类型与返回值类型没有限制。
  在此,当使用MyBatis框架时,通常使用接口式的编程方式,具体步骤如下:
  ①. 创建待操作对象对应的接口类和相应的方法,如EmployeeMapper

package com.qiaobc.mybatis.dao;
import com.qiaobc.mybatis.bean.Employee;
public interface EmployeeMapper {
    // 根据员工ID获取员工信息
    public Employee getEmployeeByID(Integer id);
}

  ②. 将所创建的EmployeeMapper接口和对应的方法与SQL映射文件进行动态绑定

<?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">

<!-- 
    namespace:命名空间; 指定为接口的全类名
    id:SQL语句的唯一标识; 指定为接口对应方法的名称
    resultType:返回值类型
    #{id}:从传递过来的参数中获取id值
 -->
<mapper namespace="com.qiaobc.mybatis.dao.EmployeeMapper">
    <select id="getEmployeeByID" resultType="com.qiaobc.mybatis.bean.Employee">
        select id, last_name lastName, gender, email from tbl_employee where id = #{id}
    </select>
</mapper>

  ③. 具体测试

@Test
public void test2() throws Exception {
    // 1. 根据MyBatis全局配置文件,创建SqlSessionFactory实例
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2. 获取SqlSession实例,一个SqlSession实例对应一次数据库会话
    SqlSession sqlSession = sqlSessionFactory.openSession();

    try {
        // 3. 获取接口的实现类对象
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

        // 将接口与SQL映射文件动态绑定后,MyBatis会为该接口自动地创建一个代理对象,代理对象来执行数据库操作
        System.out.println(mapper); //org.apache.ibatis.binding.MapperProxy@46e91e2f

        // 4. 调用接口的查询方法
        Employee employee = mapper.getEmployeeByID(1);
        System.out.println(employee);
    } finally {
        sqlSession.close();
    }
}

  ④. 总结
  接口式编程只需要声明接口和对应的数据库操作方法,再将接口和方法与SQL映射文件进行动态绑定即可;MyBatis会为该接口自动地创建一个代理对象,用于进行数据库的增删改查操作,而方法的具体实现可以看做是由SQL映射文件来完成的。


4. 小结

/**
 * 1. 接口式编程
 *      原生方式:   Dao     ====>   DaoImpl
 *      MyBatis:    Mapper  ====>   XxxMapper.xml
 *
 * 2. SqlSession代表与数据库的一次会话,使用完毕必须释放
 * 3. SqlSession与Connection都是非线程完全的,每次使用都应该去获取新的对象
 * 
 * 4. Mapper接口没有实现类,但将该接口与XML文件动态绑定后,MyBatis会为其自动生成一个代理对象
 *      EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
 * 
 * 5. 两个重要的配置文件
 *  1). MyBatis全局配置文件:包含数据库连接池、事务管理器等系统运行环境信息;
 *  2). SQL映射文件:保存每一个SQL语句的映射信息,将SQL语句抽取出来
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值