38、mybatis介绍和框架搭建

学习目标:

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();   
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值