Mybatis操作数据库(注解+xml两个方式)

发布于:2025-03-24 ⋅ 阅读:(28) ⋅ 点赞:(0)

1.个人回顾

刚刚翻看了一下自己的这个之前写的博客,上一次和这个javaee相关的博客还是去年写的,也就是2024年的12.23号,这个还是一个非常久远的日子,我上个学期还是学习的java,是从10月底开始学习的,之后学习的这个日程就拉的比较满,所以这个进度很快,但是后来做了这个网页端的五子棋对战的这个项目(废弃中),因为这个做到设计棋盘的时候这个技术看不懂,而且这个效果没做出来,所以后来也没做了(其实这个项目里面很多功能还没实现,包括这个网络版本的对战);

然后就继续去学习了这个Mybatis的日志相关的这个内容,包括这个注解是如何去使用的等等吧,但是后来好像有没学了,当时是想着跨专业考验的,去学习了这个自动控制原理的内容,java就没咋学习了;

即使是后面的这个寒假,我也是在作这个鱼皮的项目:一个是用户管理中心(我觉得这个项目适合入手,让我了解了一下这个整体的逻辑,但是我觉得鱼皮的这个课程不是很好,我无法接受的就是最后的一点,他的这个系统做出来之后,非要去添加这个星球的编号这个属性相当于就是去修改这个实体类,这个后果就是所有的东西都需要变,这个就比较恶心,因为我觉得这个需求分析结束之后,这个开发的过程中是不应该去修改我们的这个需求的,所以当他最后去添加这个星球编号的属性的时候,我就真的无法接受,而且我觉得当时最开始在前端的那个umi和vue的时候,也耽误了很长的时间,现在回想起来,那些都是没有必要的,我觉得);

寒假的时候,包括开学之后,都是在学习这个算法(蓝桥杯准备的——,大部分时间在学习是这个数学建模的相关内容,自己创建了一个知识星球,一直在搞这个内容,运营自己的星球,反正就是尝试了很多的这个内容,对于这个鸢尾花书也比较感兴趣,也写了不少的关于这个部分内容的文章;

前段时间准备实习简历,花了三天的时间水了一个SSM项目–论坛系统,虽然好多东西都不会,但是也用自己的云服务器把那个项目上限了,补了好多关于项目里面的技术点,但是毕竟是突击吗嘛,掌握的也不咋地,但是面试的时候老师也没有问相关的内容,我也觉得这个就是一个破网站,都可以用微信交流,谁会去用这个论坛,一点实际意义也没有,可能,只有教学的意义吧~~

但是我昨天和数学建模的线下聊天,我确实真切的体会到,兴趣毕竟是兴趣,我在这个数学建模上面投入再大的时间,他终究无法帮助我找到好工作,工作,吃饭的这个事情还是要看这个java的技术水平,我之前的这个路线上面确实出现了问题;

但是我不后悔,我认为没有什么对与不对,自己喜欢就好,后面还是老老实实的学习java吧,毕竟这个学期是自己学习这个java的最后的一段时间了;

2.关于mybatis注解的说明

注解的话,是我们的springboot项目里面的很重要的一个部分,因为我们在进行这个项目的开发的这个过程里面,经常会使用到很多的这个注解,但是这个毕竟是为了解决我们的Mybatis框架里面的这个查询的问题;

其实解决的这个查询的问题,或者说想要实现这个功能,我们既可以使用这个注解的方式,也是可以使用这个文章后半部分的这个xml的方式;

下面我们使用这个@select这个注解作为我们的案例,进行注解的使用的相关的这个说明,我们的下面的这个方法想要实现的这个功能就是查询我们的这个数据库里面的这个表的用户的相关信息,queryUserList就是我们定义的这个方法,注解后面的这个括号里面的内容实际上就是我们的navicate里面的这个想啊哈寻得语句,我们可以在这个navicate这样的工具里面进行测试之后,没问题的话放到这个注解的内容里面去即可;

这个事进行的数据库表里面的字段内容的查询,其他的几个方法也是类似的;

image-20250323112558024

3.字段和属性不匹配的解决方案

这个是什么情况下会遇到呢?我们为什么会遇到这样的这个问题:

1)java里面主要的这个命名的规范就是驼峰命名;

2)数据库里面的这个字段经常使用我们的这下划线分割(例如这个字段的删除时间,deletetime在java里面就是deleteTime,在我们的数据库里面就是deleteTime,因此代码里面就会出现无法识别;

类似于这个username,password之类的,这个就是很容易对应上的,这样的这个字段一般情况下也不会遇到很大的对应问题,因此这个问题主要是出现在组合的属性字段上面;

3.1第一个方案

第一个解决方式:

查询SQL语句的重新命名,就是我们进行这个select delete_time as deleteTime from userinfo,这样进行重命名,通过这个as把我们的数据库里面的字段和我们的java里面的这个实体类的这个不同之处解决掉这样就可以解决这个不匹配的问题;

其实如果无法识别的结果就是测试的时候打印出来的就是null这样的数据罢了,但是其实在我们的数据库里面是存在这个具体的数据的;

3.2第二个方案

第二个解决方式:定义results这个注解,里面是我们需要进行说明备注的这个注解,column表示的就是这个字段在数据库里面的名字,后面的property就是在我们的实体类里面的名字这样对应上就可以了;

image-20250323115030391

3.3第三个方案

第三个解决的方式:配置文件里面添加上下面的这个自动驼峰转换的配置,就可以自动解决这个两者之间不匹配的问题;

image-20250323115005283

4.xml路径配置

就是在我们的yml配置文件里面去写这个xml路径的地址,也就是这个location

classpath就是对于哦们的这个xml文件的路径进行指定,mapper就是我们的文件夹的名字,*就是通配符,表示使用mapper.xml文件名结尾的文件,我们的这个UserInfoXmlMapper就是符合这个要求的;

如果你的这个mapper里面涉及复杂结构,可以使用**也就是两个星号作为通配符,这个表示的就是两层或者是多层目录的这个情况;

image-20250323123811309

5.xml里面的字段映射

定义相关的方法:在我们的这个mapper里面直接定义即可,下面使用删除和查询作为示例,其实写完方法之后,没有在xml里面去说明,就会报红线,我们点击这个statement就可以默认添加方法;

image-20250323123905115

下面是我们的这个resource下面的这个xml具体的写法和一些相关的这个注意事项;

namespace就是指定这哦xml文件的位置,这个是用的类似于Html双标签的方法,delete和select不同的地方就是多了这个resulttype就是实体类的问题,因为我们返回的是对象,需要说明一下是什么对象,所以自动生成的这个代码里面出现了这个resultType进行指定;

image-20250323123931066

下面的这个就是xml里面的这个字段映射的另外一个实现的方法途径:这个事和我们的注解不同的地方,他这个里面的resultMap就是我们自己定义的,然后我们再这个最上面的需要进行说明,也就是下面的这个代码里面的5-10行,这个第五行里面的id就是我们的这个低21行里面的resultMap的名字,这个type就是我们的实体类里面的位置;

6-9行里面的内容是我们的这个逐渐和属性说明,其中这个主键不是一定要有的,但是其他的几个都是一定需要的;

Map的名字,这个type就是我们的实体类里面的位置;

6-9行里面的内容是我们的这个逐渐和属性说明,其中这个主键不是一定要有的,但是其他的几个都是一定需要的;

image-20250323143504471


网站公告

今日签到

点亮在社区的每一天
去签到