38、mybatis介绍和框架搭建

小编 2026-06-06 阅读:1118 评论:0
学习目标: 1、搭建mybatis环境 2、理解mybatis的运行流程 3、能正确运行mybatis的第一个例子 学习过程: 一、MyBatis介绍 MyBatis 本是apache的一个开源...

学习目标:

1、搭建mybatis环境

2、理解mybatis的运行流程

3、能正确运行mybatis的第一个例子

学习过程:

一、MyBatis介绍

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。

MyBatis使用普通 SQL查询,高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJO映射成数据库中的记录。

二、MyBatis和hibernate的比较

Hibernate与MyBatis都是对ORM框架,都实现了对数据库和POJO对象的映射,都对数据库的操作进行了封装,所以很多人都会拿着两个框架进行比较,

两者都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。都支持JDBC和JTA事务处理。

Mybatis优势是可以进行更为细致的SQL优化,因为使用Mybatis还是使用原始的sql查询语句,MyBatis更加容易掌握,而Hibernate需要花点时间好好学习。

Hibernate优势是的DAO层开发比MyBatis简单,Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快。但是事实上hibernate要用好不是那么简单,需要在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。 

Hibernate数据库移植性很好,Hibernate使用方言的概念,如果你需要更换数据库只需要修改方言就可以ile。MyBatis的数据库移植性不好,因为MyBatis还是写原始的sql语言,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

总的来说,MyBATIS框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。但是就是因为他的封装并不太多,所以你可以更加灵活的使用sql语句。

三、MyBatis的下载和框架搭建

你可以从下面的网址下载MyBatis

http://mybatis.github.io/

下载后解压可以看到mybatis的包比较简单,只有一个核心包就可以了,同时官方还提供了一个pdf格式的操作说明,这个说明内容不多,但是已经把mybatis的重点都列出来了,大家可以好好阅读以下这个文档。

四、新建第一个MyBatis项目

1、准备数据库

既然MyBatis是对数据库的封装,所以我们第一步还是先新建一个数据库mybatis_db和一个数据库表goods,建表语句如下:

DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
  `goods_id` int(11) NOT NULL AUTO_INCREMENT,
  `goods_name` varchar(100) DEFAULT NULL,
  `goods_cash` decimal(9,2) DEFAULT NULL,
  `goods_desc` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

2、新建项目并导入相关包。

新建一个web项目,然后MyBatis的核心包,MyBatis也是对jdbc的封装,所以对应数据库的驱动包也是要导入的,这里我们使用的是mysql所以需要导入mysql的驱动包,pom.xml

       <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>

3、编写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>
    <typeAliases>
        <typeAlias type=\"com.javadayup.stuormmybatis.Goods\" alias=\"Goods\"></typeAlias>
    </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/mybatis_db?useUnicode=true&amp;characterEncoding=utf8\" />
                <property name=\"username\" value=\"root\" />
                <property name=\"password\" value=\"123456\" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource=\"GoodsMapper.xml\" />
    </mappers>
</configuration>

4、编写获得SqlSessionFactory的帮助类

新建一个MyBacticUtil.java类,内容如下:

public class MyBacticUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    static {
        // 读取配置文件
        InputStream inputStream = MyBacticUtil.class.getClassLoader().getResourceAsStream(\"mybatis-config.xml\");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

5、为Goods对象建立对应的映射文件

新建一个Goods对象,相关的属性和get/set方法,自己建立,

public class Goods implements Serializable {
    private int goodsId;
    private String goodsName;
    private String goodsDesc;
    private double goodsCash;
    //下面是get/set方法

建立一个映射文件GoodsMapper.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.javadayup.stuormmybatis.Goods\">
    <insert id=\"addGoods\" parameterType=\"Goods\" flushCache=\"true\">
        insert
        into goods(goods_name,goods_desc,goods_cash)
        values(#{goodsName},#{goodsDesc},#{goodsCash})
    </insert>
</mapper>

6、新建GoodsDao,实现插入功能。代码如下:

public class Run1 {
    public static void main(String[] args) {

        Goods goods=new Goods();
        goods.setGoodsName(\"苹果\");
        goods.setGoodsDesc(\"好吃\");
        goods.setGoodsCash(12D);

        SqlSession session = MyBacticUtil.getSqlSessionFactory().openSession();
        int reuslt = session.insert(\"addGoods\", goods);
        System.out.println(reuslt);
        session.commit();
        session.close();   
    }
}

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表