上节课我们快速的整合了spring和mybatis,基于这些知识点我们进行套路的训练
这节课我们学下动态SQL创建和基本的增删改查
上几节课我们做了用户的Controller(UsersController)我们上节课创建了个接口,里面写入了@Select注解(目前我们讲的都是以注解的方式)后面我们会使用xml的方式,这节课还是以注解的方式利用sql语句结合相关类来完成里面的功能
下面我们模拟下下面这些功能(做下面的小案例)
首先我们要实现访问GET/users 如果是这样的路径 则获取用户全部列表信息
GET/users/123 获取用户详细信息 POST/users新增用户 DELETE/users删除用户 PUT/users修改用户
我们还是结合users_reg这张表做演示
首先我们把UserInfo实体类中私有属性加入useremail字段 使其和数据库表中的字段一致
下面我们就使用spring结合mybatis实现一个简单的用户api
下面我们写下代码
首先看下上节课的内容
上节课我们在UserMapper接口中写了获取用户详细信息的接口(根据用户id)
这节课我们接着写 首先我们写获取用户全部列表接口
代码如下
以上代码为基本的增删改查代码
上面的代码会有个问题 如果我们想要执行新增操作 可能要返回新增用户id(在mysql中为自增id)这里我们会用到mybatis中的一个特性 叫selectkey
下面是selectkey的简单写法
其中几个参数说明如下
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方式的示例
我们课程中暂时使用注解的方式返回新增用户的id
在UserMapper中加入如下
接下来我们把刚才讲的rest形式案例给实现了
在我们UsesController中写了最简单的getUserDetail(通过用户id获取用户详细信息)
下面我们在里面添加新的方法
因为我们案例中有增删改查四个方法 所以我们要在spring配置文件中加入(GET,PUT,Delete,Insert跨域请求方式)
添加如下
否则前端调用时可能存在问题
下面我们回到UsersController中继续写代码
如下
写好代码后我们编译下代码
使用火狐的插件测试下接口
get方式使用浏览器就可以测试
如下
访问localhost:8080/users
取出用户所有列表
访问localhost:8080/users/3
返回用户详细信息
接下来测试下post put 和delete方式
新增用户
header我们设置成application/json的格式
结果如下
再看下我们数据库user_reg表
新增用户成功
接下来测试修改用户(PUT)就测试刚刚新增的userid为8的用户
点击send
结果如下
将user_name修改为zhad_new
看下数据库表中结果
可以看见userid为8的用户名变为zhad_new了
下面测试下删除用户操作
删除用户id为4的用户
点击send结果如下
数据库表中如下
可以看见userid为4的用于删除了
以上就是最简单的用户rest api和mybatis增删改查来完成一个rest api的形式
下面我们学下动态SQL
官方地址如下
http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
官方给我们的示例是以xml方式演示的 我们这节课依然使用注解的方式来实现
官方示例如下
可以看出动态SQL就是在我们sql语句上加入if choose等条件语句
上面我们实现了查询用户所有列表的api
在UserMapper接口中打上了@Select注解 写入了sql语句
下面我们模拟一下以下需求(拼凑动态SQL是很重要的)
比如我们之前访问localhost:8080/users 是访问用户所有列表
有时候我们只要获取用户id在某范围内的(比如下面这个需求)
接下来我们写下代码
有两种写法
1、字符串拼接方式(也就是跟官方很类似的写法 foreach写法)
官方示例如下
支持我们在参数中传入list 然后每一行就是item进行循环 index就是每次迭代的次数
首先我们在UserMapper中修改返回用户列表接口
sql拼接时回行的话需要注解下一行前面要有空格 否则sql语句会报错
上面意思为循环传入参数ids集合中的每一项
接下来在UsersController中修改如下
编译发布下代码
浏览器访问localhost:8080/users
结果如下
返回了用户id为5和6的列表了
而我们数据库表中数据如下
可以看出查询出用户id在某一范围内的用户列表了
现在我们的参数是写死的 也就是说我们必定会有一个list传入 然后进行sql语句的拼接
如果传入是null或者空数组 那么这个sql语句就会报错
接下来我们在UsersController中在改下代码
然后我们在回到UserMapper接口中
其实上面在@Select注解中传入的是一个String数组
所以还可以写成下面的格式 每行以逗号的形式 传入数组 就不需要写很多加号进行拼接
如下
因为我们要对传入参数做限制
所以还要改下sql语句
需要加入if语句
示例如下
我们代码如下
接下来编译下代码
浏览器访问localhost:8080/users结果如下
没传参数 返回全部列表
传入参数5,6返回如下
传入参数3
以上就是我们学的动态SQL配合我们的注解方式来搞定 下节课我们会使用xml配置文件方式来完成