Mybatis入门篇

一、Mybatis介绍与对比

1、定义

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

mybatis项目地址:

https://github.com/mybatis/mybatis-3

mybatis官方文档地址:

https://mybatis.org/mybatis-3/

2、历史持久层的设计到延伸

 

3、为什么要使用MyBatis?

 

二、MyBatis开发运行流程

1、开发流程

(1)、建立一个maven项目,引入MyBatis相关的jar包

<!-- mybatis-jar -->
<dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.4</version>
    </dependency>

    <!-- mysql-jar -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.45</version>
    </dependency>

(2)、建立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>

    <!--
    1、mybatis可以使用properties来引入外部的properties配置文件的内容
      resource:引入类路径下的资源
      url:引用网络路径或者磁盘路径下的资源
    -->
    <properties resource="db.properties"></properties>
    
    <!--
    2、settings包含很多的设置项
    settings:用来设置每一个设置项
              name:设置项名
              value:设置项取值
    -->
    <!--开启驼峰模式-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <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.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--将我们写好的sql映射文件一定要注册到全局配置文件中-->
    <mappers>
        <mapper resource="mapper/OkrRoleMapper.xml"/>
    </mappers>
</configuration>

(3)、建立POJO数据库表实体[OkrRole]

(4)、建立我们业务接口

public interface OkrRoleDao {

    public OkrRole getOkrRoleById(Integer id);
}

(5)、在main/resources/mapper/下建立我们的mapper配置文件[OkrRoleMapper.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">
<!--<mapper namespace="com.tan.OkrRoleDao">-->
<mapper namespace="com.tan.dao.OkrRoleDao">

    <!--
    namespace:名称空间,指定为接口的全类名
    id:唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值
    -->
    <select id="getOkrRoleById" resultType="com.tan.bo.OkrRole">
        select * from okr_role where id = #{id}
    </select>
</mapper>

xml文件标签的定义

namespace:名称空间,指定为接口的全类名。
id:唯一标识(接口的方法名称)。
resultType:返回值类型。
#{id}:从传递过来的参数中取出id值。

(6)、将配置的Mapper业务sql的xml配置文件注册到全局配置文件中[mybatis-config.xml]

<!--将我们写好的sql映射文件一定要注册到全局配置文件中-->
    <mappers>
        <mapper resource="mapper/OkrRoleMapper.xml"/>
    </mappers>

(7)、运行流程的调用

 @Test
    public void test02() throws IOException{

        String resource = "mybatis-config.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取SqlSession实例,能直接执行已经映射的sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {

            //获取接口的实现类对象
            //会为接口自动的创建一个代理对象,代理对象去执行增删改查的方法。
            OkrRoleDao mapper = sqlSession.getMapper(OkrRoleDao.class);

            OkrRole okrRoleById = mapper.getOkrRoleById(48);
            System.out.println(okrRoleById);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

(8)、运行流程总结

运行步骤:

第一步:根据xml配置文件(全局配置文件),创建一个SqlSessionFactory对象(有数据源一些运行环境信息).

第二步:sql映射文件,配置了每一个sql,以及sql的封装规则等。

第三步:将sql映射文件保存在全局配置文件中。

第四步:执行代码的编写:

              使用全局配置文件得到SqlSessionFactory。

             使用SqlSession工厂,获取SqlSession对象,使用它来增删改查(一个SqlSession代表和数据库的一次会话,用完关                 闭)。

             获取接口的实现类对象,会为接口自动创建一个代理对象,代理对象去执行增删改查的方法。

SqlSession代表和数据库的一次会话,用完必须关闭。

SqlSession和connection一样,它都是非线程安全的,每次使用都应该去获取新的对象,不能设置全局变量,应该会产生资源竞争。

mapper接口没有实现类,但mybatis会为这个接口生成一个代理对象(接口与xml进行绑定)。

mybatis全局配置文件包含数据库连接池、事物管理器、系统运行环境等信息。

sql映射文件,保存了每一个sql语句的映射信息,将sql抽离出来。

运行原理:

https://blog.youkuaiyun.com/u010890358/article/details/80665753?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159136368219724848302591%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159136368219724848302591&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-80665753.first_rank_v2_rank_v25&utm_term=mybatis%E5%8E%9F%E7%90%86

 

https://blog.youkuaiyun.com/qq_38182963/article/details/78824620?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159136368219724848302591%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159136368219724848302591&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-78824620.first_rank_v2_rank_v25&utm_term=mybatis%E5%8E%9F%E7%90%86

 

mybatis面试题:

https://blog.youkuaiyun.com/qq_38366063/article/details/92666106?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159136578219725247615938%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159136578219725247615938&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-92666106.first_rank_v2_rank_v25&utm_term=mybatis%E9%9D%A2%E8%AF%95%E9%A2%98

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值