一、MyBatis介绍
1.1 框架概念
**框架:**就是软件的半成品,完成了软件开发过程中的通用操作,开发者只需很少或者不用进行加工,就能 实现特定的功能。从而简化开发人员在开发过程中的步骤,提高开发效率。
1.2 常用框架
- MVC框架:简化Servlet的开发步骤
- Struts2
SpringMVC
- 持久层框架:完成数据库操作框架
- apache DBUtils
- Hibernate
- Spring JPA
MyBatis
- 胶水框架:
Spring
整合作用
SSM:
Spring SpringMVC MyBatisSSH:Spring Struts Hibernate
1.3 MyBatis介绍
MyBatis:是一个半自动的ORM框架
ORM(Object Relational Mapping) 对象关系映射,将Java中的一个对象与数据表中一行记录一一对应
ORM框架提供了实体类与数据表的映射关系,通过映射文件的配置,实现对象的持久化。
- MyBatis,前身是iBatis,iBatis是Apache软件基金会提供的一个开源项目
- 2010年,iBatis迁移到Gogle code,正式更名为MyBatis
- 2013年,迁移到Github托管
- MyBatis特点:
- 支持自定义SQL/存储过程
- 对原有的JDBC进行了封装,几乎消除了所有的JDBC代码,让开发者只需关注SQL本身
- 支持XML和注解配置方式自动完成ORM,实现结果映射
二、MyBatis框架部署
框架部署,将框架引入到我们的项目中
2.1 创建Maven项目
- Java工程
- JavaWeb工程
2.2 添加MyBatis依赖
-
在pom.xml中添加依赖
- mybatis
- mysql driver
<!--Mysql--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.2.0</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>
2.3 创建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="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/db_test?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="***"/>
</dataSource>
</environment>
</environments>
</configuration>
- 在项目工程resource中新建mybatis-config.xml
- mybatis-config.xml中配置数据库连接信息
三、Mybatis框架使用
案例:学生信息的数据库操作
3.1 创建数据表
CREATE TABLE `students` (
`stu_num` char(8) NOT NULL,
`stu_name` varchar(20) NOT NULL,
`stu_denger` char(2) NOT NULL,
`stu_age` int NOT NULL,
`stu_tel` char(11) NOT NULL,
`stu_qq` varchar(11) DEFAULT NULL,
`cid` int DEFAULT NULL,
PRIMARY KEY (`stu_num`),
KEY `FK_STUDENT_CLASS` (`cid`),
CONSTRAINT `FK_STUDENT_CLASS` FOREIGN KEY (`cid`) REFERENCES `class` (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
3.2 创建实体类
package com.feng.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
private String stu_num;
private String stu_name;
private int age;
private String stu_denger;
private String stu_tel;
private String stu_qq;
private int cid;
}
3.3 创建DAO接口
创建接口,并定义方法 addStudent;
package com.feng.dao;
import com.feng.pojo.Student;
public interface StudentDao {
public int addStudent(Student student);
}
3.4 创建DAO接口的映射文件
- 在resources目录下,新建mappers文件夹
- 在mappers文件夹中新建StudentMapper.xml的映射文件(与实体类同名映射文件)
- 在映射文件中,对DAO中定义的方法进行实现
<?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相当与DAO接口的实现类,namespace属性要指定实现DAO接口的全限定名-->
<mapper namespace="com.feng.dao.StudentDao">
<insert id="addStudent" parameterType="com.feng.pojo.Student">
insert into students(stu_name,stu_name,stu_age,stu_denger,stu_tel,stu_qq,cid)
values (#{stu_num},#{stu_name},#{stu_age},#{stu_denger},#{stu_tel},#{stu_qq},#{cid})
</insert>
</mapper>
3.5 将映射文件添加到主配置文件
<mappers>
<mapper resource="mappers/StudentMapper.xml"></mapper>
</mappers>
四、单元测试
package com.feng.dao;
import com.feng.pojo.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 java.io.IOException;
import java.io.InputStream;
import static org.junit.Assert.*;
public class StudentDaoTest {
@org.junit.Test
public void addStudent() throws IOException {
//加载mybatis配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//构建session工厂
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//会话工厂
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(inputStream);
//会话(连接)
SqlSession sqlSession = factory.openSession();
//通过会话,获取dao对象
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
//测试dao方法
Student student = new Student();
student.setStu_num("9");
student.setStu_name("太乙真人");
student.setStu_age(88);
student.setStu_denger("男");
student.setStu_tel("123312312");
student.setStu_qq("877877");
student.setCid(2);
int i = studentDao.addStudent(student);
sqlSession.commit();
sqlSession.close();
inputStream.close();
System.out.println(i);
}
}