MyBatis 基础

概述

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

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

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

MyBatis 使用步骤

  1. 核心配置文件 mybatis-config.xml
  2. POJO 模型创建
  3. 映射文件配置
  4. 获取 SqlSessionFactory
  5. 获取 SqlSession
  6. CRUD 操作
  7. Transaction 操作
  8. 关闭 SqlSession

核心配置文件

本示例的项目工程视图为
Project view
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_demo"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
        <environment id="oracle">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:mybatis_demo"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

:必须先在 pom.xml 中配置好 MyBatis 的依赖包,否则 mybatis-config.xml 会报 URI is not registered 的错。
environments 元素下可以配置多个 environment 来存放数据库连接,每个 environment 下配置了事务管理类型和连接池类型。
mappers 元素下,配置实体类的映射文件路径。

创建模型

根据数据库表创建实体类模型 User

package com.ggli.entity;

public class User {

    private Long id;
    private String name;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

映射文件配置

对应于User模型,添加映射文件 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//org.mybatis//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="UserMapper">
    <select id="queryUser" resultType="com.ggli.entity.User">
        SELECT * FROM t_user
    </select>
    <select id="findUserById" resultType="com.ggli.entity.User" parameterType="java.lang.Long">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
    <select id="findUserByName" resultType="com.ggli.entity.User" parameterType="java.lang.String">
        SELECT * FROM t_user WHERE name LIKE #{name}
    </select>
    <insert id="addUser" parameterType="com.ggli.entity.User">
        INSERT INTO t_user (id, name) VALUES (#{id}, #{name})
    </insert>
    <update id="updateUser" parameterType="com.ggli.entity.User">
        UPDATE t_user SET name = #{name} WHERE id = #{id}
    </update>
    <delete id="deleteUser" parameterType="long">
        DELETE FROM t_user WHERE id = #{id}
    </delete>
</mapper>

上述文件配置了基本的CRUD操作。

获取 SqlSessionFactory

获取 SqlSessionFactory 有两种方式,第一种为通过核心配置文件 mybatis-config.xml,第二种为通过 Configuration 类。

  • 通过读取 mybatis-config.xml 方式
package com.ggli.util;

public class SqlSessionFactoryUtil {
    private static String XML_PATH = "conf/mybatis-config.xml";
    private static SqlSessionFactory factory;

    static {
        try {
            Reader reader = Resources.getResourceAsReader(XML_PATH);
            factory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return factory.openSession();
    }
    public static void closeSqlSession(SqlSession session) {
        if (session != null) {
            session.close();
        }
    }
}
  • 通过 Configuration 方式(实质就是将 xml 配置转化为对应的对象)
DataSource dataSource = new PooledDataSource(
                "com.mysql.jdbc.Driver",
                "jdbc:mysql://localhost:3306/mybatis_demo",
                "root",
                ""
        );
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("mysql", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

单元测试

用JUnit进行测试

public class UserTest {

    private SqlSession session;

    @Before
    public void getSqlSession() {
        session = SqlSessionFactoryUtil.getSqlSession();
    }
    @After
    public void closeSqlSession() {
        SqlSessionFactoryUtil.closeSqlSession(session);
    }
    @Test
    public void queryUser() {
        List<User> users = session.selectList("UserMapper.queryUser");
        for (User user : users) {
            System.out.println(user.getId() + ": " + user.getName());
        }
    }
    @Test
    public void findUserById() {
        Long id = 1L;
        User user = session.selectOne("UserMapper.findUserById", id);
        if (user != null) {
            System.out.println(user.getId() + ": " + user.getName());
        }
    }
}

下一步

上述示例,从核心配置文件,到映射文件,到获取 SqlSessionFactory,到获取 SqlSession,到 Java API 操作,再到测试验证,完成了对 MyBatis 的基本操作。当然这只是最基本的用法。
比如核心配置可配置返回类型的简称,然后在映射文件 resultType 中采用。
比如示例中的 Java 操作,还可以改为通过 Mapper 接口的操作。
比如映射配置,可以改为在 Mapper 接口中通过注解的方式实现。
再比如 MyBatis 的动态 SQL、类型转换、拦截器等等,还有待进一步学习。

参考:mybatis学习总结-mybatis初体验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值