Mybatis整理_01
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核心对象的生命周期与封装
对象的生命周期也就是重创建到销毁的过程,在这个过程中,如果实现的代码不佳,很容易造成程序上的错误或效率低下。
- 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的更多相关文章
- [原] MyBatis 整理
花了一上午的时间,先整理一个脑图.
- Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别
一.在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和 ...
- mybatis整理笔记
以下是idea2018辑编器 新建 Maven工程 1 file ->new ->project 新建后编程器在右下角加载插件.,这个时候需要会儿, 加载好后,软件目录会多一个ja包 ...
- springmvc+spring+mybatis分页查询实例版本3,添加条件检索
在第二个版本上添加了姓名模糊查询,年龄区间查询;自以为easy,结果发现mybatis的各种参数写法基本搞混或是忘了,zuo啊,直接上代码,然后赶紧把mybatis整理一遍再研究自己的项目,应该还会有 ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系
#[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系  ■全局变量 //The hash table data. //底层 ...
- MySQL之最基本命令
前言:以下是数据库最基础最常用的命令,特别适用初学者练习,希望通过不断练习这些命令来熟练操作.巩固基础,因为只有不断地练习才能将知识真正变成自己的东西. 快速查看以下内容: 操作 命令 创建数据库 C ...
- [Gitlab运维系列]Gitlab 403 forbidden 并发引起IP被封
问题 带着团队使用Git,使用的是自搭建的Gitlab.但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden. 原因 Gitlab使用rack_attack做了并发访问的限制. 解 ...
- BZOJ 1041 [HAOI2008]圆上的整点:数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...
- NPOI导出excel(带图片)
近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新 ...
- WPF使用资源字典组织资源
转载:http://blog.163.com/wangzhenguo2005@126/blog/static/371405262010111413321728/ 首先在解决方案资源管理器中添加 ...
- MySQL(十五)之数据备份中mysqldump详解
前言 其实前面一篇数据备份已经是非常的详细了,这里我想单独的讲解一下mysqldump,相信很多程序员都是用过这个命令的! 一.MySQL数据库的备份与还原 1.1.MySQL数据库备份 1)语法 m ...
- php中数组相关
<?php//参数默认值function abc($a,$b,$c = 0){ echo $a,$b,$c;}abc(1,3);结果为:130:echo "<br>&quo ...
- win10 uwp 隐藏实时可视化
新的vs有个功能,实时可视化 但是他会挡我们界面,想要隐藏 点击转到实时可视化,就是点击横线看到,接着就可以看到下面的选项 点击在应用程序中显示运行时,就是不选中 很简单就看到,没有那个 本作品采用知 ...