mybatis-9.28
环境:
-
JDK1.8
-
mysql 8.0.16
-
maven3.6.1
-
IDEA
回顾:
- JDBC
- mysql
- jave基础
- Maven
- junit
1.简介
1.1 什么是mybatis
mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。
-
MyBatis 是一款优秀的持久层框架
-
支持自定义 SQL、存储过程以及高级映射
-
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
-
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
如何获取mybits:
-
maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
-
Github:
-
中文学习文档:https://mybatis.net.cn/
1.2 持久化
-
数据持久化
-
数据持久化指程序的数据在持久状态与瞬时状态转化的过程
-
内存:断电即失
-
数据库(jdbc):io文件持久化
-
-
为什么需要持久化
-
内存太贵了
-
有些对象不能缺失(如银行的账户和密码)
-
1.3 持久层
dao层、service层、controller层…
-
完成持久化工作的代码块
-
界限十分明显
1.4 为什么需要mybatis
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
2.第一个mybatis程序
步骤
2.1 搭建环境
2.1.1 搭建数据库
create database 'mybatis';
use mybatis;
CREATE TABLE user(
id int not null PRIMARY KEY,
name VARCHAR(20) DEFAULT NULL,
psw VARCHAR(20) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO USER VALUES(1,'李白','123'),(2,'杜甫','234'),(3,'苏轼','333');
2.1.2 新建项目
-
新建一个普通的maven项目
-
删除一个src目录(父工程)
-
导入maven依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> </dependencies>
2.2 创建一个模板
-
编写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"> <transactionManager type="JDBC"/> <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> <!--每一个mapper.xml都需要在mybatis核心配置文件中注册--> <mappers> <mapper resource="com/kuang/dao/UserMapper.xml"/> </mappers> </configuration>
-
编写mybatis工具
public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { try { //使用mybatis的第一步,获取sqlSessionFactory对象 String resource = "src\\main\\resources\\mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 public SqlSession getsqlSession(){ return sqlSessionFactory.openSession(); } }
2.3 编写代码
-
实体类
public class User { private int id; private String name; private String psw; public User() { } public User(int id, String name, String psw) { this.id = id; this.name = name; this.psw = psw; } 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 getPsw() { return psw; } public void setPsw(String psw) { this.psw = psw; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", psw='" + psw + '\'' + '}'; } }
-
Dao接口
public interface UserDao { List<User> getUserList(); }
-
接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!