MyBatis 以前是apache的iBatis, 后来这个项目迁移到了google
code,并且改名为MyBatis,是一个数据持久层框架。
什么是数据持久层?
将内存中的数据模型与存储模型相互转化。 文件的存储、数据的读取都是数据持久化操作。
- 数据模型:任何数据结构或对象的模型。
- 存储模型:可以是关系模型、XML、二进制流等。
Mybatis简介
- 一个开源的数据持久层框架。
- 内部封装了通过JDBC访问数据库的操作,支持普通SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集检索。
- 主要思想:实现SQL语句的灵活配置,配置在配置文件中。
- 可以在不修改代码的情况下,直接在配置文件修改SQL。
- 一种半自动的ORM实现(手写SQL语句)。
什么是ORM?
ORM(Object/Relational Mapping) 对象关系映射,一种数据持久化技术。它将对象模型和关系型数据库直接建立起对应关系,通过JavaBean对象去操作数据库表的数据。
Mybatis优缺点
优点
- 封装了JDBC访问数据操作,减少代码量。
- 灵活,SQL语句从代码中分离,降低耦合度,便于统一管理和优化,重用。
- 提供XML标签,编写动态SQL。
- 提供映射标签,支持对象与数据库ORM字段关系映射。
缺点
- SQL编写太多。
- SQL依赖数据库,不可随意更换数据库。
如何使用Mybatis?
创建一个空的Maven项目
导入mybatis依赖
Mybatis支持
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
数据库链接支持
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
在资源目录下创建mybatis-condig.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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.56.104:3306/mybatis_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/liuy/springMybatis/dao/DeptMapper.xml"/>
</mappers>
</configuration>
创建Mapper接口和Mapper.xml映射文件
<?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.liuy.springMybatis.dao.DeptMapper">
<select id="selectDept" resultType="com.liuy.springMybatis.entity.Dept">
select * from tbl_dept where id = #{id}
</select>
</mapper>
public interface DeptMapper {
Dept selectDept(int id);
}
创建接收查询结果的实体类Dept,与表字段对应
@Data
public class Dept {
int id;
String deptName;
String locAdd;
}
使用Mybatis查一个数据
public static void main(String[] args) throws IOException {
//读取资源配置类
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//由文件流生成SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取sqlSession会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取Mapper
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
//SQL语句查询数据
Dept dept = mapper.selectDept(1);
System.out.println(dept);
//关闭会话
sqlSession.close();
}
查询结果