MyBatis简介与环境搭建(尚硅谷)
MyBatis的简介
一、MyBatis历史
MyBatis框架里面是封装了JDBC,用于连接数据库,但是它比原先的JDBC更快速,更高效!
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。
代码于 2013年11月迁移到Github。 iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架 包括SQL Maps和Data Access Objects(DAO)。
二、MyBatis的特性
(1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
定制化SQL表示:在MyBatis中所有的SQL语句都需要我们自己写,不像Hibernate框架可以自动生成。
(2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
(3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录(不用写实现类了!)
(4) MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架
三、MyBatis的下载
MyBatis下载地址:https://github.com/mybatis/mybatis-3
四、MyBatis尚硅谷视频地址(2022完整!!!)
本博客内容是根据尚硅谷的视频写的,该视频的地址是在↓,需要自取,完全免费,链接过期请留言,也可以微信搜索“尚硅谷”公众号,然后自行下载!
链接:https://pan.baidu.com/s/1xCKBjs7pLSoBsxVohnJ09g
提取码:7j6a
--来自百度网盘超级会员V3的分享
五、与其它持久层框架的异同
JDBC
- SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
- 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
- 代码冗长,开发效率低
Hibernate 和 JPA
- 操作简便,开发效率高
- 程序中的长难复杂 SQL需要绕过框架
- 内部自动生产的SQL,不容易做特殊优化
- 基于全映射的全自动框架,大量字段的 POJO进行部分映射时比较困难。
- 反射操作太多,导致数据库性能下降。
MyBatis
- 轻量级,性能出色
- SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
- 开发效率稍逊于HIbernate,但是完全能够接受
MyBatis环境搭建
项目骨架
注:pojo包下的Product实体类省略,数据库表以给出,读者自行创建即可!
数据库表数据
一、创建Maven
不要使用idea默认的Maven地址!使用自己设定的Maven仓库。
二、pom.xml文件
<?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>com.Harmony</groupId>
<artifactId>MyBatis_demo01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- mybatis框架的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!-- mysql-java的jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- 测试jar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
三、创建MyBatis的核心配置文件
MyBatis的核心配置文件习惯上命名为mybatis-config.xml,但是这只是建议,并非强制要求!
之后整合Spring,这个配置文件可以省略!(因为可以写在spring的配置文件中)
核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息
大致就是如下两件事:
- 设置数据库的环境
- 引入映射配置文件
mybatis-config.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>
<!-- 1.设置连接数据库的环境 -->
<environments default="development">
<!-- 具体环境 -->
<environment id="development">
<!-- 事务管理器 -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="888888"/>
</dataSource>
</environment>
</environments>
<!-- 2.配置映射文件 -->
<mappers>
<mapper resource="mappers/ProductMapper.xml"/>
</mappers>
</configuration>
四、创建mapper接口
ProductMapper接口
package com.Harmony.dao;
import java.util.List;
public interface ProductMapper {
/**
* 添加商品
*/
int insertProduct();
}
五、创建MyBatis的映射文件
ORM(Object Relationship Mapping)对象关系映射。
- 对象:Java的实体类对象
- 关系:关系型数据库
- 映射:二者之间的对应关系
Java概念 | 数据库概念 |
类 | 表 |
属性 | 字段 / 列 |
对象 | 记录 / 行 |
1、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
2、MyBatis中可以面向接口操作数据,要保证两个一致:
a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致
b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
ProductMapper.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="com.Harmony.dao.ProductMapper">
<insert id="insertProduct">
insert into product values(105,"电脑",123.23,8)
</insert>
</mapper>
六、编写测试类,通过juit进行测试
package com.Harmony.test;
import com.Harmony.dao.ProductMapper;
import com.Harmony.pojo.Product;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
@Test
public void testInsertMyBatis() throws IOException {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
ProductMapper mapper = sqlSession.getMapper(ProductMapper.class);
int result = mapper.insertProduct();
//要提交事务
sqlSession.commit();
System.out.println(result);
}
}
注意:上述测试类的代码,如果没有sqlSession.commit(),即不提交事务,修改数据是不成功的,虽然程序不会报错。或者可以将sqlSessionFactory.openSession()括号里的值该为true,即表示自动提交事务。
关于配置文件的细节请看
MyBatis配置文件标签详解(尚硅谷)_面向鸿蒙编程的博客-CSDN博客https://blog.csdn.net/weixin_43715214/article/details/124613754