自我总结,欢迎拍砖!

目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类。

原因:当查询的字段为空值时,mybatis会返回null,用基础类型接收则会出现异常,但是用包装类就把这个问题规避了。

一.读数据环境准备:

创建student表(无主键):

  create table student(id int,name varchar(20),idCard bigint,classNo varchar(10));

  insert into student set id=1,name='007';

  insert into studetn set name ='911911';

二.代码:

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.core.mapper.StudentMapper">
<select id="getStudent" resultType="com.core.entity.Student">
select id,name,idCard,classNo from student where id = #{id}
</select> <select id="getIdCard" resultType="Long">
select idCard from student where id = #{id}
</select> <select id="getId" resultType="Integer">
select id from student where name = #{name}
</select>
</mapper>

StudentMapper.java

package com.core.mapper;

import org.apache.ibatis.annotations.Param;

import com.core.entity.Student;

public interface StudentMapper {
public Student getStudent(@Param("id") int id);
public Long getIdCard(@Param("id") int id);
public Integer getId(@Param("name") String name); }

测试类StudentTest

package com.core.test;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import com.core.common.SessionFactory;
import com.core.entity.Student;
import com.core.mapper.StudentMapper; public class StudentTest { public static void main(String[] args) {
SqlSession session =SessionFactory.getSqlSession();
try {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student blog = mapper.getStudent(1);
System.out.println(blog.getName());
} finally {
session.close();
} } //通过ID获取IdCard
@Test
public void TestGetIdCard(){
SqlSession session =SessionFactory.getSqlSession();
try {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Long idCard = mapper.getIdCard(1);
} finally {
session.close();
}
} //通过name获取Id
@Test
public void TestGetIdByName(){
SqlSession session =SessionFactory.getSqlSession();
try {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Integer id = mapper.getId("911911");
} finally {
session.close();
}
} }

3.分析:

1.若StudentMapper.java和StudentMapper.xml中getIdCard的返回值类型为long类型,此时传递的参数id为1,查询idCard的记录为null,long 类型无法接受null值,所以会报异常,若均如上方的代码中改成包装类Long,则可以接受null值。

2.若StudentMapper.java和StudentMapper.xml中getId的返回值类型为int类型,此时传递的参数name为'911911',查询id的记录为null,int 类型无法接受null值,所以会报异常,若均如上方的代码中改成包装类Integer,则可以接受null值。

总结:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类。

PS:在Mapper.java中尽量用@Param这种参数传递方式和Mapper.xml对相对应。这样就不用在Mapper.xml中配置属性parameterType了

mybatis不可忽略的细节的更多相关文章

  1. mybatis的一些小细节

    Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...

  2. 聊聊自学大数据flume中容易被人忽略的细节

    ​前言:老刘不敢保证说的有多好,但绝对是非常良心地讲述自学大数据开发路上的一些经历和感悟,保证会讲述一些不同于别人技术博客的细节. 01 自学flume的细节 老刘现在想写点有自己特色的东西,讲讲自学 ...

  3. html5一些容易忽略的细节

    最近由于经常写前端,所以系统性的看了一下html5页面的基础信息,虽然以前写了很久的html代码,但是其中的一些细节还是容易被忽略,所以这里一起整理一下. 在html5中,空元素结尾处的空格和斜杠是可 ...

  4. Mybatis学习的一些细节

    一.mybatis 基本配置 最近几天一直在学习mybatis,看了一些源码,本文讲述mybatis的一些基本配置和基本的用法和注意到一些细节.个人时间和精力有限,本文属于流水账类型,不成体系,算是自 ...

  5. html中不要忽略一些细节

    1. img必备和可选的参数都有写了上了,但是必备参数里的一个值alt没写(其实一些大型的专业门户网站其实也是有存在一些小问题的,只要我们细心一 点就能发现).虽然这样alt不写,在页面中也不会有任何 ...

  6. mybatis使用注意的细节

    1.mybatis对sql执行后会对结果进行封装,如果没有返回任何记录,只是封装后的对象没有值,而对象并不为空null: (这个问题疏忽坑了两次,在对返回数组结果进行判断的时候,我用的if(Array ...

  7. Mybatis需要注意的细节

    mybatis第二篇 1.${}和#{}的区别 1.#在传参的时候,会自动拼接单引号:$不能拼接单引号; 2.$传参时,一般不支持jdbcType指定类型的写法;#则可以;如: ​ #{name,jd ...

  8. Java 语法 try catch使用容易忽略的细节 BigDecimal

    try catch使用细节 一. try catch的使用方式容易理解,两者最终都要执行finally中的代码,而当return在try和catch中又会有什么效果? 如果我们做一个简单的例子就会发现 ...

  9. 你真的理解了java单例模式吗?讲别人都忽略的细节!

    前言:老刘这篇文章敢做保证,java的单例模式讲的比大多数的技术博客都要好,讲述别人技术博客都没有的细节!!! 1 java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上 ...

随机推荐

  1. Jmeter脚本调试之关联----(正则表达式)

    脚本调试 关联,在脚本中,是必应用到的一个设置方法,将脚本中,每次都会动态变化的特殊值进行关联.一个能正确执行的脚本,都需要进行关联(LR.jmeter). Jmeter关联: 在脚本回放过程中,客户 ...

  2. Mysql ibd文件恢复指南

    背景 mysql在使用的过程中,难免遇到数据库表误操作,基于此,作者亲力亲为,对mysql数据表ibd文件的恢复做以下详细的说明,对开发或者初级dba提供一定的指导作用,博客中如若存在相关问题,请指明 ...

  3. hackerrank Diameter Minimization

    瞬间移动 题意:构造一个所有点出度都为m的有向图最小化图的直径. 显然转成m进制来做就好了. #include<queue> #include<cstdio> #include ...

  4. 用gcc编译c语言程序以及其编译过程

    对于初学c语言编程的我们来说,学会如何使用gcc编译器工具,对理解c语言的执行过程,加深对c语言的理解很重要!!! 1.预编译 --> 2.编译 --> 3.汇编 --> 4.链接- ...

  5. [国嵌攻略][159][SPI子系统]

    SPI 子系统架构 1.SPI core核心:用于连接SPI客户驱动和SPI主控制器驱动,并且提供了对应的注册和注销的接口. 2.SPI controller driver主控制器驱动:用来驱动SPI ...

  6. Mybatis中是否需要依赖配置文件的名称要和mapper接口的名称一致 params错误

    一:当核心配置文件mapper标签下以resource形式指向依赖配置文件时,不需要 这样就可以加载到其相应的依赖配置文件通过namespace找到其相应的方法 二:如果mapper标签下以packa ...

  7. 关于responseBody注解中文乱码的问题解决

    在web.xml中定义字符集过滤器: <filter> <filter-name>SpringEncodingFilter</filter-name> <fi ...

  8. zookeeper命令行操作

    创建 #[-s] 顺序 #[-e] 临时节点 #path 节点 #data 该节点存储的数据 #acl 证书 create [-s] [-e] path data acl -s或-e指定节点特性:顺序 ...

  9. webpack+vue项目实战(四,前端与后端的数据交互和前端展示数据)

    地址:https://segmentfault.com/a/1190000010063757 1.前言 今天要做的,就是在上一篇文章的基础上,进行功能页面的开发.简单点说呢,就是与后端的数据交互和怎么 ...

  10. 如何控制input框!

    ENTER键可以让光标移到下一个输入框  只能是中文   屏蔽输入法   只能输入英文和数字   只能是数字 只能显示,不能修改 只能输数字,判断按键的值 function   onlyNum() { ...