Mybatis入门到精通
Mybatis简介
MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
需要使用的Jar包:mybatis-3.4.6.jar(mybatis核心包)
下载地址:
https://mvnrepository.com/artifact/org.mybatis/mybatis
Mybatis构造
1。mybatis需要配置SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2。通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3。由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
3mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
4。Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
5。Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
6。Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
Mybatis入门
第一步:先创建一个数据库已经表,再添加几条测试的数据,以供我们来操作
CREATE DATABASE mybatis
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(32) NOT NULL COMMENT '用户名称',
`birthday` DATE DEFAULT NULL COMMENT '生日',
`sex` CHAR(1) DEFAULT NULL COMMENT '性别',
`address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES (1,'老王', '2015-07-08', '男', '长沙市');
INSERT INTO `user` VALUES (2,'张三', '2014-07-10', '女', '北京市');
INSERT INTO `user` VALUES (3,'李四', '2018-08-08', '男', '河南省');
第二步:创建java项目,创建Mybatis核心配置文件sqlMapConfig.xml SqlMapConfig.xml是mybatis核心配置文件,配置文件内容为数据源、事务管理
<?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>
<environments default="development">
<environment id="development">
<!-- 使用jdbc的事务 -->
<transactionManager type="JDBC"/>
<!-- 使用连接池 连接数据库 -->
<dataSource type="POOLED">
<!-- 我这里用的是mysql 8.0以上的才需要后面加'?serverTimezone=UTC' 如果你不是的话就不需要 -->
<!--
不是8.0以上的设置是这样的
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<!--这里是mysql的用户名如果没用修改过 一般情况下都是 root -->
<property name="username" value="root"/>
<!--这里是mysql登录的密码 你设置什么就填什么 -->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射器的位置 -->
</configuration>
**第三步:创建和数据库表对应的pojo类 **
public class