ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

插入Mybatis教学

2022-06-16 17:01:13  阅读:133  来源: 互联网

标签:语句 Mapper 接口 教学 插入 参数 SQL Mybatis id


------------恢复内容开始------------

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,都可以查询出来了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

标签:语句,Mapper,接口,教学,插入,参数,SQL,Mybatis,id
来源: https://www.cnblogs.com/wepter/p/16382614.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有