MyBatis 基本构成与框架搭建

核心组件


    SqlSessionFactoryBuilder (构造器)

        根据配置信息(eg:mybatis-config.xml)或者代码来生成SqlSessionFactory

    SqlSessionFactory(工厂接口)

        依靠工厂来生成SqlSession

     SqlSession(类似于JDBC的Connection)

        线程不安全

        获取映射器,让映射器通过命名空间和方法名称找到对应SQL,发送给 数据库执行后返回结果。

        直接通过命名信息去执行SQL返回结果(iBatis版本留下的方式)

    SQL Mapper(映射器)

        MyBatis新组件,通常由一个Java Interface和XML文件构成,需给出对应的SQL和映射规则。

        负责发送SQL去执行,并返回接口。

 框架 搭建


-src

    -java

     -SQLDao

    -MessageModel<POJO类>

       -SQLHandle<Mapper接口>

     -TestSQL<运行Test>

    -resource

    -message.xml<MapperXML文件 >

         -mybatis-configure.xml<配置文件>


mybatis-configure.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>
    <!-- 实体类别名,对应映射文件中的resultType -->
    <typeAliases>
        <typeAlias alias="message" type="SQLDao.MessageModel"/>
    </typeAliases>

    <!-- 数据库连接配置,配置连接字符串、用户名、密码或缓存、懒加载、语句执行超时时间等这里目前只配置了基本的数据库连接属性 -->
    <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/testdb" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>

    <!-- 实体与数据库表映射文件位置,配置后MyBatis才会找到并加载上 -->
    <mappers>
        <mapper resource="message.xml" />
    </mappers>
</configuration>

MessageModel

package SQLDao;

public class MessageModel {
    public int CarID;
    public int postionX;
    public int postionY;
    public int speed;

    public int getCarID() {
        return CarID;
    }

    public void setCarID(int carID) {
        CarID = carID;
    }

    public int getPostionX() {
        return postionX;
    }

    public void setPostionX(int postionX) {
        this.postionX = postionX;
    }

    public int getPostionY() {
        return postionY;
    }

    public void setPostionY(int postionY) {
        this.postionY = postionY;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }
}

SQLHandle

package SQLDao;

public interface SQLHandle {
    public int addhistory(MessageModel model);
}

TestSQL

package SQLDao;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class TestSQL {
    /**
     * SqlSessionFactory是用来创建SqlSession的工厂,SqlSession会执行映射的语句,进行事物提交、回滚等。
     *
     * @return
     */
    public static SqlSessionFactory getSqlSessionFactory() {
        Reader reader = null;
        SqlSessionFactory sqlSessionFactory = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-configure.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSessionFactory;
    }


    public static void selectUserByID() {
        // 得到SqlSession实例,便于执行增删改查、事务提交回滚等操作。
        SqlSession session = getSqlSessionFactory().openSession();
        MessageModel messageModel = new MessageModel();
        messageModel.setCarID(1);
        messageModel.setPostionX(2);
        messageModel.setPostionY(3);
        messageModel.setSpeed(4);
        try {
            SQLHandle handle=session.getMapper(SQLHandle.class);
            handle.addhistory(messageModel);
        } finally {
            session.close();
        }
    }

    public static void main(String[] args)  {
        selectUserByID();
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java工程师日常干货

透彻理解MyBatis设计思想之手写实现

MyBatis,曾经给我的感觉是一个很神奇的东西,我们只需要按照规范写好XXXMapper.xml以及XXXMapper.java接口。要知道我们并没有提供XX...

801
来自专栏高性能服务器开发

windows完成端口(五)

系列目录 windows完成端口(一) windows完成端口(二) windows完成端口(三) windows完成端口(四) windows完成端口(五) ...

5207
来自专栏码匠的流水账

聊聊jdbc socketTimeout的设置

jdbc的socketTimeout值的设置要非常小心,不同数据库的jdbc driver设置不一样,特别是使用不同连接池的话,设置也可能不尽相同。对于严重依赖...

9841
来自专栏Android 研究

APK安装流程详解2——PackageManager简介

俗话说的好,得中原者,得天下,那么想要了解Android的安装了流程就不得不提及一个重要的类"PackageManager"我们就先来了解这两个类

4043
来自专栏知识分享

STM32 中 BIT_BAND(位段/位带)和别名区使用入门(转载)

一、 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作:...

3849
来自专栏我杨某人的青春满是悔恨

Kingfisher源码阅读(二)

上次说到了downloadAndCacheImageWithURL这个方法,看名字就知道既要下载图片又要缓存图片,它的方法体是这样的:

1725
来自专栏Danny的专栏

【MyBatis框架点滴】——初识+环境搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

862
来自专栏梦里茶室

sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

12-14 19:51:30.346 17770-18098/com.company.product W/System.err: com.company.pr...

5229
来自专栏梦里茶室

sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

这是sqlite在Android系统上的一个bug,在需要建立索引的sql语句频繁执行时,会发生这个异常。

1072
来自专栏小樱的经验随笔

自己手动复现一个熊猫烧香病毒

最近逛了一下 bilibili ,偶然的一次机会,我在 bilibili 上看到了某个 up 主分享了一个他自己仿照熊猫病毒的原型制作的一个病毒的演示视频,虽然...

7302

扫码关注云+社区

领取腾讯云代金券