Mybatis的代理模式

我们在使用Mybtis操作数据库的时候,以前经常要先写一个操作数据库的接口,把我们所需要的操作的方法先写出来,然后再去写实现类把方法具体实现,可是学过代理模式的人会知道动态代理可以自动帮我们去生成实现类,然而Mybatis框架里面已经帮我们写好了动态代理,它使用的jdk的动态代理,这样我们可以不要去写实现类如以下的代码

java 复制代码
public interface CatMapper {

    Cat getin(int id);

    List<Cat> getinadd(int id);

    int getdel(int id);


}

我们可以直接这样把接口写好实体类通过Mybatis框架自动生成,测试代码可以直接这样写

java 复制代码
   @Test
    public void test2(){
        SqlSession sqlSession = dupgjl.getSqlSession();
        //通过动态代理机制,创建一个 CatMapper 接口的代理对象
        CatMapper mapper = sqlSession.getMapper(CatMapper.class);
        Cat getin = mapper.getin(5);
        System.out.println(getin);
    }

但我们需要注意一些细节,可能会有人想到,我们就写一个接口然后通过 sqlSession.getMapper

方法来直接调用接口中的方法,那么我们怎么能确定这个对象它去调了这个方法所要运行的sql语句呢,因为我们一直在这里写java代码,没有去考虑配置文件里面的事情,所有这个方法很好用,但它要注意一些事情,就是我们的配置文件需要 规范的填写

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.CatMapper">
    <select id="getin" resultType="org.example.Cat">
        select id, car_num as num, brand, guide_price as price, produce_time as date, car_type as type from t_cat where id = #{c}
    </select>


</mapper>

好了我们来看这个配置文件仔细看会发现我们的id名就是接口中方法的名字,还有namespace是接口的全限定类名带包名,这样我们去调用 mapper.getin()的时候它就会精准的去找到我们的配置文件里面的sql语句。

其他知识点:我们写配置文件的时候resultType=""这个里面要写我们查出来的对象类型,大部分情况下我们要把全限定类名写在上面,但我们可以在Mybatis核心配置文件里面加入这个代码

XML 复制代码
 <typeAliases>
            <!-- 单个类定义别名 -->
            <typeAlias type="org.example.Cat" alias="Cat" />
     
 </typeAliases>

注意:这个配置文件要写要写在 <properties resource/>和<settings>这两个标签后面,很多人因为这个找不到问题在哪里。这样我们在写这个resultType=""的时候就可以直接写类名,还有一种办法就是用扫描的方法

XML 复制代码
 <typeAliases>
            <!-- 或批量扫描包,自动将包下所有类的类名(首字母小写)作为别名 -->
            <package name="org.example" />
        </typeAliases>

通过添加这个标签,同样要求在 <properties resource/>和<settings>这两个标签后面,但我们需要在Cat类上写一个注解

复制代码
@Alias("Cat")设置名字。

sql语句注意我们数据库里面的列名和类属性名字不一样可以用as进行修改、

XML 复制代码
<select id="getin" resultType="Cat">
        select id, car_num as num, brand, guide_price as price, produce_time as date, car_type as type from t_cat where id = #{c}
    </select>

还有一个办法就是驼峰命名

相关推荐
YumiProxy3 小时前
代理IP自动切换避坑指南:会话保持、请求头与错误处理实战
网络·网络协议·tcp/ip·代理模式·ip
天空鸟_时光不老1 天前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
禾小西2 天前
Redis AOF 日志:宕机了,如何避免数据丢失?
java·redis·mybatis
-dzk-2 天前
【动态规划】LC 416.分割等和子集
算法·动态规划·代理模式
天空鸟_时光不老2 天前
09-RAG问答系统落地:从默认分割器的坑到Milvus召回调优
java·人工智能·spring boot·spring·spring cloud·maven·mybatis
西凉的悲伤2 天前
MyBatis 中 association 与 collection 详解
java·mybatis
天空鸟_时光不老2 天前
10-Agent安全隐患与SQL执行层加固
java·数据库·人工智能·sql·spring·maven·mybatis
jianjinwssy3 天前
MyBatis-Plus 从入门到实战:常用功能与核心原理
java·mybatis
ss2733 天前
AI全栈实战 | 3.6-01 数据库与 ORM:学过 MyBatis 再看 SQLAlchemy,才知道“半自动“和“全自动“差在哪
数据库·mybatis
步行cgn5 天前
GoF 代理模式详解
代理模式