mybatis系列-入门篇

mybatis是我们比较常用的orm框架,下面是官网的介绍

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

mybatis一大特点,或者说比较为人熟知的应该就是比 hibernate 是更轻量化,为国人所爱好的orm框架,对于hibernate目前还没有深入的拆解过,后续可以也写一下,在使用体验上觉得是个比较精巧的框架,看代码也比较容易,所以就想写个系列,第一篇先是介绍下使用
根据官网的文档上我们先来尝试一下简单使用
首先我们有个简单的配置,这个文件是mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 需要加入的properties-->
    <properties resource="application-development.properties"/>
    <!-- 指出使用哪个环境,默认是development-->
    <environments default="development">
        <environment id="development">
        <!-- 指定事务管理器类型-->
            <transactionManager type="JDBC"/>
            <!-- 指定数据源类型-->
            <dataSource type="POOLED">
                <!-- 下面就是具体的参数占位了-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 指定mapper xml的位置或文件-->
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

在代码里创建mybatis里重要入口

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

然后我们上面的StudentMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nicksxs.mybatisdemo.StudentMapper">
    <select id="selectStudent" resultType="com.nicksxs.mybatisdemo.StudentDO">
        select * from student where id = #{id}
    </select>
</mapper>

那么我们就要使用这个mapper,

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
    StudentDO studentDO = session.selectOne("com.nicksxs.mybatisdemo.StudentMapper.selectStudent", 1);
    System.out.println("id is " + studentDO.getId() + " name is " +studentDO.getName());
} catch (Exception e) {
    e.printStackTrace();
}

sqlSessionFactory是sqlSession的工厂,我们可以通过sqlSessionFactory来创建sqlSession,而SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。可以看到mapper.xml中有定义mapper的namespace,就可以通过session.selectOne()传入namespace+id来调用这个方法
但是这样调用比较不合理的点,或者说按后面mybatis优化之后我们可以指定mapper接口

public interface StudentMapper {

    public StudentDO selectStudent(Long id);
}

就可以可以通过mapper接口获取方法,这样就不用涉及到未知的变量转换等异常

try (SqlSession session = sqlSessionFactory.openSession()) {
    StudentMapper mapper = session.getMapper(StudentMapper.class);
    StudentDO studentDO = mapper.selectStudent(1L);
    System.out.println("id is " + studentDO.getId() + " name is " +studentDO.getName());
} catch (Exception e) {
    e.printStackTrace();
}

这一篇咱们先介绍下简单的使用,后面可以先介绍下这些的原理。