目录
基础实现步骤
1 创建一个bean类
2 mapper(Dao层接口)类:
3 相关配置(在配置方法中实现)
4 测试方法:
MyBatis 是一款优秀的 持久层框架,用于简化 Java 应用与关系型数据库的交互。它通过灵活的 SQL 映射配置,将 Java 对象与数据库记录进行关联,同时保留了开发者对 SQL 的直接控制权。
MyBatis 凭借其 灵活性 和 对 SQL 的直接控制,成为许多开发者处理复杂数据库操作的首选。如果你希望避免传统 JDBC 的繁琐,同时保留 SQL 的透明度,MyBatis 是一个高效且实用的解决方案。
基础实现步骤
-
导入 MyBatis 依赖
-
配置数据源信息
-
编写一个 JavaBean 对应数据库一个表模型
-
Mapper 接口与实现
-
以前:
Dao 接口 → Dao 实现 → 标注 @Repository 注解
-
现在:
Mapper 接口 → Mapper.xml 实现 → 标注 @Mapper 注解
-
(安装 MyBatisX 插件,自动为 Mapper 类生成 Mapper 文件)
-
在 Mapper 文件中配置方法的实现 SQL
-
-
告诉 MyBatis 去哪里找 Mapper 文件
-
编写单元测试
项目模块初始化
1 创建一个bean类
package org.example.mybatis01.bean;import lombok.Data;@Data
public class Emp {private Integer id;private String name;private Integer age;private String gender;//生成构造方法除去id的构造方法public Emp(String name, Integer age, String gender) {this.name = name;this.age = age;this.gender = gender;}}
2 mapper(Dao层接口)类:
package org.example.mybatis01.mapper;import org.apache.ibatis.annotations.Mapper;
import org.example.mybatis01.bean.Emp;@Mapper//告诉Mybatis这是一个mapper接口
public interface EmpMapper {Emp getEmpById(Integer id);}
3 相关配置(在配置方法中实现)
利用插件完善
在类名旁边按alt+回车,使用,mybatis创建一个xml文件,在资源目录下创建一个mapper文件夹
<?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="org.example.mybatis01.mapper.EmpMapper">
<!-- select标签代表一次查询 --><select id="getEmpById" parameterType="int" resultType="org.example.mybatis01.bean.Emp">select * from first_tb where id = #{id}</select></mapper>
在properties中补充路径:(告诉mybatis去哪找Mapper文件)
#指定xml文件的位置(mybatis)
mybatis.mapper-locations=classpath:mapper/**.xml
4 测试方法:
直接注入接口 EmpMapper
而无需手动编写实现类,是因为 MyBatis 在底层通过动态代理自动生成了接口的实现类。
MyBatis 通过动态代理生成接口的代理类(如 $Proxy
或 EnhancerByMyBatis
)
package org.example.mybatis01;import org.example.mybatis01.dao.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Mybatis01ApplicationTests {@AutowiredEmpMapper empMapper;@Testvoid contextLoads() {System.out.println(empMapper.getEmpById(1));}}
运行结果: