美文网首页我爱编程
spring+mybatis3套路训练:基本的增删改查实现用户r

spring+mybatis3套路训练:基本的增删改查实现用户r

作者: 在路上phper | 来源:发表于2018-04-01 11:26 被阅读33次

    上节课我们快速的整合了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配置文件方式来完成

    相关文章

      网友评论

        本文标题:spring+mybatis3套路训练:基本的增删改查实现用户r

        本文链接:https://www.haomeiwen.com/subject/siqncftx.html