Mybatis

Mybatis学习总结


注解提示:

@RestController,@Controller

@RequestParam, @RequestBody, @PathVariable

最近需要使用Mybatis提供Restful形式的接口,这里做一点自己的总结,随时修改。

1. URL参数注解

@RequestParam, @RequestBody, @PathVariable三种注解可以提供url参数

@RequestParam, @RequestBody 都POST请求时用的参数,

@PathVariable是从URL中获取参数

代码:

  • 这是@PathVariable作为参数的例子

//访问url为:http://xxx/task/preview/USER_TABLE  --这里USER_TABLE为传入的参数,
//{tableName:.+} 目的是为了满足传入参数可能带有点(.),保证可以正确解析
@RequestMapping(value="/task/preview/{tableName:.+}",method=RequestMethod.GET)
public JsonResponse<Map<String, Object>>previewTaskResult(@PathVariable String tableName){
  if(Strings.isNullOrEmpty(tableName)){
    return new JsonResponse<Map<String, Object>>(false, "wrong");
  }
  ...
}
  • 这是@RequestBody作为参数的例子
//我理解的当传入参数为Map或非基本类型时,使用@RequestBody参数
@RequestMapping(value="/form/index",method=RequestMethod.POST)
public JsonResponse<String> index(@RequestBody Map<String, Object> paramMap){
  if(!paramMap.containsKey("key")){
    return new JsonResponse<String>(false,null,"empty");
  }
  ...
}
  • //这里在添加一个@RequestParam的例子
//我理解,当传入参数为基本数据类型的时候,使用@RequestParam

2. Controller注解

@RestController 与 @Controller的区别

我理解的是:

@RestController 相当于 @Controller + @ResponseBody 结合在一起

//这里为code

注意:

  • @Controller
    • 如果controller的@RequestMapping方法中有需要范围jsp或html页面,需要使用@Controller来注解Controller,这样可以配合视图解析器InternalResourceViewResolve解析页面;
    • 如果方法中还有需要返回Json、Xml或自定义type内容,需要在对应的方法上添加@ResponseBody注解即可;
  • @RestController
    • 返回的就是return的内容,不能返回映射的html内容;

3. Mapper文件

编写Mapping文件时,需要注意

  • 默认情况下,Mapper文件名于Map接口名一样,一般以*Mapper.xml结尾

  • Mapper文件中,

    <mapper namespace="xxx">  //要检查xxx是否与xml文件坐在package包名一样
  • Mapper文件中的SQL语句中,

    1. id要与Mapper接口文件中的方法名一样

    2. parameterType是参数的类型,一个参数时可以如果要指定,需要与方法中参数的数据类型一直,可以省略不写

    3. SQL语法中传入的参数要与方法中参数名一样,如:

      // applyId是方法参数中的参数名称,这里要一致
      <select id="getTaskID" parameterType="String">
      select business_id from apply where id=#{applyId}
      </select>
    4. 一般如果需要对传入的参数做判断,String !=null and String !=”, Number !=null 即可

      //这是一个update操作
      <!--update apply set apply_status=? where id=?-->
      <update id="updateApplyStatus">
      update apply
      <set>
          <if test="applyStatus!=null"> //判断传入的数字参数applyStatus是否为null
              apply_status=#{applyStatus,jdbcType=DECIMAL}
          </if>
      </set>
      <where>
          <if test="applyId !=null and applyId!=''">  //String类型的,判断!=null,!=""
              id=#{applyId,jdbcType=VARCHAR}
          </if>
      </where>
      </update>

4. Mybatis运行报错

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.yo....

运行时遇到上面的错误,找到了下面的内容,一般也就按照下面的提示内容检查

首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常。mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名、xml中的namespace、接口中的方法名称等是否对应。我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误。
出现这个错误时,按以下步骤检查一般就会解决问题:
1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应;
2:检查xml的namespace是否和xml文件的package名称一一对应;
3:检查方法名称是否对应;
4:去除xml文件中的中文注释;
5:随意在xml文件中加一个空格或者空行然后保存。

参考内容

学习的过程中参考了下面的博客内容,

附上地址链接:

http://blog.csdn.net/yzllz001/article/details/54312929
http://www.cnblogs.com/softidea/p/5884772.html
http://www.jianshu.com/p/800fe918cc7a

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值