初识MyBatis框架

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis使用简单的XML或注解用于配置和原始映射,可将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

如果学习了Hibernate,你会发现它们非常相似,它们都让我们对数据库的访问变得简单。

MyBatis和Hibernate的优势对比

Mybatis优势

  • MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
  • MyBatis容易掌握,而Hibernate门槛较高。
Hibernate优势

  • Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
  • Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
  • Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
  • Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
接下来我们在Myeclipse中创建一个项目,了解如何使用MyBatis

一、准备好包,Myeclipse中没有MyBatis功能的支持,需要我们自己导入包
【mybatis】
mybatis-3.3.0.jar
【MYSQL驱动包】
mysql-connector-java-5.1.38-bin.jar


二、在src文件夹中新建配置文件(名字自定义,比如Configuration.xml)
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

	<!-- 创建pojo类的别名 -->
	<typeAliases>
		<typeAlias alias="province" type="demo.model.Province" />
	</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://127.0.0.1:3306/news" />
				<property name="username" value="root" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 配置映射文件 -->
	<mappers>
		<mapper resource="demo/model/Province.xml" />
	</mappers>

</configuration>

三、新建model类(对应hibernate的pojo类)
package demo.model;

public class Province {
	
	private Integer id;
	private String provinceId;
	private String privince;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getProvinceId() {
		return provinceId;
	}
	public void setProvinceId(String provinceId) {
		this.provinceId = provinceId;
	}
	public String getPrivince() {
		return privince;
	}
	public void setPrivince(String privince) {
		this.privince = privince;
	}
	
	@Override
	public String toString() {
		return "Province [id=" + id + ", provinceId=" + provinceId
				+ ", privince=" + privince + "]";
	}
	
}

四、为model类配置映射文件Province.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,namespace的值习惯上设置成
	  包名+sql映射文件名,保证namespace的值是唯一的 -->
<mapper namespace="demo.mapper.ProvinceMapper">
	<!-- 
		select放置查询语句,id名唯一,调用这条sql语句用到,
		parameterType属性指明查询时使用的参数类型,
		resultType属性指明查询返回的结果集类型
	 -->
	<select id="selectOne" parameterType="int" resultType="province">
		select * from hat_province where id=#{id}
	</select>
</mapper>

五、数据库创表
create database news;
use news;
create table hat_province(id int PRIMARY KEY AUTO_INCREMENT, provinceID varchar(20), province varchar(20));
insert into hat_province(provinceID,province) values('110000','北京市');
insert into hat_province(provinceID,province) values('120000','天津市');
insert into hat_province(provinceID,province) values('130000','河北市');
insert into hat_province(provinceID,province) values('140000','山西市');
insert into hat_province(provinceID,province) values('150000','山东市');
insert into hat_province(provinceID,province) values('160000','内蒙古自治区');
insert into hat_province(provinceID,province) values('170000','辽宁市');

六、配置sessionFactory类(生成session)
package demo.util;

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

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

public class MyBatisUtil {
	//session的工厂类
	private static SqlSessionFactory factory;
	//一个读取配置文件的reader
	private static Reader reader;
	//配置文件的路径
	private static final String PATH = "Configuration.xml";
	//创建一个管理session的线程管理者
	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
	
	static {
		try {
			//读取配置文件
			reader = Resources.getResourceAsReader(PATH);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//创建session工厂
		factory = new SqlSessionFactoryBuilder().build(reader);
	}
	/**
	 * 创建一个session
	 * @return
	 */
	public static SqlSession getSession(){
		SqlSession session = threadLocal.get();
		if(session == null){
			//通过session工厂类来创建一个session
			session = factory.openSession();
			threadLocal.set(session);
		}
		return session;
	}
	/**
	 * 关闭session
	 */
	public static void closeSession(){
		SqlSession session = threadLocal.get();
		threadLocal.set(null);
		if(session!=null){
			session.close();
		}
	}
}

七、测试,执行定义的sql语句
package demo.test;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import demo.model.Province;
import demo.util.MyBatisUtil;

public class MyBatisTest {
	@Test
	public void test(){
		SqlSession session = MyBatisUtil.getSession();
		//查询一条记录,第一个参数是映射文件中的namespace.id,第二个是sql语句的参数
		Province p = session.selectOne("demo.mapper.ProvinceMapper.selOne", 3);
		System.out.println(p);
	}
}

结果





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值