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)之间的关系 是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...
- CSS div阴影效果
<div class="image"><img src="default.jpg" /></div> .image{box- ...
- M-移动端的webapp页面布局教程和webapp实战分析
http://www.25xt.com/html5css3/8092.html 响应式设计 1 媒体查询 适用于不同固定宽度设计 媒体类型 : screen 屏幕 print 打印机 handheld ...
- Java面向对象 IO (三)
Java面向对象 IO (三) 知识概要: (1)IO 流的操作规律 (2)异常日志信息IO处理 ...
- windows下Maven的安装与配置
1 安装maven前首先确认计算机已正确安装JDK2 下载maven 地址:http://maven.apache.org/download.html安装文件格式如下:apache-maven-3.0 ...
- plsql部分字段中文乱码,sqlplus中文乱码
PLSQL中文乱码 问题: 解决: 思路1:设置 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" 结果:并不能解决问题! ...
- GPUImage库的使用
GPUImage开源项目地址:https://github.com/BradLarson/GPUImage GPUImage使用说明:https://github.com/BradLarson/GPU ...
- nginx知识点简单回顾
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- 完美实现身份证校验 js正则
注意: 1.只针对18为身份证号码进行校验,现在15位的应该很少了, 2.不区分xX大小写, 3.出生年份1900-2099,每月的天数也进行相关验证(考虑的闰月的情况), 4.校验规则详见,这个写的 ...
- 【装逼利器效率软件】一张图问你想不想用Launchy
简述:Launchy博客园很多文章,长篇大论文字太多. 一张图问你想不想用? 长话多说: 一.设置Launchy扫描目录,安装后会默认,个人推荐自定义目录比较好 二.自行建立快捷方式别名文件夹,存放各 ...