MyBatis的基本构成

本文介绍MyBatis框架的核心组件,包括SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession的作用及构建过程。并通过示例展示了如何使用MyBatis进行数据库操作。
摘要由CSDN通过智能技术生成

核心组件:

  • SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码生成SqlSessionFactory(工厂接口)
  • SqlSessionFactory:依靠工厂来生成SqlSession(会话)
  • SqlSession:一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口
  • SQL Mapper:它是由一个Java接口和ML文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL语句,并返回结果

构建SqlSessionFactory

每个MyBatis的应用都是以SqlSessionFactory的实例为中心的。SqlSessionFactory的实例通过SqlSessionFactoryBuilder获得。SqlSessionFactory的任务是创建SqlSession。
在这里,采用的是依据XML配置方式来创建SqlSessionFactory。

<?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="jdbc.properties" />
    <typeAliases>
        <typeAlias type="com.wojiushiwo.mybatis_demo.User" alias="user" />
        <typeAlias type="com.wojiushiwo.mybatis_demo.Article" alias="article"/>
    </typeAliases>
    <!-- 配置全局属性 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.Driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.userName}" />
                <property name="password" value="${jdbc.passWd}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com.wojiushiwo/UserMapper.xml"/>
        <mapper resource="com.wojiushiwo/ArticleMapper.xml"/>
        <mapper class="com.wojiushiwo.mybatis_demo.UserDao"/>
    </mappers>
</configuration>
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

构建 SqlSession

SqlSession接口类似于JDBC的Connection接口对象,我们需要每次用完正常关闭它,让连接资源归还给数据库。如果我们不及时关闭资源,数据库连接资源将很快被耗尽,系统很快因为数据库资源的匮乏而瘫痪。我们使用SqlSessionFactory创建SqlSession

//创建SqlSession
SqlSession session = sqlSessionFactory.openSession();

创建完SqlSession之后,我们便可以使用它来完成对数据库的ACID操作了。

映射器

映射器是由Java接口和XML文件(或注解)共同组成,常具有以下作用:

  • 定义参数类型
  • 描述SQL语句
  • 定义查询结果和POJO的映射关系
    虽然基于注解和基于XML配置均可以实现映射器,但是使用Java注解,功能较少,对于普通操作可以使用。如果存在动态SQL语句,那么Java文件可读性就很差了。综上,依然推荐使用基于XML配置方式
//Mapper接口:
public interface UserMapper {
    //@Select(value="select * from user")
    List<User> findAll();
}
UserMapper.xml文件:
<mapper namespace="com.wojiushiwo.mybatis_demo.UserMapper">
    <select id="findAll" resultType="user">
        select * from user;
    </select>
</mapper>

//在Mybatis全局配置文件中,配置该Mapper
...
<mappers>
        <mapper class="com.wojiushiwo.mybatis_demo.UserMapper"/>
</mappers>

注意:UserMapper.xml文件中namespace与UserMapper权限定名一致
UserMapper.xml文件中select表示查询,查询语句如下:select * from user; 将查询的结果映射到对象User上。
resultType=”user” 这里user表示User类的别名,在前面mybatis-config.xml文件中配置的

User类:
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String name;
    private int age;

    ...getter和setter...
    public User() {

    }

    public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

把上面内容连贯起来,调用一下,进行简单的查询操作:

       InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession session = sqlSessionFactory.openSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List<User> list = userMapper.findAll();
        for (User user : list) {
            System.out.println(user);
        }
        session.close();

参考文献:
深入浅出MyBatis技术原理与实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值