这篇文章主要介绍“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。