1. 程式人生 > 實用技巧 >增加null&&使用HashMap儲存查詢結果集

增加null&&使用HashMap儲存查詢結果集

增加null

oracle:如果插入的欄位是Null,提示錯誤:Other而不是null

mysql:如果插入的欄位是Null,正常執行(沒有約束)

原因:各個資料庫在mybatis中對各種資料型別的預設值不一致

  mybatis中,jdbcTypeForNull(如果是null),則預設值是Other。

  Other來說,Mysql能夠處理(NULL),但是Oracle不行

解決:

  Oracle:null->Other,需要手工告訴Oracle:other為null

  a.修改具體的sql標籤

當某個資料型別oracle無法處理時,告訴它預設值null

注意此時設定的#{stuName,jdbcType=NULL}不會影響正常的賦值

src\org\myy\mapper\studentMapper.xml

    <insert id="addStudent" parameterType="Student" databaseId="oracle">
        <selectKey keyProperty="stuNo" resultType="Integer" order="AFTER">
            select myseq.currval from dual
        </selectKey>
        insert into student1(stuno,stuname,stuage,graname)
        values(myseq.nextval,#{stuName,jdbcType
=NULL},#{stuAge},#{graName}) </insert>

  b.配置mybatis全域性配置檔案conf.xml(推薦)

src\conf.xml

 <settings>
        <setting name="jdbcTypeForNull" value="NULL"/>
 </settings>

返回值為HashMap的情況

src\org\myy\mapper\studentMapper.xml

    <select id="queryStudentOutByHashMap" parameterType="int"
            resultType
="HashMap"> select stuNo "no",stuName "name",stuAge "age" from student1 where stuNo=#{stuNo} </select>

其中stuNo是資料庫的欄位名

"no"是stuNo的別名,用於在map中get值時使用(作為map的key)map.get("no")

如果不加別名,map的key就是欄位名

src\org\myy\mapper\StudentMapper.java

HashMap<String,Object> queryStudentOutByHashMap(int stuNo);

src\org\myy\test\Test.java

        //Connection - SqlSession操作Mybatis
        //conf.xml->reader
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //reader->sqlSession

        //可以通過build的第二引數 指定資料庫環境
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader,"devOracle");
        SqlSession session = sessionFactory.openSession();

        StudentMapper studentMapper=session.getMapper(StudentMapper.class);

        HashMap<String, Object> studentMap = studentMapper.queryStudentOutByHashMap(1);
        System.out.println(studentMap.get("no")+","+studentMap.get("name")+","+studentMap.get("age"));
        System.out.println(studentMap);
        session.close();

key:id  value:Student

src\org\myy\mapper\studentMapper.xml

    <select id="queryStudentsByHashMap"
            resultType="HashMap">
        select stuNo,stuName,stuAge from student1
    </select>

src\org\myy\mapper\StudentMapper.java

    //程式根據select的返回值,知道map的value就是Student,根據@MapKey("STUNO")知道map的key是stuNo
  @MapKey("STUNO")//Oracle的元資料(表名、欄位名)都是大寫
  HashMap
<Integer,Student> queryStudentsByHashMap();

src\org\myy\test\Test.java

        //Connection - SqlSession操作Mybatis
        //conf.xml->reader
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //reader->sqlSession

        //可以通過build的第二引數 指定資料庫環境
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader,"devOracle");
        SqlSession session = sessionFactory.openSession();

        StudentMapper studentMapper=session.getMapper(StudentMapper.class);

        HashMap<Integer, Student> studentsMap = studentMapper.queryStudentsByHashMap();
        //System.out.println(studentMap.get("no")+","+studentMap.get("name")+","+studentMap.get("age"));
        System.out.println(studentsMap);

        session.close();