设为首页 收藏本站
查看: 2732|回复: 0

[经验分享] 转载:深入浅出MyBatis-快速入门

[复制链接]

尚未签到

发表于 2016-11-25 10:11:20 | 显示全部楼层 |阅读模式
  转载:http://blog.csdn.net/hupanfeng/article/details/9068003
简介
MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
Mybatis的功能架构分为三层(图片借用了百度百科):
1)       API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
2)       数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
3)      基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
  DSC0000.jpg
 
 
快速入门
DSC0001.jpg
 
Mybatis的整体流程图
 
SqlSessionFactoryBuilder
每一个MyBatis的应用程序的入口是SqlSessionFactoryBuilder,它的作用是通过XML配置文件创建Configuration对象(当然也可以在程序中自行创建),然后通过build方法创建SqlSessionFactory对象。没有必要每次访问Mybatis就创建一次SqlSessionFactoryBuilder,通常的做法是创建一个全局的对象就可以了。示例程序如下:
[java] view plaincopy 



  • private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;  
  • private static SqlSessionFactory sqlSessionFactory;  
  • private static void init() throws IOException {  
  •     String resource = "mybatis-config.xml";  
  •     Reader reader = Resources.getResourceAsReader(resource);  
  •     sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();  
  •     sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);  
  • }  

 
SqlSessionFactory
SqlSessionFactory对象由SqlSessionFactoryBuilder创建。它的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。SqlSessionFactory对象一个必要的属性是Configuration对象,它是保存Mybatis全局配置的一个配置对象,通常由SqlSessionFactoryBuilder从XML配置文件创建。这里给出一个简单的示例:
[html] view plaincopy 



  • <?xml version="1.0" encoding="UTF-8" ?>  
  • <!DOCTYPE configuration PUBLIC   
  •     "-//mybatis.org//DTD Config 3.0//EN"  
  •     "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  • <configuration>  
  •     <!-- 配置别名 -->  
  •     <typeAliases>  
  •         <typeAlias type="org.iMybatis.abc.dao.UserDao" alias="UserDao" />  
  •         <typeAlias type="org.iMybatis.abc.dto.UserDto" alias="UserDto" />  
  •     </typeAliases>  
  •        
  •     <!-- 配置环境变量 -->  
  •     <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/iMybatis?characterEncoding=GBK" />  
  •                 <property name="username" value="iMybatis" />  
  •                 <property name="password" value="iMybatis" />  
  •             </dataSource>  
  •         </environment>  
  •     </environments>  
  •       
  •     <!-- 配置mappers -->  
  •     <mappers>  
  •         <mapper resource="org/iMybatis/abc/dao/UserDao.xml" />  
  •     </mappers>  
  •       
  • </configuration>  

  



要注意XML头部的声明,需要用来验证XML文档正确性。typeAliases 元素是包含所有typeAlias别名的列表,别名用来替换完整类名,这样在需要完整类名的地方就可以用别名来代替。environment元素体中包含对事务管理和连接池的环境配置。mappers元素是包含所有mapper(映射器)的列表,这些mapper的XML文件包含SQL代码和映射定义信息。当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分,其他配置请参考Mybatis的官方文档。
 
SqlSession
SqlSession对象的主要功能是完成一次数据库的访问和结果的映射,它类似于数据库的session概念,由于不是线程安全的,所以SqlSession对象的作用域需限制方法内。SqlSession的默认实现类是DefaultSqlSession,它有两个必须配置的属性:Configuration和Executor。Configuration前文已经描述这里不再多说。SqlSession对数据库的操作都是通过Executor来完成的,Executor的具体功能在下一小节在描述。
到目前为止,我们看到的都是mybatis的流程,我们的应用程序在什么地方插入到这个流程中并获得我们想要的结果呢?就是SqlSession这里。SqlSession有一个重要的方法getMapper,顾名思义,这个方式是用来获取Mapper对象的。什么是Mapper对象?根据Mybatis的官方手册,应用程序除了要初始并启动Mybatis之外,还需要定义一些接口,接口里定义访问数据库的方法,存放接口的包路径下需要放置同名的XML配置文件。SqlSession的getMapper方法是联系应用程序和Mybatis纽带,应用程序访问getMapper时,Mybatis会根据传入的接口类型和对应的XML配置文件生成一个代理对象,这个代理对象就叫Mapper对象。应用程序获得Mapper对象后,就应该通过这个Mapper对象来访问Mybatis的SqlSession对象,这样就达到里插入到Mybatis流程的目的。示例代码如下:
 
[java] view plaincopy 



  • SqlSession session= sqlSessionFactory.openSession();  
  • UserDao userDao = session.getMapper(UserDao.class);  
  • UserDto user = new UserDto();  
  • user.setUsername("iMybatis");  
  • List<UserDto> users = userDao.queryUsers(user);  

 
 
对应的接口:
 
[java] view plaincopy 



  • public interface UserDao {  
  •     public List<UserDto> queryUsers(UserDto user) throws Exception;  
  • }  

 
对应的配置文件:
 
[html] view plaincopy 



  • <?xml version="1.0" encoding="UTF-8" ?>  
  • <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  • <mapper namespace="org.iMybatis.abc.dao.UserDao">  
  •     <select id="queryUsers" parameterType="UserDto" resultType="UserDto"  
  •         useCache="false">  
  •         <![CDATA[ 
  •         select * from t_user t where t.username = #{username} 
  •         ]]>  
  •     </select>  
  • </mapper>  

 
Executor
Executor对象在创建Configuration对象的时候创建,并且缓存在Configuration对象里。Executor对象的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。
 
StatementHandler
StatementHandler是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。
 
ResultSetHandler
处理查询结果。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305376-1-1.html 上篇帖子: 深入浅出MyBatis-快速入门 下篇帖子: 依然不习惯使用mybatis做增删改
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表