一、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.Testpublic 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);}
}