详解Mybatis查询之resultType返回值类型问题【4种情况】

详解Mybatis查询之resultType返回值类型问题【4种情况】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6

文章目录

引言一、查询单行数据返回单个对象二、查询多行数据返回对象的集合三、 查询单行数据返回Map[Key,Value]集合四、 查询多行数据返回Map集合

引言

在Mybatis中,resultType属性是selcet元素【映射查询语句】中常用的属性之一,这个属性是什么意思呢?Mybatis官方对它的描述如下所示:期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。

一、查询单行数据返回单个对象

👉应用场景

例如根据id或者字段条件查询获取表中的某一个字段值

代码示例如下

①Java代码示例如下

//根据empId来查出对应的employee对象

public Employee selectByempId(int empId);

②sql映射文件中相关代码如下

❗注意:

①resultType中的类名一般是写类的全类名,但如果之前自定义了类的别名,也可以写上别名去

②如果是java 的基本类型,就不需要别名的

别名映射的类型_bytebyte_longlong_shortshort_intint_booleanbooleanintegerIntegerstringStringdateDatebooleanBoolean

🥇如何给类自定义别名?

在Mybatis-config.xml文件中给类起别名

①直接给类起别名

代码示例如下:

②给包下的类批量起别名

代码示例如下:

ps: 只要写包名即可,mybatis会自动去扫描包下的所有类,并以类名的首字母小写给类起别名

在类上使用注解@Alias给类起别名

代码示例如下:

package mybatis.pojo;

@Alias("emp")

//使用@Alias注解给Employee类起了别名emp

public class Employee {

}

二、查询多行数据返回对象的集合

代码示例如下:

①Java代码示例如下

//查看所有的员工信息

public List showAllEmployee();

②sql映射文件中相关代码如下

❗ 注意:如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。

三、 查询单行数据返回Map[Key,Value]集合

👉应用场景

数据库中的字段作为Map的key,查询结果作为Map的Value

⭐用法案例

根据员工编号查询指定的员工信息,并用Map集合返回结果

①在Mapper接口书写相应的方法

//根据员工编号查询指定的员工信息,并用Map集合返回结果

public Map showEmpoloyByempID(int empId);

②在映射文件中书写相应的sql

③测试

@Test

public void test06(){

try {

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//通过SqlSessionFactory对象调用openSession();

SqlSession sqlSession = sqlSessionFactory.openSession();

//获取EmployeeMapper的代理对象

EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

Map map = employeeMapper.showEmpoloyByempID(1);

System.out.println(map);

} catch (IOException e) {

e.printStackTrace();

}

}

四、 查询多行数据返回Map集合

👉应用场景

Map

对象的id作为key

对象作为value

⭐用法案例

查询所有的员工信息,使用Map集合返回查询结果

①在Mapper接口中书写相应方法

//查询所有的员工信息

@MapKey("id")

public Map showAll();

②在对应的映射文件中书写相关的sql

③测试

@Test

public void test07(){

try {

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//通过SqlSessionFactory对象调用openSession();

SqlSession sqlSession = sqlSessionFactory.openSession();

//获取EmployeeMapper的代理对象

EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

Map map = employeeMapper.showAll();

System.out.println(map);

} catch (IOException e) {

e.printStackTrace();

}

}

相关推荐

掌握这10个Web测试常用方法和工具,让你的网站质量提升10倍!
365禁用取消提款什么意思

掌握这10个Web测试常用方法和工具,让你的网站质量提升10倍!

📅 08-23 👁️ 4071
眼镜热门网店推荐榜 2025年值得收藏的十家眼镜店铺
365bet官网的微博

眼镜热门网店推荐榜 2025年值得收藏的十家眼镜店铺

📅 09-27 👁️ 7547
2018世界杯德国vs韩国几比几?这场冷门之战为何让全世界震惊?
365bet体育在线投注官网

2018世界杯德国vs韩国几比几?这场冷门之战为何让全世界震惊?

📅 10-23 👁️ 8918
【心得】R18 INSIGHT 1/4原創角色 肉感少女I 情趣睡衣 追視眼版 開箱 @綜合公仔玩具討論區 哈啦板
【IT之家评测室】OPPO Enco X 真无线降噪耳机体验:可 “动”,能静
《水经注》原文、解读、注释
365bet体育在线投注官网

《水经注》原文、解读、注释

📅 07-12 👁️ 4466
脑子长瘤——了解是怎么引起的?
365禁用取消提款什么意思

脑子长瘤——了解是怎么引起的?

📅 08-14 👁️ 2101
多少沾点是什么意思东方女人2020-10-21 14:21:23
365bet体育在线投注官网

多少沾点是什么意思东方女人2020-10-21 14:21:23

📅 08-01 👁️ 2131
甲状腺超声报告里的 “TI-RADS 分级”,到底啥意思?让西安甲康高伟医生教你看报告