您当前的位置:学院动态 > 行业资讯 > 正文
MyBatis入门介绍
 

时间:2017-09-05 16:50    来源:顽石科技    编辑:www.mhsilh.com.cn

 
  前言
 
  最近几年,企业项目开发过程中,对于mybatis的使用是越来越频繁,今天我们就来聊一聊mybatis,算是给大家做一个入门介绍,具体的知识点讲解,我们会在后续的文章里中进行详细的介绍。
 
  一、MyBatis简介
 
  MyBatis的前身叫iBatis,本是Apache的一个开源项目,2010年这个项目由ApacheSoftwareFoundation迁移到了GoogleCode,并且改名为MyBatis。
 
  MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录。

 
MyBatis

 
  MyBatis的架构
 
  二、ORM框架介绍
 
  对象关系映射(ObjectRelationalMapping,简称ORM)是一种为了解决面向对象与关系数据库不一致的技术。简单的说,ORM就是通过在类和数据表、类属性和表字段之间建立一种映射关系,然后通过面向对象的方式对关系型数据库进行操作。
 
  注意:类和表对应;类属性和表字段对应;对象和记录对应。
 
  三、mybatis框架的执行过程
 
  1。配置mybatis的配置文件,SqlMapConfig。xml(名称不固定)。
 
  2。通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂。
 
  SqlSessionFactory在实际使用时最好以单例的方式使用。
 
  3。通过SqlSessionFactory创建SqlSession。
 
  SqlSession是线程不安全的,建议在方法体内创建和使用sqlSession。 
 
  4。调用sqlSession的相应方法实现对数据的增删改查操作。 
 
  5。如果需要提交事务,则需要执行SqlSession的commit()方法。 
 
  6。最后关闭SqlSession,释放资源。
 
  四、核心类的作用范围(Scope)和生命周期
 
  ?SqlSessionFactoryBuilder
 
  这个类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例,但是最好还是不要让其一直存在以保证所有的XML解析资源开放给更重要的事情。
 
  ?SqlSessionFactory
 
  SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,多次重建SqlSessionFactory被视为一种代码“坏味道(badsmell)”。因此SqlSessionFactory的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
 
  ?SqlSession
 
  每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全的,因此是不能被共享,所以它的最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet架构中的HttpSession。如果你现在正在使用一种Web框架,要考虑SqlSession放在一个和HTTP请求对象相似的范围中。换句话说,每次收到的HTTP请求,就可以打开一个SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到finally块中以确保每次都能执行关闭。
 
  五、SqlMapConfig。xml配置文件详解


 <?xmlversion="1。0"encoding="UTF-8"?>
 
  <!DOCTYPEconfiguration
 
  PUBLIC"-//mybatis。org//DTDConfig3。0//EN"
 
  "http://mybatis。org/dtd/mybatis-3-config。dtd">
 
  <configuration>
 
  <settings>
 
  <settingname="cacheEnabled"value="true"/>
 
  <settingname="lazyLoadingEnabled"value="true"/>
 
  <settingname="multipleResultSetsEnabled"value="true"/>
 
  <settingname="useColumnLabel"value="true"/>
 
  <settingname="useGeneratedKeys"value="false"/>
 
  <settingname="autoMappingBehavior"value="PARTIAL"/>
 
  <settingname="defaultExecutorType"value="SIMPLE"/>
 
  <!--<settingname="defaultExecutorType"value="BATCH"/>-->
 
  <settingname="defaultStatementTimeout"value=""/>
 
  <settingname="safeRowBoundsEnabled"value="false"/>
 
  <settingname="mapUnderscoreToCamelCase"value="false"/>
 
  <settingname="localCacheScope"value="SESSION"/>
 
  <!--<settingname="jdbcTypeForNull"value="OTHER"/>-->
 
  <settingname="jdbcTypeForNull"value="NULL"/>
 
  <settingname="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/>
 
  </settings>
 
  <typeAliases>
 
  <!—类型别名,凡是使用完整限定名的地方都可以使用别名替代-->
 
  <typeAliasalias="User"type="com。ouc。mkhl。platform。authority。model。User"/>
 
  </typeAliases>
 
  <environmentsdefault="development">
 
  <environmentid="development">
 
  <transactionManagertype="JDBC"/>
 
  <!--配置数据库连接信息-->
 
  <dataSourcetype="POOLED">
 
  <propertyname="driver"value="com。mysql。jdbc。Driver"/>
 
  <propertyname="url"value="jdbc:mysql://localhost:3306/mybatis"/>
 
  <propertyname="username"value="root"/>
 
  <propertyname="password"value="root"/>
 
  </dataSource>
 
  </environment>
 
  </environments>
 
  <mappers>
 
  <mapperresource="com/tencent/mapper/UserMapper。xml"/>
 
  </mappers>
 
  </configuration>
 

 
 
  1。缓存配置:
 
  cacheEnabled:全局开关:默认是true,如果它配成false,其余各个MapperXML文件配成支持cache也没用。
 
  2。延迟加载:
 
  lazyLoadingEnabled:true表示使用延迟加载,false表示禁用延迟加载,默认为true。当禁用时,所有关联对象都会即时加载。
 
  3。multipleResultSetsEnabled:允许和不允许单条语句返回多个数据集。默认为true。
 
  4。useColumnLabel:使用列标签代替列名称。不同的驱动器有不同的做法。
 
  5。useGeneratedKeys:允许JDBC生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。
 
  6。autoMappingBehavior:指定MyBatis是否并且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,没有嵌套的结果。FULL将自动映射所有复杂的结果。
 
  7。defaultExecutorType:配置和设定执行器,SIMPLE执行器执行其它语句。REUSE执行器可能重复使用preparedstatements语句,BATCH执行器可以重复执行语句和批量更新。
 
  8。defaultStatementTimeout:设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时。


本文由顽石科技原创,转载请注明:http://www.mhsilh.com.cn/html/2017/xingyezixun_0907/561.html
? 必中一位 竞彩比分怎样看立博 互利配资 今日买什么股票推荐 股票行情实时查询002455 股票涨跌原理是什么 福建快3 黑龙江11选5 铭创配资 网上配资 吉林快三 七星彩 贵州11选5 黑龙江p62 黑龙江6+1 访问出错或页面为空 顺发配资