一、首先MyBatis使用了ORM框架
ORM(Object Relactional Mapping) 对象关系映射,将程序中的 一个对象与表中的一行数据一一对应。
ORM框架是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息把对象持久化到数据库中。
二、使用JDBC(Java数据库连接)与MyBatis相比有什么缺点?
1.JDBC存在大量的冗余代码;2.需要手动创建; 3.手动将结果封装成实体对象;4.查询效率低,没有对数据访问进行优化
三、(1)MyBatis是一个优秀的基于Java的持久层框架,支持自定义SQL,存储过程和高级映射。
(2)MyBatis对原有JDBC操作进行了封装,几乎消除了所有JDBC代码,使开发者只需关注 SQL 本身。
(3)MyBatis可以使用简单的XML或Annotation来配置执行SQL,并自动完成ORM操作,将执行结果返回。
四、简单的代码演示(使用的是IDEA 2022)
(1)创建个新项目
(2)添加项目的依赖
如下所示(是一直到最后的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>org.example</groupId>
<artifactId>hello-Mybatis</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>
<!-- 添加MYbatis依赖-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- MySQl驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!--添加单元测试的依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 指定资源文件的位置-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
(3)配置数据库连接,数据库是Mysql,注意(2)里面配置的mysql版本是8.0.28版本
红色部分需要改成自己的数据库名字,用户名,密码
(4)配置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">
然后另起一行输入,圈红部分需要加入mapper文件的地址,现在还没有创建,先不写
(5)下载一个比较方便使用的插件
(6)创建一个实体类文件,
首先要在数据库建表,设置属性,这里使用的是Mysql,代码为
create table users(
id int primary key auto_increment,
name varchar(50),
password varchar(50),
sex varchar(1),
birthday datetime,
registTime datetime
)default charset = utf8;
这个除了可以在Mysql里使用。如果配置有Database的话也可以如下图在IDEA里快捷使用
创建好后随便加一行数据,然后创建实体类
package com.ii.hello.mybatis.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author 栗子好
* @date 2023/6/14&20:42
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String id;
private String name;
private String password;
private String sex;
private Date birthday;
private Date registTime;
}
(6)创建dao层接口
那个小鸟的标志就是之前下载的小插件,在后面和mapper连接后就会蹦出来
package com.ii.hello.mybatis.dao;
import com.ii.hello.mybatis.entity.User;
/**
* @author 栗子好
* @date 2023/6/14&20:47
* dao层接口
*/
public interface UserMapper {
// 根据id查询用户
User selectUserById(Integer id);
}
(7)创建mapper
namespace是对应的接口的路径,也就是(6)里面创建的
parameterType代表了传入数据的类型
resultType代表了实体类的路径(后面会配置别名,这里已经配置过,用的User)
<?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.ii.hello.mybatis.dao.UserMapper">
<select id="selectUserById" parameterType="int" resultType="User">
select * from users where id=#{id};
</select>
</mapper>
(8)更改(4)里mapper代码
首先将(4)里面的mapper路径配置好
<!-- mapper文件设置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
然后添加(7)里面需要配置别名的代码(注意,有顺序)
(9)匹配测试(test)类
因为在(2)里已经添加过下面这个依赖,所以可以直接弄
<!--添加单元测试的依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
在这个位置创建测试类
package com.ii.hello.mybatis.dao;
import com.ii.hello.mybatis.entity.User;
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.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author 栗子好
* @date 2023/6/14&21:42
*/
class UserMapperTest {
@Test
void selectUserById() {
//1.读取mybatis的配置文件
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建SqlSession会话,mybatis使用工厂的方式创建
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession =factory.openSession();
// 3.获取要执行操作的接口
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 4、执行查询
User user= userMapper.selectUserById(1);
// 5.打印查看数据
System.out.println(user);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
点击这个位置的运行
运行结果如下就成功了(数据自己的mysql自己弄)