专栏首页日常分享MyBatis 基本构成与框架搭建

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 访问权限控制 小结

    总所周知,Java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的。

    Rekent
  • LeetCode(一)

    Given an array of integers, return indices of the two numbers such that they add...

    Rekent
  • 通过BitSet完成对单词使用字母的统计

      BitSet类实现了一组位或标记(flag),这些位可被分别设置或清除。当需要跟踪一组布尔值时,这种类很有用。

    Rekent
  • i++和++i的联系与区别!超详细原理分析!

    在几乎所有的命令式编程语言中,必然都会有 i++ 和 ++i 这种语法。有些语言中 i++ 和 ++i 既可以作为左值又可以作为右值,笔者专门测试了一下,在 J...

    乔戈里
  • [C#2] 4-可空类型、静态类

    1. 可空类型 值类型是不可以为null的[即不可为空值], 假如我们想让它为null呢[比如它对映这数据库中的某个表的某个字段,但是这个字段是null]。 自...

    blackheart
  • java每日一练(2017/8/11)

    (单选题) 1、关于下面的程序Test.java说法正确的是( )。 publicclass Test { staticString x="1"; sta...

    Java学习
  • 【题目】买卖股票的最佳时机

    原文地址: https://copyfuture.com/blogs-details/2020011113393672457wxpb9gxgbqzvf

    谙忆
  • 分布式锁的三种实现

    在单体时代使用ReentrantLock、synchronized等来实锁,以便保证资源的安全性。但是在分布式时代,则需要分布式锁才能实现资源的安全性。

    田维常
  • Java能写外挂吗?那就写个跳一跳辅助程序吧

    ##起初是想使用按键精灵脚本程序控制,但还是选择熟悉的java。我这里使用了工具,造成延迟问题。也求教:java控制安卓的正确姿势,

    三哥
  • 设计模式---05.访问者模式

    访问者模式是一种对象和对象的访问者分开的一种设计模式,在一个对象稳定的情况下,使用访问者模式可以更好的扩展对数据的访问。 相当于是我们在对象里面安插了一个“眼...

    付威

扫码关注云+社区

领取腾讯云代金券