mybatis
前提 环境
- JDK 1.8
- mysql 5.7
- maven 3.6.3
- idea
回顾:
- JDBC
- MYSQL
- JAVA基础
- Maven
- Junit
SSM 框架:配置文件的。 看官方文档
1、 简介
1.1、 什么是mybatis

- MyBatis 是一款优秀的持久层框架,
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如何获取mybatis?
-
maven仓库 —用的人最多的
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> -
github: mybatis-3/src/site at master · mybatis/mybatis-3 · GitHub
1.2、持久层
数据持久化
-
持久化就是将程序的数据在持久状态和瞬时状态的转化的过程
-
内存:断电即失
-
数据库(JDBC), io文件持久化
-
生活 冷藏 罐头 保鲜膜 … …
为什么要持久化
- 有一些对象,不能让他丢掉。
- 内存太贵
1.3、 持久层
Dao层,Service层,Controller层…
- 完成持久化工作的代码块
- 层界限十分明显
1.4、为什么需要Mybatis?
-
帮助程序员将数据存入到数据库中。
-
方便
-
传统的JDBC代码太复杂。简化。框架。自动化。
-
不用mybatis也可以。 但是Mybatis容易上手。技术没有高低之分
-
优点
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的ORM字段关系映射。
- 提供对象关系映射标签,支持对象关系组建维护。
- 提供xml标签,支持编写动态sql。
最总要的一点:使用的人多
Spring SpringMVC SpringBoot
2、 第一个mybatis程序
思路: 搭建环境–>导入Mybatis–>编写代码–>测试!
2.1、 搭建环境
搭建数据库
create DATABASE `mybatis`;
use `mybatis`;
create table `user`(
`id` int(20) not NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT null
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT into `user` (`id`,`name`,`pwd`)values
(1,'小明','123456'),
(2,'小王','123789'),
(3,'大明','456789')
新建项目
-
新建一个普通的maven项目
-
删除src
-
导入maven依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 父工程 --> <groupId>lmq.com</groupId> <artifactId>demo01</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- mysql--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- mybatis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- junit --> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12-beta-3</version> <scope>test</scope> </dependency> </dependencies> </project>
2.2、创建一个模块
-
编写mybatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 核心配置文件 --> <configuration> <environments default="development"> <environment id="development"> <!-- 事务管理 --> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://124.71.168.125:3310/mybatis?useSSL=true&userUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration> -
编写mybatis工具库
package lmq.com.utils; 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 java.io.IOException; import java.io.InputStream; /** * @author 羡鱼 * @version 1.0 * @date 2023/6/12 21:18 */ //sqlSessionFactory --> sqlSession public class mybatisUtils { private static SqlSessionFactory sqlSessionFactory; // 提升作用域 static{ try { String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }catch (IOException e){ e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
2.3、 编写代码
-
实体类
-
Dao接口
package lmq.com.dao; import lmq.com.pojo.User; import java.util.List; /** * @author 羡鱼 * @version 1.0 * @date 2023/6/12 21:30 */ public interface UserDao { //专业名称 Mapper List<User> getUserList(); } -
接口实现类 由原来的UserDaoImp 转变为一个Mapper配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace=绑定一个对应的Dao/Mapper接口 --> <mapper namespace="lmq.com.dao.UserDao"> <!-- select 查询语句 id 是原来的接口名字 --> <select id="getUserList" resultType="lmq.com.pojo.User"> select * from mybatis.user </select> </mapper>
2.4、 测试
注意点:
org.apache.ibatis.binding.BindingException: Type interface lmq.com.dao.UserDao is not known to the MapperRegistry.
MapperRegistry是什么?
在核心文件中注册mappers
mybatis-config.xml
<!-- 每一个Mapper.xml都需要在mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="lmq/com/dao/UserMapper.xml"/>
</mappers>
注意2
maven 约定大于配置,我们之后可能遇到我们写的配置文件,无法被到出或者生效的问题,解决方法 maven
建议父子项目都放 以免父项目不生效
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
-
junit测试
package lmq.com.dao; import lmq.com.pojo.User; import lmq.com.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; /** * @author 羡鱼 * @version 1.0 * @date 2023/6/12 22:16 */ public class UserDaoTest { @Test public void test(){ // 获得sqlSersion 对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //方法一:getMapper 面相接口编程 UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for (User user:userList){ System.out.println(user); } // 关闭sqlSession sqlSession.close(); } }
常见报错:
- 配置文件没有注册
- 绑定接口错误。
- 方法名不对
- 返回类型不对
- Maven导出资源
小结:
- 写一个工具类
- 写mybatis配置文件
- 写实体类
- 写接口
- 写maper.xml
- 写测试文件