曂沅仴駦 发表于 2024-5-19 06:05:23

MyBatis学习总结 + 【手写MyBatis底层机制焦点】

MyBatis条记

MyBatis介绍

MyBatis 是一个长期层框架

[*]前身是ibatis, 在ibatis3.x 时,更名为MyBatis
[*]MyBatis 在java 和sql 之间提供更机动的映射方案
[*]mybatis 可以将对数据表的操纵(sql,方法)等等直接剥离,写到xml 配置文件,实现和java
代码的解耦
[*]mybatis 通过SQL 操纵DB, 建库建表的工作必要程序员完成
相关文档

MyBatis 中文手册、
https://mybatis.org/mybatis-3/zh/index.html
https://mybatis.net.cn/
为什么必要MyBatis?


[*]传统jdbc连接数据库必要本身编写,不同一标准
[*]程序不是OOP的方式编写的
[*]SQL语句是写在程序中,属于硬编码,没有解耦
[*]mybatis 可以将对数据表的操纵(sql,方法)等等直接剥离,写到xml 配置文件,实现和java
代码的解耦
[*]MyBatis 是一个长期层框架所以它同一
[*]MyBatis 是OOP方式操纵数据库


MyBatis案例

实体类
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Monk {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Integer id;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String nickname;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String skill;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String grade;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Double salary;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String birthTime;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Date entry;
}mapper接口

[*]只是一个接口
[*]该接口用于声明操纵monster表的方法
[*]这些方法可以通过注解或者xml文件实现
public interface MonkMapper {

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>void addMonk(Monk monk);
}mapper.xml

