spring+mybatis3套路训练:基本的增删改查实现用户rest api,动态SQL的构建(注解形式)

上节课我们快速的整合了spring和mybatis,基于这些知识点我们进行套路的训练
这节课我们学下动态SQL创建和基本的增删改查
上几节课我们做了用户的Controller(UsersController)我们上节课创建了个接口,里面写入了@Select注解(目前我们讲的都是以注解的方式)后面我们会使用xml的方式,这节课还是以注解的方式利用sql语句结合相关类来完成里面的功能
下面我们模拟下下面这些功能(做下面的小案例)

image.png

首先我们要实现访问GET/users 如果是这样的路径 则获取用户全部列表信息
GET/users/123 获取用户详细信息 POST/users新增用户 DELETE/users删除用户 PUT/users修改用户
我们还是结合users_reg这张表做演示
首先我们把UserInfo实体类中私有属性加入useremail字段 使其和数据库表中的字段一致
image.png

下面我们就使用spring结合mybatis实现一个简单的用户api
下面我们写下代码
首先看下上节课的内容
image.png

上节课我们在UserMapper接口中写了获取用户详细信息的接口(根据用户id)
这节课我们接着写 首先我们写获取用户全部列表接口
代码如下
image.png

以上代码为基本的增删改查代码
上面的代码会有个问题 如果我们想要执行新增操作 可能要返回新增用户id(在mysql中为自增id)这里我们会用到mybatis中的一个特性 叫selectkey
下面是selectkey的简单写法
image.png

其中几个参数说明如下
statement表示如果完成新增操作后,我们的自增id是如何写出来的(这里面是使用mysql的自增id)
keyProperty表示一旦取出来后 这个值(自增id值)放在对应UserInfo的哪一个字段里面进行映射
before:false表示@Selectkey这句话是在Insert语句执行之前还是之后产生的(mysql是之后)
resultType代表@SelectKey返回值的类型
这部分在官方文档的这部分有说明http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
只不过文档中是以xml方式来配置(后面我们在学)
下面我们看下@SelectKey如何做以及如何映射
官方示例代码如下(官方文档搜索SelectKey)是以xml方式的示例
image.png

我们课程中暂时使用注解的方式返回新增用户的id
在UserMapper中加入如下
image.png

接下来我们把刚才讲的rest形式案例给实现了
image.png

在我们UsesController中写了最简单的getUserDetail(通过用户id获取用户详细信息)
下面我们在里面添加新的方法
因为我们案例中有增删改查四个方法 所以我们要在spring配置文件中加入(GET,PUT,Delete,Insert跨域请求方式)
添加如下
image.png

否则前端调用时可能存在问题
下面我们回到UsersController中继续写代码
如下
image.png

image.png

写好代码后我们编译下代码
使用火狐的插件测试下接口
get方式使用浏览器就可以测试
如下
image.png

访问localhost:8080/users
image.png

取出用户所有列表
访问localhost:8080/users/3
image.png

返回用户详细信息
接下来测试下post put 和delete方式
新增用户
image.png

header我们设置成application/json的格式
结果如下
image.png

再看下我们数据库user_reg表
image.png

新增用户成功
接下来测试修改用户(PUT)就测试刚刚新增的userid为8的用户
image.png

点击send
结果如下
image.png

将user_name修改为zhad_new
看下数据库表中结果
image.png

可以看见userid为8的用户名变为zhad_new了
下面测试下删除用户操作
image.png

删除用户id为4的用户
点击send结果如下
image.png

数据库表中如下
image.png

可以看见userid为4的用于删除了
以上就是最简单的用户rest api和mybatis增删改查来完成一个rest api的形式
下面我们学下动态SQL
image.png

官方地址如下
http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
官方给我们的示例是以xml方式演示的 我们这节课依然使用注解的方式来实现
官方示例如下
image.png

可以看出动态SQL就是在我们sql语句上加入if choose等条件语句
上面我们实现了查询用户所有列表的api
在UserMapper接口中打上了@Select注解 写入了sql语句
下面我们模拟一下以下需求(拼凑动态SQL是很重要的)
比如我们之前访问localhost:8080/users 是访问用户所有列表
有时候我们只要获取用户id在某范围内的(比如下面这个需求)
image.png

接下来我们写下代码
有两种写法
1、字符串拼接方式(也就是跟官方很类似的写法 foreach写法)
官方示例如下
image.png

支持我们在参数中传入list 然后每一行就是item进行循环 index就是每次迭代的次数
首先我们在UserMapper中修改返回用户列表接口
image.png

sql拼接时回行的话需要注解下一行前面要有空格 否则sql语句会报错
上面意思为循环传入参数ids集合中的每一项
接下来在UsersController中修改如下
image.png

编译发布下代码
浏览器访问localhost:8080/users
结果如下
image.png

返回了用户id为5和6的列表了
而我们数据库表中数据如下
image.png

可以看出查询出用户id在某一范围内的用户列表了
现在我们的参数是写死的 也就是说我们必定会有一个list传入 然后进行sql语句的拼接
如果传入是null或者空数组 那么这个sql语句就会报错
接下来我们在UsersController中在改下代码
image.png

然后我们在回到UserMapper接口中
其实上面在@Select注解中传入的是一个String数组
所以还可以写成下面的格式 每行以逗号的形式 传入数组 就不需要写很多加号进行拼接
如下
image.png

因为我们要对传入参数做限制
所以还要改下sql语句
需要加入if语句
示例如下
image.png

我们代码如下
image.png

接下来编译下代码
浏览器访问localhost:8080/users结果如下
image.png

没传参数 返回全部列表
传入参数5,6返回如下
image.png

传入参数3
image.png

以上就是我们学的动态SQL配合我们的注解方式来搞定 下节课我们会使用xml配置文件方式来完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,423评论 0 4
  • 昨天打电话,老家的侄女家又添了个老二。老大是儿子,全家喜笑颜开,这老二,全家都盼着是个女儿,结果又是儿子。当然也是...
    中年智慧阅读 185评论 0 0
  • 公平的两个不同起因: 第一,是人们生来就有对公平的偏好、追求,这是人性的一部分。 第二,是人们要追求效率。马粪争夺...
    爷有蔓草阅读 562评论 0 0
  • 丝丝弦音,点点心情。 悠扬的提琴声,青草飘摇着的草原。 颤动的钢丝弦,向天长鸣着的斑马。 晃动的马尾弓,被血染红着...
    暮林西雨阅读 252评论 0 1
  • 花道在中国也可称为插花艺术,其基本精神就是“天、地、人”的和谐统一,这是东方特有的自然观念和哲学观念。9月6日,一...
    文化咖阅读 622评论 0 0