Mybatis专题

Mybaits介绍

Mybatis是一个持久化框架,它有不同语言的版本,比如.NET和Java都有Mybatis对应的类库;它有大多数ORM框架都具有的功能,比如自定义的SQL语句、调用存储过程和一些高级映射,但是它是一种半自动化的ORM框架,与Hibernate的使用方式还是有很大的区别。Mybatis它是以SQL语句作为映射基础。Mybatis可以使用XML或Annotaions注解的方式将数据表中的记录映射成一个Map或者Java POJO对象。Hibernate和大多数JPA规范实现都可以使用Annotations注解的方式来设计程序。

Mybatis操作数据库的步骤

Mybatis的核心框架是SqlSessionFactory对象,它是创建SqlSession对象的工厂。但SqlSessionFactory对象的创建来自于SqlSessionFactoryBuilder,也就是使用SqlSessionFactoryBuilder类创建SqlSessionFactory对象

1.使用XML配置文件创建SqlsessionFactory对象

package test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * 取得SqlsessionFactory工厂对象
 * @author Ljx
 *
 */
public class Test {

	public static void main(String[] args) {
		String resource = "mybatis-config.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			System.out.println(sqlSessionFactory);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

 

mybatis-config.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"mybatis-3-config.dtd">
<configuration>
	<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/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="0000" />
			</dataSource>
		</environment>
	</environments>
</configuration>

运行结果:

SqlsessionFactory类结构:

SqlSessionFactory类结构:

从两个类的结构中基本上都是重载的方法,主要是为了取得SqlSessionFactory和SqlSession对象。

Mybatis核心对象的生命周期与封装

对象的生命周期也就是重创建到销毁的过程,在这个过程中,如果实现的代码不佳,很容易造成程序上的错误或效率低下。

  1. SqlSessionFactoryBuilder对象可以被JVM虚拟机所实例化、使用或者销毁。一旦使用SqlsessionFactoryBuilder创建SqlsessionFactory对象后,SqlsessionFactoryBuilder就不需要存在了,不需要在保持此对象的状态,可以随意任JVM销毁。所以SqlSessionFactoryBuilder对象的使用范围最好是方法之内,可以在方法内部声明SqlSessionFactoryBuilder对象来创创建SqlSessionFactory对象。

  2.SqlSessionFactory对象由SqlSessionFactoryBuilder对象创建,一旦创建SqlSessionFactory类的实例,该实例应该在程序运行期间都存在,不需要每次操作数据库都重新创建,应用它的最佳方法就是写一个单例模式,或者使用spring框架来实现单例模式对SqlsessionFactory对象进行有效的管理。

  3.SqlSession对象由SqlSessionFactory对象创建,每个线程都应该有他自己的SqlSession实例,SqlSession实例不能共享,它是线程不安全的。关闭SqlSession很重要,确保使用finally来关闭它。

1.关于Mybatis生命周期创建的实例:

创建GetSqlsessionFactory类:

package test;

import org.apache.ibatis.session.SqlSession;

public class GetSqlSession {

	private static ThreadLocal<SqlSession> tl = new ThreadLocal<>();
	public static SqlSession getSqlSession(){
		SqlSession sqlSession = tl.get();
		if(sqlSession == null){
			sqlSession = GetSqlSessionFactory.getSqlSessionFactory().openSession();
			tl.set(sqlSession);
		}
		System.out.println("获得的SqlSession的hashcode:"+sqlSession.hashCode());
		return sqlSession;
	}

	public static void commit(){
		if(tl.get() != null){
			tl.get().commit();
			tl.get().close();
			tl.set(null);
		}
	}
	public static void rollback(){
		if(tl.get() != null){
			tl.get().rollback();
			tl.get().close();
			tl.set(null);
		}
	}
}

测试:

package test;

import java.io.InputStream;

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

import dbtool.GetSqlSession;
/**
 * 取得SqlsessionFactory工厂对象
 * @author 梁家翔
 *
 */
public class Test {

	public static void main(String[] args) {
		try {
			GetSqlSession.getSqlSession();
			GetSqlSession.getSqlSession();
			GetSqlSession.getSqlSession();
			GetSqlSession.getSqlSession();
			GetSqlSession.getSqlSession();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

运行结果:

Mybatis整理_01的更多相关文章

  1. [原] MyBatis 整理

    花了一上午的时间,先整理一个脑图.

  2. Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别

    一.在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和 ...

  3. mybatis整理笔记

    以下是idea2018辑编器 新建 Maven工程 1  file ->new ->project 新建后编程器在右下角加载插件.,这个时候需要会儿,  加载好后,软件目录会多一个ja包 ...

  4. springmvc+spring+mybatis分页查询实例版本3,添加条件检索

    在第二个版本上添加了姓名模糊查询,年龄区间查询;自以为easy,结果发现mybatis的各种参数写法基本搞混或是忘了,zuo啊,直接上代码,然后赶紧把mybatis整理一遍再研究自己的项目,应该还会有 ...

  5. (整理)MyBatis入门教程(一)

    本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...

  6. 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系

    #[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 ![关系图解](http://images.cnitblog.com/blog/84 ...

  7. MYBATIS 简单整理与回顾

    这两天简单整理了一下MyBatis 相关api和jar包这里提供一个下载地址,免得找了 链接:http://pan.baidu.com/s/1jIl1KaE 密码:d2yl A.简单搭建跑项目 2.进 ...

  8. spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

    在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...

  9. JAVA-ORM框架整理➣Mybatis操作MySQL

    概述 在Java中,对数据库操作的框架很多,上节概述Hibernate的简单使用,这里简单整理Mybatis的使用.Mybatis也是简单的数据库操作框架,通过IOC方式,获取操作类对象,进行数据的操 ...

随机推荐

  1. .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限

    一.Linux下的文件目录 简介:linux的文件系统是采用级层式的树状目录结构,在此 结构中的最上层是根目录“/”,然后在此目录下再创建 其他的目录.深刻理解linux文件目录是非常重要的,如下图所 ...

  2. 如何创建一个Django项目

    Django 软件框架 软件框架是由其中的各个模块组成,每个模块负责特定的功能,模块与模块之间相互协作来完成软件开发. MVC简介 MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的 ...

  3. HTML5基础知识及相关笔记

    HTML5基础 1.1HTML文件的基本结构和W3C标准 1.1.1HTML简介 HTML是一种描述网页的语言,一种超文本标记的语言! 1.1.2HTML文件的基本结构 头部(head) 头部是网页的 ...

  4. 使用wsimport和JAX-WS调用Web Service接口

    本文简单举例说明如何使用wsimport工具和JAX-WS API调用Web Service接口.此方法的优点:使用JDK自带的工具和API接口,无需依赖第三方库. JDK版本:1.8.0_141开发 ...

  5. Thirft框架快速入门

    Thrift介绍1.什么是thrift?thrift早期由facebook内部团队开发,主要用于实现跨语言间的方法调用,属于远程方法调用的一种,后开源纳入apache中,成为了apache thrif ...

  6. windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)

    以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是 ...

  7. DevOps之归纳总结

    唠叨话 关于德语关我屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. DevOps归纳总结 <DevOps功能与性能>浏览器(饼干Cookie.会话Sessi ...

  8. rewrap-ajax.js插件

    很久没有动手写技术的文章,这个过程中间一直在写日记,生活点滴的记录替代了技术文章的编写,可以看出以往的内心是激情或烈火,现在是... 最近写了一个JS插件,用圈内的话说叫造了个轮子,造的好与不好都不是 ...

  9. Akka(29): Http:Server-Side-Api,Low-Level-Api

    Akka-http针对Connection的两头都提供了方便编程的Api,分别是Server-Side-Api和Client-Side-Api.通过这两个Api可以大大提高编程效率.当然,上期我们提到 ...

  10. Docker中搭建zookeeper集群

    1.获取官方镜像 从dockerhub获取官方的zookeeper镜像: docker pull zookeeper 2.了解镜像内容 拉取完镜像后,通过 docker inspect zookeep ...