插入Mybatis教学
------------恢复内容开始------------
1.Mybatis的CRUD
首先第一点要注意:
namespace中的包名称,一定要和mapper接口的包名称要一一对应。
有上面的图可以看出,这里是一个select标签。表示选择和查询的语句。
在标签中有个id。这里的id对应的就是namespace中路径下的Mapper接口里面的方法名。
这里的resultType表示的是SQL语句执行后的返回值。
parameterType表示的是SQL语句查询的参数条件。
我们现在实现第二个方法,根据ID查询用户。我们先在UserMapper类中添加一个方法 getUserById,如下图所示
再在UserMapper.xml中补充一个select标签。id为UserMapper接口中新增的方法名称getUserById。输入参数的类型为int,返回值类型为User类
然后撰写SQL语句。这里的id需要传入参数 使用#{}来获取,里面传入的值就是UserMapper接口中方法的参数名称。
然后在测试类中进行测试得出结果。
注意,在这里一个SQL语句,对应的就是Mapper接口中的一个方法。
现在写insert语句。add一个用户。
首先在接口中撰写一个addUser方法。
然后在Mapper.xml中撰写insert标签。以及标签下的语句。
的在SQL语句中,和上面的通过id查询用户一样,需要传入参数,这里的参数是一个User对象。对象中的属性,可以直接拿出来,作为SQL语句中的参数,这里的id,name,pwd都是User类中的三个属性名称。
完成上述操作之后进行测试,在测试的时候需要注意一个很重要的点,那就是对于增加需要提交事务,如果不提交事务那么数据库增加是无效的。
再写一个修改任务的操作。先是在Mapper接口中写出方法和上面的增加用户类似
然后再写Mapper.xml,注意这里使用的是update标签
然后在test中进行测试。注意使用update标签也必须要提交事务,否则结果无效。
最后还有一个操作删除一个用户
首先我们需要在Mapper.java这个接口中写删除的方法
写完删除的方法后,我们需要到XML中写SQL语句。语法和上述相同,唯一区别是使用了delete标签,并且参数为int类型,这种int类型的参数可以进行省略。
然后使用test测试方法检测。这里一定要注意,增删改查中除了查,其他的操作都要提交事务。
万能的Map,上述的增删改查传参是有弊端的,比如说增加和修改的时候我们是直接传一个User的实体类。如果实体类或者表中的字段参数太多,则我们应该考虑使用万能的Map集合,使用键值对的形式进行传参。
这里我们以addUser为例子。
先在Mapper接口中写好方法,这里我们的方法名是addUser2,传入的参数不再是一个User对象,而是一个Map集合。
然后我们去写Mapper.xml中的SQL语句
这里重点就来了,在SQL语句中可以看出,VALUES后面的参数并不是对应着对象中的属性,而是我们自定义的值,这里的值想怎么写就怎么写,但是要对应着Map集合中的键。键的取名是随意的。这样就大大简化了我们的操作,例如在update操作中,我们可能本来只想修改某个字段的值,如果使用对象作为参数,这我们需要把整个对象传入进去,而现在,我们只需要定义一个map集合就可以自定义的传参了。
最后,我们在test测试的时候,先定义好一个hashmap.然后把键和值都传入到map中。就可以完成上述的操作了。一般在工作中都是使用map集合操作的。
这里PS一个小插曲,在from后面写表名,如果idea连接了数据库,则可以写数据库名之后再点一下写出表名。如果idea没有写表名则直接写表名即可。
跳转到动态SQL中间的慢慢再补充
首先要了解什么是动态SQL,动态SAQL指的是不同的条件下生成不同的SQL语句。
首先我们需要搭建环境
先创建一张表
create table blog(
`id` VARCHAR(50) not null comment '博客id',
`title` varchar(100) not null comment '博客标题',
`author` varchar(30) not null comment '博客作者',
`create_time` datetime not null comment '创建时间',
`view` int(30) not null comment '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8
然后搭建环境
创建一个基础工程
1.导包
2.编写配置文件
3.编写实体类
4.编写实体类对应的Mapper接口和Mapper.XML文件
以上是基础步骤。
生成dp.properties和mybatis-config.xml文件放入resources文件夹中。
在POM中添加lombok依赖
然后在POJO中新建一个Blog类,在其中注意一个小细节,Datetime需要用java.util.Datetime。不能用SQL对应的Datetime
在这里我们createTime和表字段中的create_time是不相同的,我们这里要注意。
在dao包里面添加BlogMapper.java这个类,并且添加BlogMapper.XML这个文件
在BlogMapper.XML中新建头文件
最后在Mybatis-config.xml中,给新建的BlogMapper进行注册。
至此,我们的基本环境算是搭建完毕了。
这里有一个小彩蛋,@SuppressWarnings这个注解。该注解可以抑制警告。不要在写错的代码下面生成一条红线进行提示。
这里 ,我们新建一个IDutils类,在该类中生成获取主键的方法,主键是通过使用UUID进行生成的,具体的代码,如下所示。
先在我们先解决POJO中属性和表中字段不一致的问题,这里还有一个小彩蛋,为什么所有的数据库字段都是中间以下划线连接的呢,因为在ORCAL数据库中,所有的字段名都会变成大写,所以会造成混乱。所以其他的数据库也改用了这种方式。
现在回到正题。
在Mybatis的官网上,
这个配置告诉我们,只要开启这个配置,就开启了自动驼峰命名规则,这样createTime就相当于是被自动转换成的驼峰命名。我们在Mybatis-config.xml的setting标签中设置。这样驼峰命名就自动转换了。
现在我们来写一个插入的方法
然后在XML中写SQL
在Mytest中进行测试:
现在我们需要使用IF进行判断。
SQL语句需要进行如下的改造
此时再进行测试,Map集合中为空,或者添加了titile或者添加了author,都可以查询出来了。
------------恢复内容结束------------
插入Mybatis教学的更多相关文章
- 如何在office2007中插入MathType教学
很多人在安装MathType数学公式编辑器时可能会遇到这个问题,MathType安装好了,可是在office2007的菜单栏中没有MathType这个选项卡,也就是说MathType没有成功加载在of ...
- 批量插入数据(基于Mybatis的实现-Oracle)
前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...
- Mybatis批量更新数据库与批量插入数据库(以oracle为例)
一.批量更新 1.普通写法(一条记录update一次,性能比较差,容易造成阻塞.不建议使用) <update id="updateBatch" parameterType=& ...
- 分批插入数据基于mybatis
DB框架:Mybatis.DataBase:Oracle. ---------------------------------------------------------------------- ...
- Mybatis Dynamic Query 框架整合
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- Mybatis Dynamic Query 2.0 入门
简介 2.0 昨天打包好了,主要是整合了tk.mybatis.mapper 到项目中去,所以和1.x比起来主要多了一个通用mapper.因为作者主要是使用springboot 这里讲一下Springb ...
- Mybatis Dynamic Query 2.0.2
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- SpringBoot入门教程(一)详解intellij idea搭建SpringBoot
最近公司有一个内部比赛(黑客马拉松),报名参加了这么一个赛事,在准备参赛作品的同时,由于参赛服务器需要自己搭建且比赛产生的代码不能外泄的,所以借着这个机会,本地先写了个测试的demo,来把tomcat ...
- JAVA JDBC大数据量导入Mysql
转自https://blog.csdn.net/q6834850/article/details/73726707?tdsourcetag=s_pctim_aiomsg 采用JDBC批处理(开启事务. ...
- oracle模糊查询mysql的区别
https://blog.csdn.net/weixin_38673554/article/details/86503982#_1 oracle与使用mysql的区别 https://www.cnbl ...
随机推荐
- No.1.5
优先级:不同选择器具有不同的优先级,优先级高的选择器样式会覆盖优先级低选择器的样式 优先级公式:!imporant>行内样式>id选择器>类选择器>标签选择器>通配符选择 ...
- adb 测试常用命令
adb 环境安装并配置环境变量 常用命令汇总: 1.查看电脑已经连接的手机设备 adb devices 2.通过logcat日志获取应用APP入口 mac/linux:adb logcat Activ ...
- 前端电商 sku 的全排列算法
需求 需求描述起来很简单,有这样三个数组: let names = ["iPhone",'iPhone xs'] let colors = ['黑色','白色'] let stor ...
- 其他2-while+read按行读取文件
一.三种方法 1.exec读取文件 exec <file sum=0 while read line do cmd done 2. cat读取文件 cat file|while read lin ...
- trzcopy
@echo offcd /d %~dp0setlocal enabledelayedexpansionset aa=伟大的中国!我为你自豪echo 替换前:%aa%echo 替换后:%aa:中国=中华 ...
- Drone自动部署配置文件
.drone.yml 点击查看代码 kind: pipeline # 定义对象类型,还有secret和signature两种类型 type: docker # 定义流水线类型,还有kubernetes ...
- 用Flask+Element+Vue搭建md5、sha加密网站
目录 一.绘制网站页面 1.1 绘制输入框 1.2 绘制表单 二.flask后端接口 三.前后端数据交互 在本章中,我们能学到: 1.Element 中的输入框.按钮.消息提示组件的使用 2.axio ...
- ZSTUOJ刷题⑥:Problem 3535.--模拟简单计算器
3535: 模拟简单计算器 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 4634 Solved: 1652 Description 程序模拟简单运算器 ...
- python机器学习——随机森林算法
背景与原理: 首先我们需要知道集成学习的概念,所谓集成学习,就是使用一系列学习器进行学习,并且通过某种规则把这些学习器的学习结果整合起来从而获得比单个学习器学习效果更好的机器学习方法.这样的方法可以用 ...
- 显式等待(一)WebDriverWait类、until()方法
转自: https://blog.csdn.net/zyooooxie/article/details/84422924