MyBatis其实很简单。我们在工作中使用的通常是与Spring整合,Spring作为框架粘合剂,简化了很多使用实现细节。为了研究MyBatis源码,我们需要单从MyBatis的使用来作为入口,循着会用到源码来深入。
一、MyBatis是什么?能做什么?
我研究东西喜欢知其然知其所以然,这样,不会有困惑。那么MyBatis是什么?总得问个为什么。
在官方地址中(http://www.mybatis.org/mybatis-3/),有介绍,我们摘取一段:
and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of
parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration
and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
总体意思就是:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
二、入门使用
使用maven构建一个MyBatis的测试工程,maven的使用这里我不想赘述,网上文章很多。
这里,我们使用MySQL数据库,使用MyBatis作为持久化框架。
为了使项目中职责清楚,我们需要划分目录结构,一般的dao层用来访问与数据访问接口相关的内容,model层用来放与实体相关部分,mapper目录用来存放与对象与数据映射关系的配置文件。当然,我们需要一张数据表,开搞。
1、新建一张数据表(直接使用navicat工具新建即可)
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `mallt_user` -- ---------------------------- DROP TABLE IF EXISTS `mallt_user`; CREATE TABLE `mallt_user` ( `ID` int(100) NOT NULL AUTO_INCREMENT COMMENT '主键', `NAME` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '用户姓名', `MOBILE` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '手机号码', `EMAIL` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2、新建一个maven工程,建议大家使用IntelliJ IDEA (大家自行百度创建maven工程的方法),这里不细说,我们只说下pom文件依赖部分:
<dependencies> <!-- 添加junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- 添加mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency> <!-- 添加mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.12</version> </dependency> </dependencies>
这里我们使用3.2.6稳定版本作为示例版本,目前官网的最新版本是3.4.x。
搭建完的工程目录结构如下:
3、我们分别介绍下目录中的内容
①在dao层中,MalltUserDao是接口类,里面提供了查询、插入等方法。
package com.zhaodf.dao; import com.zhaodf.model.MalltUser; import java.util.List; public interface MalltUserDao { public int insert(MalltUser malltUser); public MalltUser findMalltUserById (int id); }
②在model层,是实体类MalltUser,包含跟数据表列对应的属性名
package com.zhaodf.model; public class MalltUser { private int id; private String name; private String mobile; private String email; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
③在mappers目录下,malltUserDao-mapper.xml是关系映射文件,我们这里包含select和insert两种映射语句
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="com.zhaodf.dao.MalltUserDao"> <select id="findMalltUserById" resultType="com.zhaodf.model.MalltUser" > select * from mallt_user where id = #{id} </select> <insert id="insert" parameterType="com.zhaodf.model.MalltUser"> insert into mallt_user(name,mobile,email) values(#{name}, #{mobile}, #{email}); </insert> </mapper>
④关键部分:MyBatis的核心配置文件db-core.properties,里面包含了我们要使用的大部分configuration 配置。
<?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> <!-- 这里使用properties属性节点加载数据源的配置信息,也可以使用property属性来传递 --> <properties resource="db-info.properties"></properties> <!--指定 MyBatis 所用日志的具体实现,未指定时将自动查找。--> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <environments default="development"> <environment id="development"> <!-- 事务管理器的配置,这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域--> <transactionManager type="JDBC"/> <!-- 有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”),POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!--定义完SQL 映射语句,首先我们需要告诉 MyBatis 到哪里去找到这些语句。 最佳的方式是告诉 MyBatis 到哪里去找映射文件。可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。--> <!-- 使用相对于类路径的资源引用 --> <mapper resource="mappers/malltUserDao-mapper.xml"/> </mappers> </configuration>
⑤在db-info.properties文件中,配置连接MySQL的驱动类,数据库连接,用户名、密码等
driver=com.mysql.jdbc.Driver url=jdbc:mysql://ip:端口/数据库名 username=用户名 password=密码
⑥在test目录下,放置的是测试类信息:
import com.zhaodf.dao.MalltUserDao; import com.zhaodf.model.MalltUser; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Assert; import org.junit.Test; import java.io.IOException; public class MyBatisDemoTest { @Test public void findUserById() { SqlSessionFactory sessionFactory = null; SqlSession sqlSession = null; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("db-core.xml")); sqlSession = sessionFactory.openSession(); MalltUserDao malltUserDao = sqlSession.getMapper(MalltUserDao.class); MalltUser user = malltUserDao.findMalltUserById(9); Assert.assertEquals("zhaodf",user.getName()); } catch (IOException e) { e.printStackTrace(); }finally { sqlSession.close(); } } @Test public void inserMalltUser() { SqlSessionFactory sessionFactory = null; SqlSession sqlSession = null; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("db-core.xml")); sqlSession = sessionFactory.openSession(); MalltUserDao malltUserDao = sqlSession.getMapper(MalltUserDao.class); MalltUser user = new MalltUser(); user.setName("baixw"); user.setMobile("18333828888"); user.setEmail("baixw@163.com"); malltUserDao.insert(user); sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); }finally { sqlSession.close(); } } }
这里要注意的是,单独用MyBatis进行示例测试时,插入语句执行最后要进行commit操作( sqlSession.commit();) 。
测试执行,插入数据和查询数据都正常。
以上就是MyBatis的基本用法,后续帖我们从SqlSessionFactory的创建开始讲起,从源码角度来逐渐剖析MyBatis。
相关推荐
这篇“MyBatis入门到精通”的学习资料是针对初学者设计的,旨在帮助新手快速掌握MyBatis的基本用法和高级特性。 1. **MyBatis简介** MyBatis是由Clinton Begin创建的开源项目,它是一个基于Java的持久层框架,消除...
【压缩包子文件的文件名称列表】"LearnIBatis"可能包含一系列的学习资源,比如示例代码、配置文件、数据库脚本等,用于辅助读者跟随教程进行实际操作。这些文件通常会包括以下几个部分: 1. **pom.xml** - Maven...
这篇博客“【MyBatis入门】—— MyBatis日志”旨在帮助初学者理解如何在MyBatis中配置和使用日志功能,以便于调试和优化应用程序。 在MyBatis中,日志系统对于跟踪SQL语句和参数,以及检查执行效率至关重要。...
本篇入门文档主要讲述的是 MyBatis 3.3.0 版本的相关内容。相比之前的版本,3.3.0 在性能和功能上都有所提升,同时修复了一些已知的问题,提高了整体的稳定性和易用性。 #### 三、MyBatis 安装与集成 ##### 1. ...
Mybatis是一种支持定制化SQL、存储过程以及高级映射的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的...以上就是Mybatis入门到理解篇的主要知识点,希望对大家有所帮助。
在博客“MyBatis之一(环境搭建)”中,作者Yufenfei可能详细讲解了这些过程,帮助初学者快速入门MyBatis框架。通过阅读这篇博客和实践上述步骤,你可以深入理解MyBatis的工作原理,并熟练掌握其使用方法。
该项目源自一篇名为"SpringBoot入门系列:第六篇 mybatis"的博客文章,旨在帮助初学者快速上手Spring Boot与Mybatis的集成。 Spring Boot是Spring框架的一个扩展,它简化了Spring应用程序的初始搭建以及开发过程。...
本篇将围绕"MyBatis经典入门案例"展开,讲解如何从零开始搭建一个简单的MyBatis应用。 首先,我们需要了解MyBatis的基本构成。MyBatis主要由四个部分组成:SqlSessionFactoryBuilder、SqlSessionFactory、...
【描述】:这篇博客文章主要介绍了如何开始使用Apache Derby数据库和MyBatis框架进行Java开发。Apache Derby是一个轻量级、嵌入式的关系型数据库,而MyBatis则是一个流行的持久层框架,它简化了Java应用程序与数据库...
在本篇文章中,我们将深入探讨MyBatis的架构,并逐步引导你完成MyBatis的入门配置。 首先,理解MyBatis的核心架构是至关重要的。MyBatis的主要组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和...
这个是学习Mybatis持久层框架的入门程序,有增删改查和Mybatis的一些开发技巧...如果想要详细学习Mybatis可以看我的博客一篇关于Mybatis的文章:http://littlerich.top/2017/08/09/Mybatis持久化框架带来更灵活的操作/
mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...
MyBatis 是一款深受 Java 开发者喜爱的持久层框架,源自 Apache 的 iBatis 项目,后来在 2010 年迁移到 Google Code,并改名为 MyBatis,最终于 2013 年 11 月转至 Github 进行维护。MyBatis 的核心理念是将 SQL 与 ...
在本篇博文中,我们将深入探讨 Activiti 与 ORM 框架 MyBatis 的集成,以及 MyBatis 的基础概念和使用方法。Activiti 是一个流行的工作流引擎,而 MyBatis 是一个轻量级的持久层框架,两者结合可以高效地管理数据库...
本篇文章将详细解析MyBatis的“Hello World”实例,帮助初学者快速入门。 【描述】"初始的mybatis的helloworld文档" MyBatis的“Hello World”教程是学习其基本概念和配置的绝佳起点。通过这个简单的例子,我们...
Mybatis是一款优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。本教程将引导你逐步了解并掌握Mybatis的基础知识,让你在Java开发中更加游刃有余地处理数据库操作。 首先,我们需要理解Mybatis的核心...
在本篇《Mybatis入门实例(二)——添加ehcache缓存支持》中,我们将深入探讨如何在Mybatis框架中集成Ehcache作为二级缓存,以提高数据访问的效率和性能。Ehcache是一个开源的Java分布式缓存,广泛用于缓存应用程序中...
在本篇教程中,我们将深入探讨"Mybatis入门实例(三)——使用MyBatis Generator生成DAO"的主题。MyBatis Generator(MBG)是一个强大的工具,它可以自动生成MyBatis框架所需的代码,包括数据访问对象(DAO)、实体类...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本文中,我们将深入探讨如何使用MyBatis 3.0.4版本进行...希望这篇教程能帮助初学者快速入门MyBatis,为进一步深入学习打下坚实基础。