zoukankan      html  css  js  c++  java
  • mybatis不可忽略的细节

    自我总结,欢迎拍砖!

    目的:在需要返回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了

  • 相关阅读:
    用一个案列详细讲解UITextFiled
    iOS开发中的内存分配(堆和栈)
    一次性解决导航栏的所有问题
    iOS 枚举的巧用
    iOS高仿app源码:纯代码打造高仿优质《内涵段子》
    如何实现百度外卖APP个人中心头像"浪"起来的动画效果
    手把手教你修改iOS版QQ的运动步数
    UIView的layoutSubviews和drawRect方法何时调用
    内存恶鬼drawRect
    iOS 离屏渲染的研究
  • 原文地址:https://www.cnblogs.com/xxyfhjl/p/4157988.html
Copyright © 2011-2022 走看看