搞懂MyBatis-快速入门
程序员文章站
2022-07-13 21:12:53
...
搞懂MyBatis-快速入门
1.什么是MyBatis
MyBatis是一个持久层的框架,是对JDBC的进一步封装的ORM实现框架。
什么是ORM:
Object Relation Mapping:对象关系映射。是一种为了解决面向对象与关系数据库存在互不匹配的现象的技术。通过描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上是将数据从一种形式转换到另一种技术,实现程序对象到关系数据库数据的映射。
为什么要使用ORM呢?
- 建立对象和数据库的联系,方便使用面向对象
缺点:
- 性能较直接用SQL差
- 不太容易处理复杂查询语句
2.为什么使用Mybatis
实现程序对象到关系数据库数据的映射。
3. 快速入门
3.1基于xml配置文件
步骤:
- 创建maven工程,导入相关依赖
<!--管理版本-->
<properties>
<mybatis.version>3.4.5</mybatis.version>
<junit.version>4.10</junit.version>
<mysql-connector-java.version>5.1.6</mysql-connector-java.version>
<log4j.version>1.2.12</log4j.version>
</properties>
- 编写数据库表
CREATE TABLE student(
id INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
gmt_create DATETIME NOT NULL,
gmt_modified DATETIME NOT NULL,
PRIMARY KEY(id)
);
- 创建实体,在项目中创建entity包下创建Student类
//lombok的注解,可以为下面的属性自动添加getter和setter
@Data
public class Student {
private Integer id;
private String name;
public Student() {
}
public Student(Integer id, String name) {
this.id = id;
this.name = name;
}
}
- 编写持久层接口,在项目中创建Dao包或Mapper包,里面创建StudentDao或StudentMapper类
public interface StudentMapper {
List<Student> findAll();
}
- 编写持久层接口的映射文件,要求,和持久层接口在同一个包下,名称和持久层接口的名字一样,扩展名是xml(在resource下建)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cTgED5oX-1591241400621)(C:\Users\xiaolong\Desktop\images\mapper.png)]
<?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.xiaolong.mapper.StudentMapper">
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="com.xiaolong.entitys.Student">
select * from student
</select>
</mapper>
- 编写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>
<!-- 配置 mybatis 的环境 -->
<environments default="mysql">
<!-- 配置 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/book"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<mapper resource="com/xiaolong/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
- 测试
public class MybatisTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream reader = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(reader);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
//6.使用代理对象执行查询所有方法
List<Student> students = studentMapper.findAll();
for (Student student : students) {
System.out.println(student);
}
//7.释放资源
session.close();
in.close();
}
}
mybatis流程总结
- 通过Reader对象读取Mybatis映射⽂件
- 通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象
- 获取当前线程的SQLSession
- 事务默认开启
- 通过SQLSession读取映射⽂件中的操作编号,从⽽读取SQL语句
- 提交事务
- 关闭资源
3.2基于注解
增删改查
修改1:删除StudentMapper.xml配置文件,将sql语句直接写在StudentMapper上
public interface StudentMapper {
@Select("select * from student")
List<Student> findAll();
@Insert("INSERT INTO student(id,name) VALUES(#{id},#{name})")
void addStudent(Student student);
@Delete("delete from student where id=#{id}")
void deleteStudentById(int id);
@Update("update Student set name=#{jackson} where id=#{id}")
void updateStudent(Student student);
}
修改2:在mybatis的配置文件上,修改映射位置
<!--基于注解方式告诉mybatis映射配置的位置-->
<mappers>
<mapper class="com.xiaolong.mapper.StudentMapper"></mapper>
</mappers>
测试
public class MybatisTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
Student jack = new Student(10, "jack");
//增
studentMapper.addStudent(jack);
//删
studentMapper.deleteStudentById(1);
//查
List<Student> students = studentMapper.findAll();
for (Student student : students) {
System.out.println(student);
}
//7.释放资源
session.close();
in.close();
}
}
注:仅用于学习交流
上一篇: 实现一个简易的对等式异步通信框架
下一篇: SwaggerUI 2.92使用说明文档