简介
MyBatis作用
- MyBatis 是支持定制化 Sql、存储过程以及高级映射的优秀的
持久层
框架。 - MyBatis 避免了几乎所有的 Jdbc 代码和手动设置参数以及获取结果集。
- MyBatis 可以使用简单的 Xml 用于配置和原始映射,将接口和 Java 的 Pojo 类映射成数据库中的记录。
- 使开发者只需要关注
Sql
本身,而不需要花费精力去处理例如注册驱动、创建Connection
、创建Statement
、手动设置参数、结果集检索等 Jdbc 繁杂的过程代码。
MyBatis历史
- 原是
Apache
的一个开源项目IBatis
2010
年6
月这个项目由 Apache Software Foundation 迁移到了Google
Code
,并且改名为MyBatis
。IBatis
一词来源于Internet
和Abatis
的组合,是一个基于 Java 的持久层
框架。
为何选择MyBatis
Jdbc
- Sql 夹在 Java 代码块里,耦合度高导致硬编码内伤。
- 维护不易且实际开发需求中
Sql
是有变化,频繁修改的情况多见。 - 要自已创建
Connection
、创建Statement
、手动设置参数、结果集检索等。
HiBernate
- 长难复杂 Sql,对于 HiBernate 而言处理也不容易。
- 内部自动生产的 Sql,不容易做特殊优化。
- 基于全映射的全自动框架,JavaBean 存在大量字段时无法只映射部分字段。导致数据库性能下降。
MyBatis
- 对开发人员而言,核心 Sql 还是需要自己优化。
- MyBatis 是一个半自动化的持久化层框架。
- MyBatis 是支持定制化 Sql、存储过程以及高级映射的优秀的持久层框架。
MyBatis入门程序
下载MyBatis
官方地址:http://www.mybatis.org/mybatis-3/getting-started.html
GitHub:https://github.com/mybatis/mybatis-3/releases
我这里就不写的非常详细了,下载MyBatis自行下载,过于简单。
引入MyBatis
还额外的加入了 Juint LomBok 单元测试的 Jar
创建表对应Domain
sql
/* Navicat MySQL Data Transfer Source Server : xhh Source Server Version : 50720 Source Host : localhost:3306 Source Database : mybatis Target Server Type : MYSQL Target Server Version : 50720 File Encoding : 65001 Date: 2020年5月16日22:35:41 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for customer -- ---------------------------- DROP TABLE IF EXISTS `customer`; CREATE TABLE `customer` ( `cust_id` int(11) NOT NULL AUTO_INCREMENT, `cust_name` varchar(255) DEFAULT NULL, `cust_profession` varchar(255) DEFAULT NULL, `cust_phone` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`cust_id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of customer -- ---------------------------- INSERT INTO `customer` VALUES ('1', '鲁班', '射手', '13499887733', '303158131@qq.com'); INSERT INTO `customer` VALUES ('2', '李白', '刺客', '18977665521', 'libai@163.com'); INSERT INTO `customer` VALUES ('3', '阿轲', '刺客', '18977665997', 'aike@qq.com'); INSERT INTO `customer` VALUES ('4', '德玛西亚', '肉盾', '13700997665', 'demaxiya.126.com6'); INSERT INTO `customer` VALUES ('5', '亚索', '战士', '13586878987', 'yasuo@qq.com'); INSERT INTO `customer` VALUES ('6', '奶妈', '辅助', '13398909089', 'nama@qq.com'); INSERT INTO `customer` VALUES ('7', '剑圣', '刺客', '13398909088', 'jiansheng@163.com'); INSERT INTO `customer` VALUES ('8', '盖伦', '肉盾', '15923242231', 'gailun@126.com'); INSERT INTO `customer` VALUES ('9', '锤石', '辅助', '13398908900', '8888@163.com'); INSERT INTO `customer` VALUES ('10', '阿木木', '辅助', '13398908928', '13398908928@qq.com');
com/xhh/domain/Customer
@Getter@Setter@ToString:为 LomBok 的注解,可以为 Pojo 自动的生成 Git Set
@Getter@Setter@ToString public class Customer { private Integer cust_id; private String cust_name; private String cust_profession; private String cust_phone; private String email; }
创建MyBatis配置文件
resource/SqlMappingConfig.xml
<?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> <!-- spring整合后 environments配置将废除 使用spring中的连接池 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC"/> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> </configuration>
创建Mapping文件
com/xhh/domain/Customer.xml
<?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="myTest"> <!--根据cust_id查询客户--> <select id="queryCustomerById" parameterType="Int" resultType="com.xhh.domain.Customer"> SELECT * FROM `customer` WHERE cust_id = #{cust_id} </select> </mapper>
配置文件当中引入Mapping
修改:resource/SqlMappingConfig.xml
<!--加载映射文件--> <mappers> <mapper resource="com/xhh/domain/Customer.xml"/> </mappers>
创建工厂测试
@Test public void test() throws IOException { // 1.创建 SqlSessionFactoryBuilder 对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 2.加载 SqlMappingConfig.xml 配置文件 InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml"); // 3.创建 SqlSessionFactory 对象 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); // 4.创建 SqlSession 对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 5.执行 SqlSession 对象执行查询 /* * 第一个参数:Customer.xml 的 statement 的 Id; * 第二个参数:是执行 Sql 需要的参数; * */ Customer customer = sqlSession.selectOne("queryCustomerById", 1); // 6.打印结果 System.out.println(customer); // 7.释放资源 sqlSession.close(); }
MyBatis执行流程
MyBatis整体架构