- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本文主要讲述如何在mybatis中进行查询操作【详解】 。
SelectUser接口声明如下 。
// 主要条件是使用id public interface SelectUser { // 查询单行数据,返回对象User User getUserSingleByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser">
<!-- User getUserSingleByID(@Param("id") int id) --> < select id ="getUserSingleByID" resultType ="User" > select * from t_user where id = #{id}; </ select > </ mapper >
SelectUser接口声明如下 。
// 主要条件是使用id public interface SelectUser { // 查询多行数据,返回User类的集合【查询 >= id 的数据】 List<User> getUserListByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser" > <!-- List<User> getUserListByID(@Param("id") int id) --> < select id ="getUserListByID" resultType ="User" > select * from t_user where id >= #{id} </ select > </ mapper >
问题:当查询单个对象时,是否可以用List<User>作为返回类型?
SelectUser接口声明如下 。
// 主要条件是使用id public interface SelectUser { // 查询单行数据,返回对象User List<User> getUserSingleByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser" > <!-- User getUserSingleByID(@Param("id") int id) --> < select id ="getUserSingleByID" resultType ="User" > select * from t_user where id = #{id}; </ select > </ mapper >
测试test 。
@Test // 使用id查询单个数据User public void selectUserByID(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectUser mapper = sqlSession.getMapper(SelectUser. class ); List <User> user = mapper.getUserSingleByID(12 ); System.out.println(user); sqlSession.close(); }
测试结果如下 。
运行结果正常 。
总结:当返回的数据对象不清楚有几个的情况,建议使用List<User> 。
SelectUser接口声明如下 。
// 主要条件是使用id public interface SelectUser { // 查询单个字段【单行】 // 返回类型根据字段的类型而定,具体问题具体分析 String getNameByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser" > <!-- String getNameByID(@Param("id") int id) --> < select id ="getNameByID" resultType ="string" > select username from t_user where id = #{id} </ select > </ mapper >
注意:在SelectUser接口定义的方法 getNameByID() 的返回类型需要根据字段的类型来指明,或者直接使用Object.
SelectUser接口声明如下 。
public interface SelectUser { // 查询单个字段【多行】 List<String> getNameRowsByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser" > <!-- List<String> getNameRowsByID(@Param("id") int id); --> < select id ="getNameRowsByID" resultType ="string" > select username from t_user where id >= #{id} </ select > </ mapper >
与 一中查询多行数据类似,返回类型是List<字段类型或者Object> 。
SelectUser接口声明如下 。
// 主要条件是使用id public interface SelectUser { // 查询多个字段【单行】 // Map<String,Object> 中 key是字段名,value是属性值 Map<String,Object> getColsByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser" > <!-- Map<String,Object> getColsByID(@Param("id") int id) --> < select id = "getColsByID" resultType ="map" > select username,password,age from t_user where id = #{id} </ select > </ mapper >
在SelectUser接口定义的方法返回类型是Map<String,Object>类型, 。
Map<String,Object>的key是字段名,value是属性值,这里的Object用的巧妙 。
SelectUser接口声明如下 。
public interface SelectUser { // 查询多个字段【多行】 // 此时不能使用 Map<String,Object> 作为返回类型,数据不止一条 // 方式1:使用List<Map<>> List<Map<String,Object>> getClosRowsByID(@Param("id") int id); // 方式2:使用@MapKey("字段名") 查出的结果 Map<Map<>> // @MapKey("字段名"),key是字段名【唯一标志该行数据】value是该行数据 // 此时在xml文件,查询字段必须要包含唯一标识id @MapKey("id" ) // Map<String,Object> getMapsByID(@Param("id") int id); Map<Integer,Object> getMapsByID(@Param("id") int id); }
SelectUser.xml文件声明如下 。
< mapper namespace ="com.hspedu.mapper.SelectUser" > <!-- 方式1:使用List<Map<>> --> <!-- Map<String,Object> getClosRowsByID(@Param("id") int id); --> < select id ="getClosRowsByID" resultType ="map" > select username,password,age from t_user where id >= #{id} </ select > <!-- 方式2:使用@MapKey注解 --> <!-- @MapKey("id") Map<String,Object> getMapsByID(@Param("id") int id); --> < select id ="getMapsByID" resultType ="map" > select id,username,password,age from t_user where id >= #{id} </ select > </ mapper >
方式1:测试test 。
@Test // 根据id查询多个字段【多行】方式一: public void selectColsRowsByID(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectUser mapper = sqlSession.getMapper(SelectUser. class ); List <Map<String, Object>> mapList = mapper.getClosRowsByID(6 ); // 遍历集合 for (Map<String, Object> map : mapList) { System.out.println(map); } sqlSession.close(); }
测试结果如下 。
{password =tom123, age=20, username= Tom} {password =tom123, age=20, username= Tom} {password =tom123, age=20, username= Tom} {password =tom12345, age=20, username= jack} {password =hsp12345, age=25, username= hsp} {password =tom123, age=20, username= Tom} {password =tom123, age=20, username= Tom} {password =tom123, age=20, username= Tom} {password =hsp12345, age=25, username=hsp}
方式2:测试test 。
@Test // 根据id查询多个字段【多行】方式二: public void selectMapsByID(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectUser mapper = sqlSession.getMapper(SelectUser. class ); Map <Integer, Object> maps = mapper.getMapsByID(6 ); // 遍历map,注意此时map的结构 Map<id=Map,id=Map...> Set<Integer> keySet = maps.keySet(); // java.lang.Integer cannot be cast to java.lang.String // [16, 6, 9, 10, 11, 12, 13, 14, 15] // id的字段类型: class java.lang.Integer. // 因此需要将Map<String,Object> 变成Map<Integer,Object> for (Integer s : keySet) { System.out.println(maps.get(s)); } sqlSession.close(); }
测试结果如下 。
{password=hsp12345, id=16, age=25, username= hsp} {password =tom123, id=6, age=20, username= Tom} {password =tom123, id=9, age=20, username= Tom} {password =tom123, id=10, age=20, username= Tom} {password =tom12345, id=11, age=20, username= jack} {password =hsp12345, id=12, age=25, username= hsp} {password =tom123, id=13, age=20, username= Tom} {password =tom123, id=14, age=20, username= Tom} {password =tom123, id=15, age=20, username=Tom}
注意方式1和方式2的区别 。
方式1的返回类型是List<Map>,即 将查询到的每行结果 --存放-->Map<String,Object> ---封装--> List<Map<String,Object>>.
List<Map<>>的结构如下 。
[{password=tom123, age=20, username=Tom},{password=tom123, age=20, username= Tom}, {password =tom123, age=20, username= Tom}, {password =tom12345, age=20, username= jack}, {password =hsp12345, age=25, username= hsp}, {password =tom123, age=20, username= Tom}, {password =tom123, age=20, username= Tom}, {password =tom123, age=20, username= Tom}, {password =hsp12345, age=25, username=hsp}]
方式2是通过注解@MapKey("字段名"),注意这里的字段名是作为每行数据value的key【 因此应该选择能够唯一标识某一行数据的字段名作为每行数据的key 】.
Map< " 字段名的值 " = Map<>>的结构如下 。
{16={password=hsp12345, id=16, age=25, username= hsp}, 6={password=tom123, id=6, age=20, username= Tom}, 9={password=tom123, id=9, age=20, username= Tom}, 10={password=tom123, id=10, age=20, username= Tom}, 11={password=tom12345, id=11, age=20, username= jack}, 12={password=hsp12345, id=12, age=25, username= hsp}, 13={password=tom123, id=13, age=20, username= Tom}, 14={password=tom123, id=14, age=20, username= Tom}, 15={password=tom123, id=15, age=20, username=Tom}}
。
最后此篇关于MyBatis的使用四(查询详解)的文章就讲到这里了,如果你想了解更多关于MyBatis的使用四(查询详解)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
全称“Java Virtual Machine statistics monitoring tool”(statistics 统计;monitoring 监控;tool 工具) 用于监控虚拟机的各种运
主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。 可以转载,但请注明出处。  
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发。 2>循环服务器和并发服务器
详解 linux中的关机和重启命令 一 shutdown命令 shutdown [选项] 时间 选项: ?
首先,将json串转为一个JObject对象: ? 1
matplotlib官网 matplotlib库默认英文字体 添加黑体(‘SimHei')为绘图字体 代码: plt.rcParams['font.sans-serif']=['SimHei'
在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在jdk1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇
一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象。  
实例如下: ? 1
1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型;提供了泛型支持;可以读缓存和单个缓存
argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 复制代码 代码如下: <script
一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,googl
今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1、PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 funct
摘要:虚拟机安装时一般都采用最小化安装,默认没有lspci工具。一台测试虚拟网卡性能的虚拟机,需要lspci工具来查看网卡的类型。本文描述了在一个虚拟机中安装lspci工具的具体步骤。 由于要测试
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
目录 算术运算符 基本四则运算符 增量赋值运算符 自增/自减运算符 关系运算符 逻
如下所示: ? 1
MapperScannerConfigurer之sqlSessionFactory注入方式讲解 首先,Mybatis中的有一段配置非常方便,省去我们去写DaoImpl(Dao层实现类)的时间,这个
Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等,这里使用LXC的网络虚拟化来模拟多个网络环境。 本文从基本的网络设备讲
? 1
我是一名优秀的程序员,十分优秀!