增加null&&使用HashMap儲存查詢結果集
阿新 • • 發佈:2020-07-08
增加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();