在聊Mybatis框架之前,我们应该先了解一下什么是框架?框架是一个提供了可重用的公共结构的半成品,完成了软件开发过程中的通用操作,从而程序员只需很少或者不用进行加工就能够实现特定的功能,从而简化了开发人员在 软件开发过程中的步骤,提高了开发效率
1.1 常用框架:
MVC框架 | 持久层框架 | 胶水框架 |
Struts2 | Opache Dbutils | Spring |
SpringMVC | Hibernate | |
Spring JPA | ||
Mybatis |
- MVC框架:简化了Servlet的开发步骤
- 持久层框架:完成了数据库操作的框架,相当于JDBC的操作
1.2 Mybatis框架及ORM
mybatis框架:是一个开源的数据持久层框架,它内部封装了通过jdbc访问数据库的操作,支持普通的Sql查询,存储过程和高级映射,几乎消除了所有JDBC代码和参数的手工设置以及结果集的检索,mybatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,可以再配置文件中,实现SQL的灵活配置,这样的好处是将SQL与程序代码剥离,可以在不修改代码的情况下,直接在配置文件中修改SQL |
ORM:(Object Relatiional Mapping)对象关系映射,是一种数据持久化的技术,它在对象模型和关系数据库之间建立起了对应关系,并且提供了一种机制,通过JavaBean对象操作数据库表中的数据,如图1.4,通过映射文件的配置,实现对象的持久化 |
1.3 mybatis的特点
- 支持自定义的SQL的存储过程
- 对原有的JDBC进行了封装,几乎消除了所有的JDBC代码,让开发者只需关注SQL本身
- 支持xml和注解配置方式,自动完成ORM操作,实现结果映射
1.4 Mybatis框架的部署
1.4.1 创建maven项目:
file--newproject--maven(勾选Creat from archetype)使用框架--next-配置好相关路径--finish--等待项目部署完成
1.4.2 补全maven工程的项目结构:
在main包下,创建一个名字为java的包,并将这个包设置为Sources Root(选中包右键--Make Directory as --Sources Root);在创建一个名为resources的包,并将这个包设置为resourcesRoot(选中包右键--Make Directory as --resourcesRoot)
创建好的maven项目结构如下:
1.4.3 添加mysql依赖
由于创建的是maven工程项目,所以不需要手动下载所需要的jar包,只需要在pom.xml文件中添加mysql的jar依赖即可
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
1.4.4 添加mybatis依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
由于我们选择了AUTO_import,所以添加依赖后, 打开IDEA右侧工具栏,找到maven poject 在dependencies中可以看到自动下载的jar包
1.4.5配置数据库连接(创建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>
</configuration>
在 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>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOlED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/studentinfo"/>
<property name="username" value="root"/>
<property name="password" value="990501"/>
</dataSource>
</environment>
</environments>
</configuration>
1.4.5 创建数据库studentinfo
在正式使用mybatis框架之前我们首先要有一个数据表,本示例为对学生表的增加和删除操作,所以在此我们创建了一个学生表(tb_students)
CREATE DATABASE /*!32312 IF NOT EXISTS*/`studentinfo`
USE `studentinfo`;
/*Table structure for table `tb_student` */
DROP TABLE IF EXISTS `tb_student`;
CREATE TABLE `tb_student` (
`sid` int NOT NULL,
`stu_num` char(5) DEFAULT NULL,
`stu_name` varchar(20) DEFAULT NULL,
`stu_gender` varchar(20) DEFAULT NULL,
`stu_age` int DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
1.4.6 创建实体类
创建实体类,并使用lombok依赖,对idea引入lombok支持;lombok作用可以简化实体类的代码,减少了getter、setter、以及构造器的定义,让代码更简洁。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
添加IDE工具对Lombok的支持
别写实体类,并使用Lombok
package com.qhit.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* Description: mybatis01
* Created by WuHuaSen .
* Created Date: 2022/3/30 13:32
* Version: V1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
private int StuId;
private String StuNum;
private String StuName;
private String StuGender;//性别
private int StuAge;
}
1.4.7 创建接口(Dao包),定义操作方法
接口中定义了两种操作方法InsertStudent(添加) 、DeleteStudent(删除)
package Dao;
import com.qhit.entity.Student;
/**
* Description: NewSsm
* Created by WuHuaSen .
* Created Date: 2022/3/29 19:58
* Version: V1.0
*/
public interface StudentDao {
public int InsertStudent(Student student);
public int DeleteStudent(int StuId);
}
1.4.8 创建mapper映射文件
mapper映射文件,相当于接口的实现类。步骤步骤如下:
- 在resources目录下,新建名为“mappers”文件夹
- 在mappers文件夹下新建名为“StudentMapper”.xml的映射文件,可以根据模板创建
- 在映射文件中对Dao中定义的方法进行实现
- 将映射文件添加到主配置文件中(mybatis-config.xml)
mapper模板:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
</mapper>
映射文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Dao.StudentDao">
<insert id="InsertStudent">
INSERT INTO tb_student(sid,stu_num,stu_name,stu_gender,stu_age)VALUES (#{StuId},#{StuNum},#{StuName},#{StuGender},#{StuAge});
</insert>
<delete id="DeleteStudent">
DELETE FROM tb_student WHERE sid=#{StuId};
</delete>
</mapper>
将映射文件添加到主配置文件中:
<?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="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOlED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/studentinfo"/>
<property name="username" value="root"/>
<property name="password" value="990501"/>
</dataSource>
</environment>
</environments>
<!--将映射文件添加到主配置文件中-->
<mappers>
<mapper resource="StudentDaoMapper.xml"></mapper>
</mappers>
</configuration>
二:创建单元测试类
2.1 添加Junit依赖
在pom.xml添加Junit依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
在pom.xml添加hamcrest-core依赖
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
</dependency>
2.2创建测试类
在被测试类名之后alt+insert选择Junit-Test,选择junit4,勾选要测试的方法
2.3 创建会化工厂,测试InsertStudent方法
package Dao;
import com.qhit.entity.Student;
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.InputStream;
import static org.junit.Assert.*;
/**
* Description: mybatis01
* Created by WuHuaSen .
* Created Date: 2022/3/30 16:12
* Version: V1.0
*/
public class StudentDaoTest {
@Test
public void insertStudent() throws Exception {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//创建会话工厂
SqlSessionFactory factory = builder.build(is);
//会话连接
SqlSession sqlSession = factory.openSession();
//通过对象获取Dao对象、
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
//测试StudentDao方法
int i = studentDao.InsertStudent(new Student(3,"1001","张三","男",21));
//手动提交
sqlSession.commit();
System.out.println(i);
}
@Test
public void deleteStudent() throws Exception {
}
}
此时控制台输出1则添加成功;0则添加失败,这里手动提交了会话,如果不提交会话则会出现控制台添加成功,但是数据库中的数据未添加的情况~
CRUD操作会在后续博文中持续更新~~
上述示例打印结果如下: