Mybatis-2-Mybatis运行分析,自定义实现一个Mybatis

一、在《Mybatis-1-项目环境搭建(Maven)》案例分析

先看一下代码:

// 1.导入mybatis配置文件,抛出异常
//      使用org.apache.ibatis.io.Resources导入mybatis的xml配置文件
InputStream resource = Resources.getResourceAsStream("mybatis.config.xml");
// 2.创建SqlSessionFactory工厂
//      说明:org.apache.ibatis.session.SqlSessionFactory是一个接口
//      使用org.apache.ibatis.session.SqlSessionFactoryBuilder来创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(resource);
// 3.使用工厂生产SqlSession对象
SqlSession sqlSession = factory.openSession();
// 4.通过SqlSesison对象创建mapper接口的代理对象
GuestMapper guestMapper = sqlSession.getMapper(GuestMapper.class);
// 5.通过代理对象来调用selectGuest函数,来访问数据库
List<Guest> guests = guestMapper.selectGuest();
// 6.打印一下结果
for (Guest guest : guests) {
   
    System.out.println(guest);
}
// 7.关闭资源
sqlSession.close();
resource.close();

执行过程:

  1. 获取mybatis的配置文件
    通过类加载器来加载。
  2. 创建SqlSessionFactory工厂(构建者模式)
    Mybatis使用构建者模式,来创建SqlSessionFactory工厂。
    构建者模式:可以把创建的细节过程隐藏,我们只需要给构建者(SqlSessionFactoryBuilder)一个需求(resource),就可以得到需要的对象(SqlSessionFactory)。
    优势:使用者可以不关注创建的细节过程。
  3. 通过SqlSessionFactory工厂创建SqlSession对象(工厂模式)
    优势:解耦(降低类之间的关系)
  4. 通过SqlSession对象创建mapper接口代理对象(代理模式)
    优势:不修改源码的基础上对已有方法进行增强。
  5. 通过mapper接口代理对象调用函数
  6. 打印结果
  7. 关闭资源

二、自定义实现一个Mybatis

让我们自己写一个简单的Mybatis,实现查询。

首先看一下最后的项目结构:
在这里插入图片描述
下面就要开始写代码了:

准备:
  1. mybatis.config.xml配置文件
    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 配置mybatis -->
    <configuration>
        <!-- 指定 MyBatis 数据库配置文件 -->
        <properties resource="db.properties"/>
        <!-- 环境配置 -->
        <!-- 默认使用mysql这个环境 -->
        <environments default="mysql">
            <!-- mysql 数据库环境 -->
            <environment id="mysql">
                <!-- 事务管理:JDBC -->
                <transactionManager type="JDBC"/>
                <!-- 数据源配置,POOLED是JDBC连接对象的数据源连接池的实现 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://192.168.169.139:3306/seven?characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="tiger"/>
                </dataSource>
            </environment>
        </environments>
    
        <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 注解方式不需要这个 -->
        <mappers>
            <!-- 使用xml方式开发,指定持久化类的映射文件 -->
            <mapper resource="com/seven/mapper/GuestMapper.xml"/>
            <!-- 使用注解方式开发,指定持久化类接口 -->
    <!--        <mapper class="com.seven.mapper.GuestMapper"/>-->
        </mappers>
    
    </configuration>
    
  2. 实体类 Guest
    package com.seven.entity;
    
    import java.util.Date;
    
    public class Guest {
         
        private Integer gid;
        private String gname;
        private String gpwd;
        private Date gbirthday;
    
        @Override
        public String toString() {
         
            return "Guest{" +
                    "gid=" + gid +
                    ", gname='" + gname + '\'' +
                    ", gpwd='" + gpwd + '\'' +
                    ", gbirthday=" + gbirthday +
                    '}';
        }
    
        public Integer getGid() {
         
            return gid;
        }
    
        public void setGid(Integer gid) {
         
            this.gid = gid;
        }
    
        public String getGname() {
         
            return gname;
        }
    
        public void setGname(String gname) {
         
            this.gname = gname;
        }
    
        public String getGpwd() {
         
            return gpwd;
        }
    
        public void setGpwd(String gpwd) {
         
            this.gpwd = gpwd;
        }
    
        public Date getGbirthday() {
         
            return gbirthday;
        }
    
        public void setGbirthday(Date gbirthday) {
         
            this.gbirthday = gbirthday;
        }
    }
    
    
  3. 映射接口 GuestMapper
    package com.seven.mapper;
    
    import com.seven.entity.Guest;
    
    import java.util.List;
    
    public interface GuestMapper {
         
        List<Guest> selectGuest();
    }
    
  4. GuestMapper对应的映射文件 GuestMapper.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <mapper namespace="com.seven.mapper.GuestMapper">
    
        <select id="selectGuest" resultType
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值