mybatis(4) 代理机制以及小技巧

mybatis(4) 代理机制以及小技巧

在上一篇mybtis的web项目中,我们最后有一个问题没有解决,就是dao的实现类,其代码很类似,只是具体执行的sql语句不同,那么我们是否可以只编写dao的接口,而不用编写其具体实现类呢?
当然可以,mybaits已经二次封装了javassist来帮助我们自动生成实现类。
但是如果我们要使用这一机制,就要注意:
。这有助于我们使用javassist这一辅助工具生成代理类是其可以帮助我们自动去实现接口的方法,并且调用我们自己编写的sql语句。

1、首先 导入mybatis mysql logback junit依赖


2、写pojo 类


3、写mapper接口


4、写工具类 获得session


5、写mapper.xml文件


6、写mybaits.xml



比如 我们需要根据汽车类型来查询汽车



如果使用${}
则会报错 在这里插入图片描述

如果使用#{}在这里插入图片描述
则正确.



使用#{}
在这里插入图片描述

错误,因为会先预编译,在赋值,这时候 会将其作为一个字符串常量传进去,但是是错误的 decs 是一个关键字,加上’’会变成字符串常量,sql语句会出错。
使用${}
在这里插入图片描述

此时是拼接,正确。

比如我们每次都returnType 上 都需要写全限定类名,很麻烦,我们可以采用别名机制。
在这里插入图片描述

在mybatis.xml文件中 配置
有三种方式
①对某个类 自己起别名
②对某个类采用默认别名机制
③对包下的类都采用默认别名机制


SQL映射文件的配置方式包括四种:
● resource:从类路径中加载
● url:从指定的全限定资源路径中加载
● class:使用映射器接口实现类的完全限定类名
● package:将包内的映射器接口实现全部注册为映射器



有个前提:
如果使用这种方式必须满足以下条件:
● SQL映射文件和mapper接口放在同一个目录下。
● SQL映射文件的名字也必须和mapper接口名一致。gpt 教程
在这里插入图片描述
虽然在不同的地方,其实都是在根路径下,java和resources打包后最后都在同一个目录下。
在这里插入图片描述

将包内的映射器接口实现全部注册为映射器 ,这种方式条件和第三种一样。


注意
在resources下只能创建目录 不能创建包
不能使用com.cky.Mapper 的方式 这样其实还是一个一级目录。
应该使用com/cky/Mapper 这是创建多级目录。

比如我们的mybatis配置文件和 xxxMapper.xml,我们可以配置模板文件,方便创建。
举例:
在这里插入图片描述
在这里插入图片描述

不需要我们自己设置主键 而是mybaits帮我们自动生成 并且返回给我们。



在这里插入图片描述
虽然我们插入的car id为null,但是当我们再次获取输出car时我们可以看到其id是有值的,
useGeneratedKeys=“true” 表示我们需要生成的主键值,keyProperty=“id” 代表将生成的主键值赋给id这个属性。此时当我们插入时,就会将自动生成的主键值赋给id,如果为false,则我们输出时car的id为null,虽然数据库中car的id是有值的,但是由于没有回显,输出就为null。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/279564.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月14日 下午12:35
下一篇 2026年3月14日 下午12:35


相关推荐

关注全栈程序员社区公众号