mybatis介绍和框架搭建

发表时间:2017-05-17 17:31:28 浏览量( 31 ) 留言数( 0 )

学习目标:

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

}