【框架】115:mybatis的增删改查
今天是刘小爱自学Java的第115天。
感谢你的观看,谢谢你。
mybatis框架的继续学习,安排如下:
-
对昨天学习的内容做个小结,其中补充一个昨天忽视的问题。 -
数据库无外乎就是增删改查,所以使用mybatis做一个完整的crud操作。 -
最后使用动态代理对代码优化,具体底层实现原理就不深究了,大致知道怎么回事就行。
一、mybatis使用步骤回顾
主要是涉及到配置文件的编写,其中又包含核心配置文件和映射文件。
创建mybatis-config.xml核心配置文件。
创建映射文件编写sql语句,可以创建多个,但每创建一个都要在核心配置文件中说明。
构建SqlSessionFactory,再通过该工厂创建SqlSession对象。
总之sqlSession对象是关键,通过它就能执行sql语句了。
而如何找到对应的sql语句并执行?
就需要在参数中说明sql语句对应的id了。
Java实体类和数据表
前面也一直强调过很多次,它们都是一一对应的关系,昨天的代码有一个问题:
在Java中变量名一般采用的是驼峰命名规则,比如userName。
而在数据库中若是多个单词,会用下划线隔开,比如说user_name。
这样的话这两个就没法对应出来,查询结果也会显示userName为空。
昨天我遇到这个问题后的第一反应就是直接将数据库中的字段名给改了,改成username。
但今天看教程的时候也讲到这个问题,解决方法是在sql语句中给字段名取一个别名。
既然讲到了,那就做一个了解吧。
二、mybatis完整的crud
Java经典三层架构中的dao层,也可以叫mapper层,它们其实都是一回事。
映射文件说的也就是这个mapper。
1UserDao接口
数据库四大操作:增删改查
在dao层中编写一个接口,包含这四种操作的方法,其中查询有全表和单条查询。
既然有接口,那么也要有一个和其对应的实现类userDaoImpl,当然该实现类后续可以使用动态代理省略掉,暂且先不考虑。
在写实现类之前,我们要先在mapper配置文件中编写对应的sql语句。
2UserDaoMapper配置文件
老实说,这块就写的有点难受了,其中这个#{字段名}也就相当于预编译中的“?”问号。
查询语句包含查询所有用户和根据条件查询用户,也只有查询语句需要返回值类型。
值得注意的是:
在核心配置文件中要加入该映射文件说明。
3UserDaoImpl实现类
dao层中的代码很纯粹,只用来增删改查。获取sqlSession对象的代码不在dao层中编写。
所以创建构造方法,参数为sqlSession。
也就是说想要使用dao层,就得给传一个sqlSession对象完成初始化。
其中增删改操作中我们需要调用commit方法提交事务,不然数据库中的数据不会修改。
查询不需要事务提交,这也好理解,本身并没有对数据库中的数据进行修改。
4创建测试类
①创建测试类
使用快捷键Ctrl+Shift+T在UserDao接口名上可以快速创建一个对应的测试类。
②设定测试类方法
哪些方法需要测试可以自行选择,其中setUp@Before选择后会创建一个setUp()方法。
这个before是什么意思呢?
就是上述一共有5个要测试的方法,每个方法运行时都会先执行before方法里的内容。
所以将获取sqlSession对象的操作封装到setUp方法中,每次增删改查时会先获取sqlSession对象。
5最后测试下增加操作
测试代码一运行,分析下其流程:
-
set up()方法会优先执行,从而获取SqlSession对象,并将userDao初始化 -
调用该dao层中的增加方法,执行的也就是其实现类中的insertUser()方法。 -
insertUser()方法中也就是利用sqlSession对象进行增加操作。 -
参数为sql语句对应的映射文件id,和需要增加的数据user。 -
这样在数据库中就增加了一条数据。
三、使用动态代理省略实现类
动态代理可以将dao层接口和映射文件直接连接起来,从而省略了dao层实现类的编写。
再次说明这个mapper层也就是dao层,只不过我们以前一直把它叫做dao层。
如何将接口和映射文件连接起来呢?需要满足以下条件:
-
映射文件中的命名空间与Mapper接口的全路径一致,也就是上图中最上面的箭头。 -
映射文件中sql语句的id与Mapper接口的方法名保持一致。
说白了其实就是将接口中的方法和sql语句所在的位置对应起来了。
在满足上面的要求后,就可以使用动态代理省略实现类的编写了,创建测试类:
使用快捷键Ctrl+Shift+T创建测试类。
其实关键就是sqlSession.getMapper()这个方法,其本质就相当于userMapper的实现类。
实现原理可以查看该方法源码,这里就不做拓展了,知道它和通过实现类的方式一样即可。
这样完成之后就可以直接在测试代码中使用userMapper增删改查。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。
本文分享自微信公众号 - 刘小爱(liuxiaoai946)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
玩转Spring中强大的spel表达式!
本文带你玩转spring中强大的spel表达式! Spel概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义。 表达式语言给静态Java语言增加了动态功能。 SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用。 Spel能干什么? 表达式语言一般是用最简单的形式完成最主要的工作,减少我们的工作量。 SpEL支持如下表达式: 一、基本表达式: 字面量表达式、关系,逻辑与算数运算表达式、字符串连接及截取表达式、三目运算及Elivis表达式、正则表达式、括号优先级表达式; 二、类相关表达式: 类类型表达式、类实例化、instanceof表达式、变量定义及引用、赋值表达式、自定义函数、对象属性存取及安全导航表达式、对象方法调用、Bean引用; 三、集合相关表达式: 内联List、内联数组、集合,字典访问、列表,字典,数组修改、集合投影、集合选择;...
- 下一篇
使用Chrome扩展程序生成网页骨架屏
来源:橙红年代 https://juejin.im/post/6856784900775739400 对于依赖接口渲染的页面,在拿到数据之前页面往往是空白的,为了提示用户当前正在加载中,往往会使用进度条、loading图标或骨架屏的方式。对于前两种方案而言,实现比较简单;本文主要研究骨架屏的应用及实现,并给出一种使用Chrome扩展工具快速生成骨架屏的方案。 首先看看效果 先放一个动图展示 掘金首页 百度首页 知乎首页 安装插件后访问任意网页,基本上均可以一键生成骨架屏(由于时间关系,部分节点并没有完全实现,不过目前展示Demo应该是够了 本文所有代码均放在https://github.com/tangxiangmin/web-skeleton-extension上面了,时间关系代码写的比较潦草~ (写完准备提交Chrome应用商店的时候才发现,居然有一个类似的应用:skeleton extention~囧,就当瞎折腾一番了 骨架屏方案 目前有几种比较常见的骨架屏方案 使用图片、SVG实现骨架屏效果,可以让设计在提供页面设计稿的时候同步一份当前页面的骨架屏图片资源,这种方案开发成本较低...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Mario游戏-低调大师作品
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块