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)之间的关系 .多核可能还容易理解些,相信不少玩家都能说出个所以然.但超线程是个 ...
- Linux jdk安装多个版本并进行切换
1. 上传jdk7 和 jdk8 包 2. 解压 [root@localhost webapps]# tar -zxvf /package/jdk-7u80-linux-x64.tar.gz 3. 配 ...
- vue2组件之select2调用
目前,项目中使用了纯前端的静态项目+RESTFul接口的模式.为了更好的对数据进行操作,前端使用了vue2的mvvm功能,但是由于不是单页面应用,所以,并没有涉及到其它的如vue-route等功能,也 ...
- SQL server学习(五)——T-SQL编程之存储过程
周五了,祝大家周末愉快. 之前一直在写SQL server的分享,今天再来个T-SQL编程中的存储过程. 存储过程 存储过程(procedure)类似于C语言中的函数,用来执行管理任务或应用复杂的业务 ...