MyBatis框架教程「入门起步」
今天我们就踏上学习Mybatis框架的旅程,在SSM框架中Mybatis框架是dao层的一个解决方案。相当于传统Servlet+JavaBean开发模式中JDBC的作用。具体关于MVC架构的知识可以移步「从零学习Spring MVC框架「环境搭建和MVC架构」」文章,在这一篇文章的开篇我详细阐述了关于MVC架构的知识。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs「Plain Old Java Objects,普通的 Java对象」映射成数据库中的记录,它是dao层的一个解决方案。
什么需求催生了MyBatis这种框架的产生呢?Mybatis框架比较重要的是:Mybatis自动将sql执行结果映射至java对象。我们知道目前流行的编程语言,例如Java,C#是面向对象的编程语言;但是主流的数据库产品,例如:Oracle,Mysql 等都是关系型数据库,编程语言和底层数据的发展不协调,催生出了ORM框架。
我们可以理解为ORM框架可作为面向对象语言和数据库之间的桥梁。我们将要学习的MyBatis的设计思想和ORM很相似。
- 起步
首先将mybatis-x.x.x.jar文件置于 classpath 中即可。由于需要连接数据库我们还需要驱动包。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
- 构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得,关于SqlSession的介绍我们在文章末尾展开。
SqlSessionFactoryBuilder可以从 XML 配置文件或一个预先定制的 Configuration的实例构建出SqlSessionFactory的实例。
SqlSession产生的第一步就是要利用SqlSessionFactoryBuilder来获取工厂SqlSessionFactory,再获得SqlSession。
SqlSessionFactoryBuilder有五个build()方法,每一种都允许你从不同的资源中创建一个SqlSession实例。
SqlSessionFactory build(InputStream inputStream) SqlSessionFactory build(InputStream inputStream, String environment) SqlSessionFactory build(InputStream inputStream, Properties properties) SqlSessionFactory build(InputStream inputStream, String env, Properties props) SqlSessionFactorybuild(Configuration config)
以上五种 build()方法中,第一种是最常用的一种,在这里就不进行讲解。
这里我们使用:
//加载 核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlsession工厂 -->相当于connection SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //获取sqlsession -->相当于执行sql语句对象 sqlSession = sqlSessionFactory.openSession(); 3. mybatis-config.xml
XML配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器。XML 配置文件的详细内容下方探讨,这里先给出一个简单的示例:
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置环境 --> <environments default="jujidi"> <environment id="jujidi"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/dbname"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 加载映射文件 --> <mappers> <mapper resource="com/jujidi/test/TestMapper.xml" /> </mappers> </configuration>
当然,还有很多可以在XML 文件中进行配置,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,用来验证 XML 文档正确性。
environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息)
关于事务管理器:在 MyBatis 中有两种类型的事务管理器
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)
- TestMapper.xml
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.jujidi.model.User"> <!-- 通过id返回数据 --> <select id="load"resultType="map"> select * from user where user_id=1 </select> </mapper>
namespace:是对此mapper 的唯一标识,通过select标签进行声明一个sql语句。
select中的id属性是在此mapper映射文件中sql语句的唯一id,我们可以通过namespace.id来定位这一条sql语句
- MyBatisTest.java
public class MybatisTest { public static void main(String[] args ) { SqlSession sqlSession = null; try{ //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlsession工厂 -->相当于connection SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //获取sqlsession -->相当于执行sql语句对象 sqlSession = sqlSessionFactory.openSession(); //执行sql Map<String , Object> map = sqlSession.selectOne("com.jujidi.model.User.load"); System.out.println(map); }catch(IOException e){ // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(sqlSession!=null){ sqlSession.close(); } } } }
到这里环境环境搭建完毕,讲解大体流程: MyBatisTest.java类中进行测试搭建的环境,首先加载核心配置文件mybatis-config.xml,此配置文件用来配置环境参数和加载映射文件。
然后创建sqlsession工厂,这个工厂就要通过刚刚加载的mybatis-config.xml配置文件来build。通过工厂就可以生产sqlsession了,sqlsession有很多方法,我们执行selectOne方法来执行映射文件中的SQL,这就必须在selectOne方法中填写映射文件中对应SQL的地址,也就是全限定类名来定位。
在映射文件中进行操作数据库把结果进行返回,打印输出。
好了这里差不多把环境搭建完毕后的流程走了一遍,算是对MyBatis的一个入门和起步,接下来我们就来谈一下SqlSessionFactory和SqlSession.
- SqlSessionFactory和SqlSession
SqlSessionFactory是MyBatis非常重要的对象,他是单个数据库映射关系经过编译后的内存镜像。
SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder对象来获得,而SqlSessionFactoryBuilder从XML配置文件等中构建出SqlSessionFactory的实例。SqlSessionFactory一旦创建,在应用的执行期间都存在,其线程也是安全的。
SqlSession类似于JDBC中的Connection。它是应用程序与持久层之间执行交互操作的一个单线程对象。它底层封装了JDBC连接,线程是不安全的。
原文发布时间为:2018-07-28
本文作者:王久一
本文来自云栖社区合作伙伴“Web项目聚集地”,了解相关信息可以关注“Web项目聚集地”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
koa源码阅读[1]-koa与koa-compose
接上次挖的坑,对koa2.x相关的源码进行分析第一篇。不得不说,koa是一个很轻量、很优雅的http框架,尤其是在2.x以后移除了co的引入,使其代码变得更为清晰。 express和koa同为一批人进行开发,与express相比,koa显得非常的迷你。因为express是一个大而全的http框架,内置了类似router之类的中间件进行处理。而在koa中,则将类似功能的中间件全部摘了出来,早期koa里边是内置了koa-compose的,而现在也是将其分了出来。koa只保留一个简单的中间件的整合,http请求的处理,作为一个功能性的中间件框架来存在,自身仅有少量的逻辑。koa-compose则是作为整合中间件最为关键的一个工具、洋葱模型的具体实现,所以要将两者放在一起来看。 koa基本结构 . ├── application.js ├── request.js ├── response.js └── context.js 关于koa整个框架的实现,也只是简单的拆分为了四个文件。 就象在上一篇笔记中模拟的那样,创建了一个对象用来注册中间件,监听http服务,这个就是application....
- 下一篇
分布式事务之TCC服务设计和实现
一、TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题; TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel 3个方法均由业务编码实现; 其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消; 如下图所示,业务实现TCC服务之后,该TCC服务将作为分布式事务的其中一个资源,参与到整个分布式事务中;事务管理器分2阶段协调TCC服务,在第一阶段调用所有TCC服务的Try方法,在第二阶段执行所有TCC服务的Confirm或者Cancel方法; 二、用户在实现TCC服务时,有以下注意事项 1、业务操作分两阶段完成: 如下图所示,接入TCC前,业务操作只需要一步就能完成,但是在接入TCC之后,需要考虑如何将其分成2阶段完成,把资源的检查和预留放在一阶段的Try操作中进行,把真正的业务操作的执行放在二阶段的Confirm操作中进行; TCC服务要保证第一阶段Try操作成功之后,二阶段Confirm操作一定能成功; 2、允许空回滚: 如下图所示,事务协调器在调用TC...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群