Mybatis(三)返回值
一. Mybatis返回值
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性resultType的时候,MyBatis自动的给对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用(association,Collection),
<resultMap type="com.softjx.model.User" id="UserMap">
<result column="t_id" property="id"/>
<result column="t_username" property="username" />
<result column="t_password" property="password"/>
</resultMap> <!-- 查询数据表中的所有记录,并封装User对象集合 -->
<select id="selectAll" resultMap="UserMap">
select * from t_user
</select> <!-- 根据id查询数据表中的一条记录,并封装User对象 -->
<select id="selectById" resultMap="UserMap">
select * from t_user where t_id=#{id};
</select> //统计id>?记录数
public int coutUser(Integer id); //统计id>?记录数 <select id="coutUser" resultType="int">
select count(*) from t_user where t_id>#{id};
</select>
二. Mybatis注解配置
Mybatis中使用注解,就不需要编写mapper.xml文件,直接在接口代码中使用注解。
1、mybatis的全局配置文件要修改,指向接口文件路
<mappers>
<mapper class="com.softjx.dao.UserMapper"/>
</mappers>
2、不用编写mapper.xml文件,写接口,在接口中使用注解
@Select("select t_id as id,t_username username,t_password as password from t_user")
//@Select("select * from t_user")//不好自动填充javabean中的数据
//@ResultType(User.class)//不写没有关系
public List<User> selectAll();
@Select("select t_id as id,t_username username,t_password as password from t_user where t_id=#{id}")
//@Select("select * from t_user where t_id=#{id}")//不好自动填充javabean中的数据
//@ResultType(User.class)//不写没有关系
public User selectById(int id);
@Select("select t_id as id,t_username username,t_password as password from t_user where t_id > #{a} and t_username=#{b}")
@ResultType(User.class)
public List<User> selectByNameId(Map<String, Object> map);
@Select("select t_id as id,t_username username,t_password as password from t_user where t_id > #{0} and t_username=#{1}")
@ResultType(User.class)
public List<User> selectByNameId1(Integer id,String ame);
@Select("select t_id as id,t_username username,t_password as password from t_user where t_id > #{id} and t_username=#{name}")
@ResultType(User.class)
public List<User> selectByNameId2(@Param("id")Integer id,@Param("name")String name);
@Select("select * from t_user")
@Results({@Result(property="id",column="t_id")
,@Result(property="username",column="t_username")
,@Result(property="password",column="t_password")
})
public List<User> selectAllUsers();
@Insert("insert into t_user (t_username,t_password) values (#{username},#{password})")
public int insertUser(User user);
@Update("update t_user set t_username=#{username},t_password=#{password} where t_id=#{id}")
public int updateUser(User user);
@Delete("delete from t_user where t_id=#{a}")
public int deleteUser(int id);
3、编写测试类与以前一样,没有区别。
Mybatis(三)返回值的更多相关文章
- Mybatis select返回值为map时,选取表字段的两列作为key,value
项目需要从ibatis升级到MyBatis,dao中有一个方法返回Map类型,具体是查询语句查询两个字段,将结果列表字段A的值作为key字段B的值作为value存入Map中作为结果返回: ibatis ...
- mybatis update 返回值
mybatis sql: <update id="test" parameterType="map"> update test_0731 set n ...
- mybatis之返回值总结
mybatis框架让我们能在编程中只需要编写一个接口,然后再编写mapper映射文件,无需编写接口的实现类就可以实现从数据库检索数据.这是mybatis通过动态代理,把mapper映射文件的内容转化为 ...
- 深入了解MyBatis返回值
深入了解MyBatis返回值 想了解返回值,我们须要了解resultType,resultMap以及接口方法中定义的返回值. 我们先看resultType和resultMap resultType和r ...
- Mybatis 实用篇(四)返回值类型
Mybatis 实用篇(四)返回值类型 一.返回 List.Map List<User> getUsers(); <select id="getUsers" re ...
- Mybatis执行sql(insert、update、delete)返回值问题
数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert: 插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...
- MyBatis查询结果resultType返回值类型详细介绍
一.返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值. mapper 接口: // 根据 id 获得数据库中的 username 字段的值 String getEmpNameById( ...
- mybatis中查询结果为空时不同返回类型对应返回值
今天在别人的代码基础上实现新需求,看到对于mybatis查询结果的判断不是很正确,如果查询结果为空就会异常,不知道大家有没有这样的疑惑:mybatis中resultType有多种返回类型,对于每种不同 ...
- iOS用三种途径实现一方法有多个返回值
以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...
随机推荐
- Linux 快捷键汇总(偏基础)
自己最近才搭上Linux末班车,有一种想见恨晚的感觉,完全给你一种快速清爽的感觉! 因为需要,所以学习,记录自己在使用Linux系统上的点滴,偏基础! 1. 打开终端: Ctrl+Alt+T 2. 复 ...
- Git相关操作四
1.克隆远程仓库 git clone remote_location clone_name remote_location为仓库地址,clone_name为要克隆到本地的仓库名称. 2.显示对应克隆地 ...
- iOS开发从申请账号到上线APP Store步骤
1.developer.apple.com 申请开发者账号 2.根据API Cloud创建证书: http://docs.apicloud.com/Dev-Guide/iOS-License-Appl ...
- Keras学习环境配置-GPU加速版(Ubuntu 16.04 + CUDA8.0 + cuDNN6.0 + Tensorflow)
本文是个人对Keras深度学习框架配置的总结,不周之处请指出,谢谢! 1. 首先,我们需要安装Ubuntu操作系统(Windows下也行),这里使用Ubuntu16.04版本: 2. 安装好Ubunt ...
- 最详细的浏览器css hack
注意点: 网上很多资料中常常把!important也作为一个hack手段,其实这是一个误区.!important常常被我们用来更改样式,而不是兼容hack.造成这个误区的原因是IE6在某些情况下不主动 ...
- .6-Vue源码之AST(2)
上一节获取到了DOM树的字符串,准备进入compile阶段: // Line-9326 function compileToFunctions(template,options,vm) { // 获取 ...
- RxSwift 对 MJRefresh 使用的封装
对于一个很常用的两个库, MJRefresh 如何可以像 UIButton 使用方式呢: btn.rx.tap.subscribe(...) Rxswift 中的很多类似处理的方式都使用了跟下面极为相 ...
- sed基本常用命令
sed的基本操作 sed 's/a/b/g' 文件a 把文件a中的a修改成b 注意这只是临时的 注:s就是所有的意思,g是缓存区的意思 sed -i 's/a/b/g' 文件a 把文件a中的a修改成b ...
- linux-head
linux-head 用来查看文件的内容的命令 命令参数 -n num:显示指定文件的前num行 -c num:显示指定文件的前num个字符 命令:head b.txt : 如果不加参数就默认 ...
- SSL证书简介
前言 之前写了一篇本站点如何部署SSL证书的文章<Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV ...