Mybatis查询语句返回对象和泛型集合的操作

网友投稿 974 2022-12-23

Mybatis查询语句返回对象和泛型集合的操作

Mybatis查询语句返回对象和泛型集合的操作

Mybatis查询语句返回对象和泛型集合

EmpMapper映射接口:

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 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);

}

}

}

xml映射-----------

dept_mapper.xml:

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from dept where deptno=#{0}

测试类:

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);

}

}

mybatis查询结果集有泛型属性时可能出现的问题

问题:

当接收结果为map或者对象的属性为泛型时:

@Data

public class GenericKeyValueVo {

private K key;

private V value;

}

这时候如果直接将resultType指向对象全限定名称时,可能会出现问题。因为如果查询结果的某个字段大于1000会出现","如:1,000.56 。mybatis不会报错,因为这个对象的这个属性为泛型,可以接收。而当获取结果之后即使定义接收的变量类型为:

第二个属性也会存入String类型的值。后续再处理可能就会出现将string转为double数据类型转换错误。

解决方法:

定义一个resultMap,指明javaType

再用一个convert函数规范查询结果格式

convert(FORMAT(queryResult, decimal(12, 2))

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:重庆智能车载终端(重庆智能车载终端厂家)
下一篇:包含uniapp小程序使用echarts的词条
相关文章

 发表评论

暂时没有评论,来抢沙发吧~