您好,登錄后才能下訂單哦!
這篇文章主要介紹“Mybatis怎么查詢語句返回對象和泛型集合”,在日常操作中,相信很多人在Mybatis怎么查詢語句返回對象和泛型集合問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mybatis怎么查詢語句返回對象和泛型集合”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
package cn.et.mybatis.lesson03; import java.util.List; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; public interface EmpMapper { /** * 查詢單條數據, * 每一列的列名都會去Emp實體類中去匹配對應的屬性 * 匹配時會把二邊都轉為小字母進行匹配 * 匹配成功就會調用Emp實體類中對象的set方法 * * 如果列名和Emp的屬性匹配不上, * 1.為查詢結果的列設置一個別名 * 2.將列名ename和屬性ename1建立一個關系 單個屬性建立關系 * * column是不區分大小寫的,property是區分大小寫的 * @return */ @Results( { @Result(column="ename",property="ename1"), @Result(column="empNo",property="empNo1"), @Result(column="sal",property="sal1"), } ) @Select("select * from emp where empno=#{0}") public Emp queryEmpByEmpNo(String empNo); /** * 查詢出多條數據,每一條數據都是一個Emp對象 * 每一列的列名都會去Emp實體類中去匹配對應的屬性 * 匹配時會把二邊都轉為小字母進行匹配 * 匹配成功就會調用Emp實體類中對象的set方法 * 如果沒有一條數據匹配成功,則不會創建Emp對象 * @param empNo * @return */ @Results( { @Result(column="ename",property="ename1"), @Result(column="empNo",property="empNo1"), @Result(column="sal",property="sal1"), } ) @Select("select * from emp") public List<Emp> queryEmp(); }
package cn.et.mybatis.lesson03; import java.io.InputStream; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; public class TestMybatis { public static SqlSession getSession(){ String resource = "/cn/et/mybatis/lesson03/mybatis.xml"; InputStream inputStream = TestMybatis.class.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //打開會話 SqlSession session = sqlSessionFactory.openSession(); return session; } public static void main(String[] args) { SqlSession session = getSession(); EmpMapper emp = session.getMapper(EmpMapper.class); Emp obj = emp.queryEmpByEmpNo("8000"); System.out.println(obj); } @Test public void test(){ SqlSession session = getSession(); EmpMapper emp = session.getMapper(EmpMapper.class); List<Emp> result = emp.queryEmp(); for (Emp emp2 : result) { System.out.println(emp2); } } }
dept_mapper.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"> <!-- 接口映射 namespace必需跟接口的全名一致 --> <mapper namespace="cn.et.mybatis.lesson03.resultEntityXml.DeptMapper"> <!-- column是不區分大小寫的,property是區分大小寫的 --> <resultMap type="cn.et.mybatis.lesson03.resultEntityXml.Dept" id="myDept"> <result column="deptno" property="deptno1"/> <result column="dname" property="dname1"/> <result column="loc" property="loc1"/> </resultMap> <select id="queryDept" resultMap="myDept"> select * from dept where deptno=#{0} </select> </mapper>
測試類:
package cn.et.mybatis.lesson03.resultEntityXml; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class TestMybatis { public static SqlSession getSession(){ String resource = "/cn/et/mybatis/lesson03/mybatis.xml"; InputStream inputStream = TestMybatis.class.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //打開會話 SqlSession session = sqlSessionFactory.openSession(); return session; } public static void main(String[] args) { SqlSession session = getSession(); DeptMapper dept = session.getMapper(DeptMapper.class); Dept result = dept.queryDept("10"); System.out.println(result); } }
當接收結果為map或者對象的屬性為泛型時:
@Data public class GenericKeyValueVo<K,V> { private K key; private V value; }
這時候如果直接將resultType指向對象全限定名稱時,可能會出現問題。因為如果查詢結果的某個字段大于1000會出現","如:1,000.56 。mybatis不會報錯,因為這個對象的這個屬性為泛型,可以接收。而當獲取結果之后即使定義接收的變量類型為:
第二個屬性也會存入String類型的值。后續再處理可能就會出現將string轉為double數據類型轉換錯誤。
定義一個resultMap,指明javaType
<resultMap id="StrKeyDoubleValueMap" type="com.meinergy.mkting.commons.entity.wholesale.vo.GenericKeyValueVo"> <result column="key" property="key" javaType="java.lang.String"/> <result column="value" property="value" javaType="java.lang.Double"/> </resultMap>
再用一個convert函數規范查詢結果格式
convert(FORMAT(queryResult, decimal(12, 2))
到此,關于“Mybatis怎么查詢語句返回對象和泛型集合”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。