[*]这是一个mapper xml 文件
[*]该文件可以去实现对应的接口的方法
[*]namespace 指定该xml文件和哪个接口对应
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.code_study.mapper.MonkMapper">

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><insert id="addMonk" parameterType="Monk">

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>INSERT INTO `monk`

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>(`nickname`,`skill`,`grade`,`salary`,`birthTime`,`entry`)

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>VALUES(#{nickname},#{skill},#{grade},#{salary},#{birthTime},#{entry})
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers></insert>

</mapper>原生的API和注解的方式

Mybatis原生的API调用

添加

@Test
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public void myBatisNativeCrud(){

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Monk monk = new Monk();


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setBirthTime("1999-9-9 10:11:02");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Calendar instance = Calendar.getInstance();


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>instance.set(Calendar.YEAR,2020);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>instance.set(Calendar.MONTH,Calendar.OCTOBER);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>instance.set(Calendar.DAY_OF_MONTH,15);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Date time = instance.getTime();

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setEntry(time);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setGrade("大宗师");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setNickname("法海");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setSalary(200.5);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setSkill("大威天龙");


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>int insert = sqlSession.insert("com.code_study.mapper.MonkMapper.addMonk", monk);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("insert~~" + insert);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("操作成功");
   }删除

<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>@Test
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public void myBatisNativeCrud(){
<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers><mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>int delete = sqlSession.delete("com.code_study.mapper.MonkMapper.deleteMonk", 6);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("delete~~" + delete);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("操作成功");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}修改

@Test
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public void myBatisNativeCrud(){
<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers><mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers> Monk monk = new Monk();


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setBirthTime("1999-9-9 10:11:02");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Calendar instance = Calendar.getInstance();


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>instance.set(Calendar.YEAR,2020);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>instance.set(Calendar.MONTH,Calendar.OCTOBER);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>instance.set(Calendar.DAY_OF_MONTH,15);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Date time = instance.getTime();

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setEntry(time);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setGrade("大宗师");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setNickname("法海");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setSalary(200.5);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setSkill("乾坤大挪移");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>monk.setId(8);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>int update = sqlSession.update("com.code_study.mapper.MonkMapper.updateMonk", monk);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("update~~" + update);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("操作成功");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}查询

@Test
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public void myBatisNativeCrud(){
<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers><mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>List<Monk> monks =

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>sqlSession.selectList("com.code_study.mapper.MonkMapper.findAllMonk");

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>for (Monk monk : monks) {

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("monk= "+ monk);

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>if (sqlSession != null){

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>sqlSession.commit();

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>sqlSession.close();


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}Mybatis注解的方式操纵

添加

/*
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>useGeneratedKeys = true : 表示可以返回自增长的值
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>keyProperty = "id"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>: 表示 自增值对应对象的哪个属性
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>keyColumn = "id"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>: 表示 自增值对应表的哪个字段
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>如果 keyProperty = "id" 和keyColumn = "id"一致,可以只保留 keyProperty = "id"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers> */
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Insert(value = "INSERT INTO `monk` " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>(`nickname`,`skill`,`grade`,`salary`,`birthTime`,`entry`) " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>VALUES(#{nickname},#{skill},#{grade},#{salary},#{birthTime},#{entry})")
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>void addMonk(Monk monk);删除

@Delete(value = "DELETE FROM `monk` WHERE id = #{id}")
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>void deleteMonk(Integer id);修改

@Update(value = " UPDATE `monk` " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>SET `nickname`=#{nickname}, " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>`skill`=#{skill}, " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>`grade`=#{grade}, " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>`salary`=#{salary}, " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>`birthTime`=#{birthTime}, " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>`entry`=#{entry} " +

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>   WHERE id = #{id}")
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>void updateMonk(Monk monk);查询单个

//查询-根据id
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Select(value = "select * from `monk` where id = #{id}")
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Monk getMonkById(Integer id);查询多个

//查询所有的Monster
@Select(value = "<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>select * from `monk`")
List<Monk> findAllMonk();mybatis-config.xml配置文件详解

根本介绍


[*]mybatis 的焦点配置文件(mybatis-config.xml),好比配置jdbc 连接信息,注册mapper
等等
properties 属性


[*]通过该属性,可以指定一个外部的jdbc.properties 文件,引入我们的jdbc 连接信息

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>settings 全局参数界说


[*]是MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
https://img2024.cnblogs.com/blog/3419314/202404/3419314-20240424195841320-867114280.png
typeAliases 别名处理器


[*]别名是为Java 类型命名一个短名字。它只和XML 配置有关,用来减少类名重复的部分
[*]如果指定了别名,我们的MappperXxxx.xml 文件就可以做相应的简化处理
[*]注意指定别名后,照旧可以利用全名的
[*]可以直接指向包,这样包下的所有类都是取类名作为别名

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>   typeHandlers 类型处理器


[*]MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。
[*]用于java 类型和jdbc 类型映射
[*]Mybatis 的映射根本已经满足,不太必要重新界说
[*]这个我们利用默认即可,也就是mybatis 会主动的将java 和jdbc 类型进行转换.
https://img2024.cnblogs.com/blog/3419314/202404/3419314-20240424195920662-60367465.png
environments 环境

resource 注册Mapper 文件:

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>class:接口注解实现

<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>url:外部路径,利用很少,不推荐

<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>package 方式注册

<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>XxxMapper.xml<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>SQL映射文件

根本介绍

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>MyBatis 的真正强大在于它的语句映射(在XxxMapper.xml 配置), 由于它的异常强大, 如
果拿它跟具有雷同功能的JDBC 代码进行对比,你会立即发现省掉了将近95% 的代码。
MyBatis 致力于减少利用成本,让用户能更专注于SQL 代码。
SQL 映射文件常用的几个顶级元素


[*]cache – 该命名空间的缓存配置。
[*]cache-ref – 引用别的命名空间的缓存配置。
[*]resultMap – 形貌怎样从数据库结果集中加载对象,是最复杂也是最强大的元素。
[*]parameterType - 将会传入这条语句的参数的类全限定名或别名
[*]sql – 可被别的语句引用的可重用语句块。
[*]insert – 映射插入语句。
[*]update – 映射更新语句。
[*]delete – 映射删除语句。
[*]select – 映射查询语句。
parameterType(输入参数类型)


[*]传入简单类型,好比按照id 查Monster
[*]传入POJO 类型,查询时必要有多个筛选条件
[*]当有多个条件时,传入的参数就是Pojo 类型的Java 对象
[*]当传入的参数类是String 时,也可以利用${} 来接收参数
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * FROM`monk` WHERE `nickname`LIKE '%${name}%'

[*]传入的是List 时,resultType=“T”类型
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * FROM `monk` WHERE `id` = #{id} OR `nickname` = #{nickname}传入HashMap


[*]HashMap 传入参数更加机动,好比可以机动的增长查询的属性,而不受限于Monster 这
个Pojo 属性本身
[*]parameterType="map"
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * FROM`monk` WHERE `id` > #{id} AND `salary` > #{salary}传入和返回HashMap


[*]parameterType="map"
[*]resultType="map"

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * FROM`monk` WHERE `id` > #{id} AND `salary` > #{salary}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>resultMap(结果集映射)

根本介绍

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>当实体类的属性和表的字段名字不一致时,我们可以通过resultMap 进行映射,从而屏蔽
实体类属性名和表的字段名的不同.(作用)
案例

public interface UserMapper {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//查询所有的User<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public List findAllUser();}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers> SELECT * FROM `user`动态SQL语句

根本介绍


[*]在一个现实的项目中,sql 语句往往是比较复杂的
[*]为了满足更加复杂的业务需求,MyBatis 的筹划者,提供了动态天生SQL 的功能。
[*]动态SQL 是MyBatis 的强大特性之一
[*]利用JDBC 或别的类似的框架,根据不同条件拼接SQL 语句非常贫苦,比方拼接时要
[*]确保不能忘记添加必要的空格,还要注意去掉列表末了一个列名的逗号等
[*]SQL 映射语句中的强大的动态SQL 语言, 可以很好的办理这个问题.
[*]最重要的是办理一些普通的SQL无法处理的带有复杂逻辑的语句
动态SQL 常用标签

动态SQL 提供了如下几种常用的标签,类似我们Java 的控制语句:

[*]if [判定]
[*]where [拼接where 子句]
[*]choose/when/otherwise [类似java 的switch 语句, 注意是单分支]
[*]foreach [类似in ]
[*]trim [更换关键字/定制元素的功能]
[*]set [在update 的set 中,可以保证进入set 标签的属性被修改,而没有进入set 的,保
持原来的值]
if [判定]


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>SELECT * FROM `monk` WHERE 1 = 1
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>ANDid > #{id}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>where [拼接where 子句]


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>SELECT * FROM `monk`
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>AND id > #{id}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>AND `nickname` = #{nic kname}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>choose/when/otherwise [类似java 的switch 语句, 注意是单分支]

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>select * from `monk`
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>where nickname = #{nickname}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>where id = #{id}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>where salary > 10000
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>foreach [类似in ]


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers> SELECT * FROM `monk`
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>id IN
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>#{id}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>trim [更换关键字/定制元素的功能]

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>SELECT * FROM `monk`
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>ZY id > #{id}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>AND `nickname` = #{nickname}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>set [在update 的set 中,可以保证进入set 标签的属性被修改,而没有进入set 的,保
持原来的值]

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>UPDATE `monk`
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>`grade` = #{grade},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>`skill` = #{skill},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>`nickname` = #{nickname},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>`grade` = #{grade},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>`salary` = #{salary},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>`birthTime` = #{birthTime},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>`entry` = #{entry},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>WHERE id = #{id}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>映射关系一对一

根本介绍


[*]项目中1 对1 的关系是一个根本的映射关系,好比:Person(人) --- IDCard(身份证
映射方式


[*]通过配置XxxMapper.xml 实现1 对1 [配置方式]
[*]通过注解的方式实现1 对1 [注解方式]
映射方式一:配置Mapper.xml实现


[*]通过配置XxxMapper.xml 的方式,实现级联查询,通过person 可以获取到对应的idencard 信息
接口:
public interface PersonMapper {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过Person 的id 获取到Person,包括这个Person 关联的IdenCard 对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Person getPersonById(Integer id);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过Person 的id 获取到Person,包括这个Person 管理的IdenCard 对象,方式2<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Person getPersonById2(Integer id);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过Person 的id 获取到Person<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Person getPerson(Integer id);}public interface IdenCardMapper {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//根据id 获取到身份证序列号<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>IdenCard getIdenCardById(Integer id);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过IdenCard 的id 获取到Person<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>IdenCard getIdenCardAndPerson(Integer id);}mapper.xml:
通过person 可以获取到对应的idencard 信息
方式一 :多表联查


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>select *<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>from `person` join `idencard` on person.card_id = idencard.id<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>where person.id = #{id}方式二:分解成单表操纵


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * FROM `person` where `id` = #{id}映射方式二:注解实现

public interface PersonMapperAnnotation {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Select(value = "SELECT * FROM `person` where `id` = #{id}")<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Results({
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(id = true,property = "id",column = "id"),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(property = "name",column = "name"),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(property = "card",column = "card_id",
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>one = @One(select = "com.code_study.mapper.IdenCardMapperAnnotation.getIdenCardById"))<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>})<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Person getPersonById(Integer id);}



映射关系多对一

根本介绍


[*]项目中多对1 的关系是一个根本的映射关系, 多对1, 也可以理解成是1 对多.
[*]User --- Pet: 一个用户可以养多只宠物
[*]Dep ---Emp : 一个部门可以有多个员工
映射方式


[*]通过配置XxxMapper.xml 实现1 对1 [配置方式]
[*]通过注解的方式实现1 对1 [注解方式]
映射方式一:配置Mapper.xml实现

接口:
public interface UserMapper {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过id 获取User 对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public User getUserById(Integer id);}public interface PetMapper {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过User 的id 来获取pet 对象,可能有多个,因此利用List 接收<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public List getPetByUserId(Integer userId);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过pet 的id 获取Pet 对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public Pet getPetById(Integer id);}mapper.xml

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/> SELECT * FROM `mybatis_pet` WHERE user_id = #{userId}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>select * from `mybatis_pet` where id = #{id}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * from `mybatis_user` WHERE id = #{id}说明:


[*]多对一时,resultMap中 collection 标签表示集合
[*]在 collection 标签中 属性 ofType 表示集合中存放的数据类型
[*]双向多对一时,toString应该去掉,避免栈溢出
[*]resultMap中 select 标签表示复用这个目的方法,推荐利用,这样提高代码的复用性,将多表拆解成单表
映射方式二:注解实现

public interface UserMapperAnnotation {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过id 获取User 对象
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/> @Select(value = "SELECT * from `mybatis_user` WHERE id = #{id}")<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Results({
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(id = true,property = "id",column = "id"),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(property = "name",column = "name"),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(property = "pets",column = "id",
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>many = @Many(select = "com.code_study.mapper.PetMapperAnnotation.getPetByUserId"))<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>})<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public User getUserById(Integer id);}public interface PetMapperAnnotation {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过User 的id 来获取pet 对象,可能有多个,因此利用List 接收<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Select(value = "SELECT * FROM `mybatis_pet` WHERE user_id = #{userId}")<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Results(id = "PetResultMap",value = {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(id = true,property = "id",column = "id"),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(property = "nickname",column = "nickname"),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>@Result(property = "user",column = "user_id",
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>one = @One(select = "com.code_study.mapper.UserMapperAnnotation.getUserById"))<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>})<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>List getPetByUserId(Integer userId);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//通过pet 的id 获取Pet 对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Select(value = " select * from `mybatis_pet` where id = #{id}")<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@ResultMap(value = "PetResultMap")<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Pet getPetById(Integer id);}

[*]@Results(id = "PetResultMap"...)可以给@Results设置一个 id 用来复用代码
[*]在下面就进行了@Results 的复用
//通过pet 的id 获取Pet 对象   <mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>@Select(value = " select * from `mybatis_pet` where id = #{id}") <mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>@ResultMap(value = "PetResultMap")<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Pet getPetById(Integer id);MyBatis缓存

根本介绍


[*]MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。
相关文档

一级缓存


[*]默认情况下,mybatis 是启用一级缓存的/本地缓存/local Cache,它是SqlSession 级别的。
[*]同一个SqlSession 接口对象调用了雷同的select 语句,会直接从缓存里面获取,而不是再
去查询数据库
一级缓存原理图

https://img2024.cnblogs.com/blog/3419314/202404/3419314-20240424195945540-447627920.png
一级缓存失效的情况


[*]关闭sqlSession 会话后, 再次查询,会到数据库查询
[*]当实行sqlSession.clearCache() 会使一级缓存失效
[*]当对同一个monster 修改,该对象在一级缓存会失效
二级缓存


[*]二级缓存和一级缓存都是为了提高检索服从的技能
[*]最大的区别就是作用域的范围不一样,一级缓存的作用域是sqlSession 会话级别,在一次
会话有效,而二级缓存作用域是全局范围,针对不同的会话都有效
二级缓存原理图

https://img2024.cnblogs.com/blog/3419314/202404/3419314-20240424195958467-274233760.png
二级缓存配置

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>1.在mybatis-config.xml中 全局性的开启缓存
​<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>
​<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>

​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>2.利用二级缓存时entity 类实现序列化接口(serializable),由于二级缓存可能利用到序列化技能
​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers><mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>*大部分情况不必要这样配置,只是某些第三方缓存库必要序列化到磁盘!
​<mappers>
<mappers>
<mappers>
        <package name="com.cody_study.mapper"/>
</mappers><mapper url="file:///D:\yy\kk\yy\MOnsterMapper.xml" />
</mappers><mapper />
</mappers>3.再对应的XxxMapper.xml中设置二级缓存的计谋

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>   SELECT * FROM `monster` WHERE id = #{id}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>注意事项


[*]表示创建了FIFO 的计谋,每隔30 秒刷新一次,最多存放360 个对象而且返回的对象被认为是只读的。
[*]eviction:缓存的回收计谋
[*]flushInterval:时间隔断,单位是毫秒,
[*]size:引用数目,内存大就多配置点,要记住你缓存的对象数目和你运行环境的可用内存
[*]资源数目。默认值是1024
[*]readOnly:true,只读
四大计谋

[*]LRU – 最近最少利用:移除最长时间不被利用的对象。
[*]FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
[*]SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
[*]WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象
怎样禁用二级缓存

方式一


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>方式二

在XxxMapper.xml文件中不配做
方式三

直接在XxxMapper.xml文件对应的方法上 设置属性 useCache=false

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>   SELECT * FROM `monster`<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>一级缓存和二级缓存的实行顺序


[*]缓存实行顺序是:二级缓存-->一级缓存-->数据库
[*]当我们关闭了一级缓存的时候,如果配置了二级缓存,那么一级缓存的数据会放入二级缓存中
[*]不会出现一级缓存和二级缓存中有同一个数据。由于二级缓存(数据)是在一级缓存关闭之后才有的
第三方缓存框架---EhCache

根本介绍


[*]EhCache 是一个纯Java 的缓存框架,具有快速、精干等特点
[*]MyBatis 有本身默认的二级缓存(前面我们已经利用过了),但是在现实项目中,往往利用
的是更加专业的第三方缓存产品作为MyBatis 的二级缓存,EhCache 就是非常优秀的缓存
产品
配置利用第三方缓存框架

添加依赖


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>net.sf.ehcache
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>ehcache-core
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>2.6.11
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>org.slf4j
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>slf4j-api
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>1.7.25
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>org.mybatis.caches
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>mybatis-ehcache
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>1.2.1<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>在XxxMapper.xml文件中启用EhCache


<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/> SELECT * FROM `monster` WHERE id = #{id}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>怎样理解EhCache 和MyBatis 缓存的关系


[*]MyBatis 提供了一个接口Cacheorg.apache.ibatis.cache.Cache
[*]只要实现了该Cache 接口,就可以作为二级缓存产品和MyBatis 整合利用,Ehcache 就
是实现了该接口
[*]MyBatis 默认情况(即一级缓存)是利用的PerpetualCache 类实现Cache 接口的,是焦点类
[*]当我们利用了Ehcahce 后,就是EhcacheCache 类实现Cache 接口的,是焦点类.
[*]缓存的本质就是Map
手写MyBatis底层机制

https://img2024.cnblogs.com/blog/3419314/202404/3419314-20240424200104461-1091369529.png
读取配置文件,得到数据库连接

思绪


[*]引入必要的依赖
[*]必要写一个本身的config.xml文件,在里面配置一些信息,driver,url ,password,username
[*]必要编写Configuration类,对 本身的config.xml文件 进行解析,得到一个数据库连接
实现


[*]引入必要的依赖

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>dom4j
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>dom4j
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>1.6.1
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>mysql
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>mysql-connector-java
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>5.1.49
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>org.projectlombok
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>lombok
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>1.18.4
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>junit
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>junit
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>4.12
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>

[*]必要写一个本身的config.xml文件,在里面配置一些信息,driver,url ,password,username

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>

[*]必要编写Configuration类,对 本身的config.xml文件 进行解析,得到一个数据库连接
public class ZyConfiguration {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//属性 类加载器<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private ClassLoader classLoader =
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>ClassLoader.getSystemClassLoader();<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//读取xml文件信息并处理<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public Connection build(String resource) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Connection connection = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//加载配置文件,获取对应的InputStream流
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>InputStream resourceAsStream =
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>classLoader.getResourceAsStream(resource);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//解析xml文件
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>SAXReader reader = new SAXReader();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>try {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Document document = reader.read(resourceAsStream);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Element root = document.getRootElement();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//解析rootElement
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>System.out.println("root= "+root);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return evalDataSource(root);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>} catch (DocumentException e) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//解析xml文件 并返回一个连接<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Connection evalDataSource(Element node) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Iterator property = node.elementIterator("property");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String driverClassName = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String url = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String username = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String password = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//遍历node子节点 获取属性值
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>while(property.hasNext()){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Element pro = (Element)property.next();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String name = pro.attributeValue("name");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String value = pro.attributeValue("value");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//判定是否得到了name 和 value
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>if (name == null || value == null){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>throw new RuntimeException("property 节点没有设置name 或 value属性");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>switch (name){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>case "driverClassName":
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>driverClassName = value;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>break;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>case "url":
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>url = value;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>break;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>case "username":
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>username = value;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>break;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>case "password":
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>password = value;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>break;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>default:
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>throw new RuntimeException("属性名没有匹配到");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Connection connection = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>try {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Class.forName(driverClassName);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>connection = DriverManager.getConnection(url, username, password);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>} catch (Exception e) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return connection;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}}编写实行器,输入SQL语句,完成操纵

思绪


[*]必要写一个实体类,对应monster表
[*]编写接口executor
[*]实现接口,编写本身的实行器
[*]必要一个 本身的Configuration类 返回连接,通过连接对数据库进行操纵
实现


[*]必要写一个实体类,对应monster表
@Setter@Getter@ToString@NoArgsConstructor@AllArgsConstructorpublic class Monster {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Integer id;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Integer age;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String name;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String email;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Date birthday;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private double salary;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Integer gender;}

[*]编写接口executor
public interface Executor {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>publicT query(String statement,Object parameter);}

[*]实现接口,编写本身的实行器
public class ZyExecutor implements Executor{<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private ZyConfiguration zyConfiguration = new ZyConfiguration();<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Override<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>publicT query(String sql, Object parameter) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Connection connection = getConnection();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//查询返回的结果集
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>ResultSet set = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>PreparedStatement pre = null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>try {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>pre = connection.prepareStatement(sql);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//设置参数,如果参数多,用数组处理
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>pre.setString(1, parameter.toString());
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>set = pre.executeQuery();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//把set数据封装到对象 -- monster
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Monster monster = new Monster();//简化处理 认为返回的结果就是一个monster记录
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//遍历结果集
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>while(set.next()){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setId(set.getInt("id"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setName(set.getString("name"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setEmail(set.getString("email"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setAge(set.getInt("age"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setGender(set.getInt("gender"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setBirthday(set.getDate("birthday"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>monster.setSalary(set.getDouble("salary"));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return (T)monster;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>} catch (SQLException e) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}finally {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>try {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>if (set != null) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>set.close();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>if (pre != null) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>pre.close();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>if (connection != null) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>connection.close();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>} catch (Exception e) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>throw new RuntimeException(e);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public Connection getConnection(){//Configuration类 返回连接,通过连接对数据库进行操纵
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/> return zyConfiguration.build("zy_mybatis.xml");<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}}

[*]必要一个 本身的Configuration类 返回连接,通过连接对数据库进行操纵
将Sqlsession封装到实行器

思绪


[*]必要写本身的Sqlsession类,它是搭建连接和实行器之间的桥梁,里面封装有 实行器 和 配置文件 以及 操纵DB 的具体方法
[*]写一个selectOne方法 ,SelectOne() 返回一条记录,一条记录对应一个Monster对象
实现


[*]必要写本身的Sqlsession类,它是搭建连接和实行器之间的桥梁,里面封装有 实行器 和 配置文件 以及 操纵DB 的具体方法
public class ZySqlSession {//搭建连接和实行器之间的桥梁<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//实行器<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Executor executor = new ZyExecutor();<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//配置<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private ZyConfiguration zyConfiguration = new ZyConfiguration();<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//操纵DB 的具体方法<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//SelectOne 返回一条记录-对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>publicT selectOne(String statement,Object parameter){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return executor.query(statement,parameter);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}}

[*]写一个selectOne方法 ,SelectOne() 返回一条记录,一条记录对应一个Monster对象
//操纵DB 的具体方法<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//SelectOne 返回一条记录-对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>publicT selectOne(String statement,Object parameter){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return executor.query(statement,parameter);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}https://img2024.cnblogs.com/blog/3419314/202404/3419314-20240424200124172-2086996247.png
开发Mapper接口和Mapper.xml

思绪


[*]编写MonsterMapper接口,里面有方法getMonsterById(Integer id)根据id返回一个monster对象
[*]在resources下编写对应的monsterMapper.xml(简化:由于在resources 编译时会在类路径下比较好写)
[*]monsterMapper.xml 编写具体的sql语句,并指定语句类型,id,resultType(和原生Mybatis一样)
实现


[*]编写MonsterMapper接口,里面有方法getMonsterById(Integer id)根据id返回一个monster对象
public interface MonsterMapper {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public Monster getMonsterById(Integer id);}

[*]在resources下编写对应的monsterMapper.xml(简化:由于在resources 编译时会在类路径下比较好写)
[*]monsterMapper.xml 编写具体的sql语句,并指定语句类型,id,resultType(和原生Mybatis一样)

<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>SELECT * FROM monster WHERE id = ?<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>开发MapperBean,可以和Mapper接口相映射

思绪


[*]开发 Function类 ,用于记录对应的Mapper的方法信息,好比sql类型,方法名,实行的sql语句,返回类型,入参类型
[*]开发 MapperBean类,记录接口信息和接口下的所有方法
[*]Function类 对应 monsterMapper.xml中的信息
[*]MapperBean类 对应 MonsterMapper 接口中的信息
实现


[*]开发 Function类 ,用于记录对应的Mapper的方法信息,好比sql类型,方法名,实行的sql语句,返回类型,入参类型
//对应 monsterMapper.xml中的信息public class Function {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String sqlType;//sql类型,好比select,insert,update,delete<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String funcName;//方法名<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String sql;//实行的sql语句<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private Object resultType;//返回类型<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String parameterType;//入参类型}

[*]开发 MapperBean类,记录接口信息和接口下的所有方法
//对应 MonsterMapper 接口中的信息public class MapperBean {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String interfaceName;//接口名<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>接口下的所有方法<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private List functions;}

[*]Function类 对应 monsterMapper.xml中的信息
[*]MapperBean类 对应 MonsterMapper 接口中的信息
在Configuration中解析MapperXML获取MapperBean对象

思绪


[*]在Configuration 添加方法readMapper(String path)
[*]通过 path 读取接口对应的Mapper方法
[*]保存接口下所有的方法信息
[*]封装成 MapperBean对象
实现


[*]在Configuration 添加方法readMapper(String path)
[*]通过 path 读取接口对应的Mapper方法
[*]保存接口下所有的方法信息
[*]封装成 MapperBean对象
//解析MapperXML获取MapperBean对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//path = xml的路径+文件名 是从类的加载路径计算的(如果放在resource目录下 之间传xml文件名即可)<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public MapperBean readMapper(String path) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>MapperBean mapperBean = new MapperBean();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>InputStream resourceAsStream = classLoader.getResourceAsStream(path);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>SAXReader reader = new SAXReader();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>try {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Document document = reader.read(resourceAsStream);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Element root = document.getRootElement();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>String namespace = root.attributeValue("namespace");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>mapperBean.setInterfaceName(namespace);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>List list = new ArrayList();//保存接口下所有的方法信息
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//得到root的迭代器
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>Iterator iterator = root.elementIterator();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>while(iterator.hasNext()){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Element e = (Element)iterator.next();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>String sqlType = e.getName().trim();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>String sql = e.getText().trim();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>String funcName = e.attributeValue("id");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>String resultType = e.attributeValue("resultType");
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//ResultType 返回的是一个Object对象 ->反射
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Object instance = Class.forName(resultType).newInstance();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//封装 function 对象
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Function function = new Function();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>function.setSql(sql);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>function.setSqlType(sqlType);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>function.setFuncName(funcName);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>function.setResultType(instance);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//将封装好的function对象 放入 list中
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>list.add(function);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>mapperBean.setFunctions(list);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>} catch (Exception e) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>throw new RuntimeException(e);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return mapperBean;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}动态代理Mapper方法

思绪


[*]在SqlSession中添加方法 getMapper 输入一个Class类型,返回mapper的动态代理对象
[*]编写动态代理类 实现 InvocationHandler 接口
[*]取出mapperBean的functions 遍历
[*]判定 当前要实行的方法和function.getFunctionName是否一致
[*]调用方法返回 动态代理对象
[*]编写SqlSessionFactory 会话工厂,可以返回SqlSession
实现


[*]编写动态代理类 实现 InvocationHandler 接口
[*]在SqlSession中添加方法 getMapper 输入一个Class类型,返回mapper的动态代理对象
//返回mapper的动态代理对象<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>publicT getMapper(Class clazz){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return (T) Proxy.newProxyInstance(
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>clazz.getClassLoader(),
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>new Class[]{clazz},
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>new ZyMapperProxy(zyConfiguration,clazz,this));<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}

[*]取出mapperBean的functions 遍历
[*]判定 当前要实行的方法和function.getFunctionName是否一致
[*]调用方法返回 动态代理对象
public class ZyMapperProxy implements InvocationHandler {<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private ZySqlSession zySqlSession;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private String mapperFile;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>private ZyConfiguration zyConfiguration;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public ZyMapperProxy(ZySqlSession zySqlSession, Class clazz, ZyConfiguration zyConfiguration) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>this.zySqlSession = zySqlSession;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>this.zyConfiguration = zyConfiguration;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>this.mapperFile = clazz.getSimpleName() + ".xml";<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//当实行Mapper接口的代理对象方法时,会实行到invoke方法<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>@Override<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>MapperBean mapperBean = zyConfiguration.readMapper(this.mapperFile);
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//判定是否为当前xml文件对应的接口
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>if (!method.getDeclaringClass().getName().equals(mapperBean.getInterfaceName())){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return null;
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//取出mapperBean的functions
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>List functions = mapperBean.getFunctions();
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>//判定当前的mapperBean 解析对应的MapperXML后,有方法
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>if (null != functions || 0 != functions.size()){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>for (Function function : functions) {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>//当前要实行的方法和function.getFunctionName
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>if (method.getName().equals(function.getFuncName())){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>if ("SELECT".equalsIgnoreCase(function.getSqlType())){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return zySqlSession.selectOne(function.getSql(),String.valueOf(args));
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/><mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>}
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return null;<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}}

[*]编写SqlSessionFactory 会话工厂,可以返回SqlSession
public class ZySqlSessionFactory {
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>public static ZySqlSession open(){
<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers><properties resource="jdbc.properties"/>return new ZySqlSession();<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>}}测试

@Testpublic void openSession(){<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>ZySqlSession zySqlSession = ZySqlSessionFactory.openSession();<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>System.out.println("zySqlSession= "+zySqlSession);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>MonsterMapper mapper = zySqlSession.getMapper(MonsterMapper.class);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>Monster monster = mapper.getMonsterById(1);<mappers>
    <mapper resource="com/code_study/mapper/MonsterMapper.xml"/>
</mappers>System.out.println("monster= "+monster);}本文学习内容来自韩顺平老师的课程
仅供个人参考学习

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MyBatis学习总结 + 【手写MyBatis底层机制焦点】