Mybatis

来源:互联网 发布:求生之路2mac视角不动 编辑:程序博客网 时间:2024/06/07 03:19

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

原创粉丝点击