之前一篇文章 mybatis 传递参数的7种方法 讲了mybatis中传递入参的7中方式,这节讲下增删改查等操作的返回值都代表什么意思,以及怎么使用这些返回值
update: 返回值为匹配数据库的条数(不论最终是否对数据进行了修改,只要某条记录符合匹配条件,返回值就加1)
insert:如果成功返回值为插入数据库的条数,失败返回的是exception,所以需要对异常进行处理
public int insertDept(Department department)
{
try{
return departmentMapper.insertAutoId(department);
}catch (Exception e )
{
return -1;
}
}
@ApiOperation(value = "新增部门")
@PostMapping("new")
public ResultMsg newDepartment(@RequestBody Department department) {
department.setId(idWorker.nextId());
int result = departmentService.insertDept(department);
return ResultMsg.getStrMsg(result > 0 ? "SUCCESS" : "FAILED");
}
delete:返回值为删除的数据条数
四种基本操作中,以查询操作的返回值最为多样化
Mybatis中,通过resultType或resultMap指定返回值
即返回Java基本的数据类型,如String Long int
mapper
String getDeptName(Long id);
xml
<select id="getDeptName" parameterType="java.lang.Long" resultType="string">
select
dept_name
from department
where id = #{id,jdbcType=BIGINT}
</select>
也可直接返回实体类,resultType指定实体类的路径
mapper
Department getDeptById(Long id);
xml
<select id="getDeptById" parameterType="java.lang.Long" resultType="com.wg.demo.po.Department">
select
*
from department
where id = #{id,jdbcType=BIGINT}
</select>
当实体类字段与数据库字段不一致时,可以使用resultMap
<select id="getDeptById" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
*
from department
where id = #{id,jdbcType=BIGINT}
</select>
<resultMap id="BaseResultMap" type="com.wg.demo.po.Department">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="dept_name" jdbcType="VARCHAR" property="deptName" />
<result column="descr" jdbcType="VARCHAR" property="descr" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
</resultMap>
resultType方式:当使用resulType做返回结果处理时,SQL所查询的字段必须与相应的pojo中的字段相对应;因此对于单表查询用resultType是最合适的。
resultMap方式:当javabean和数据库表字段不一致时,可使用resultMap指定返回结果类型;一个Mapper文件可定义多个resultMap
在一个查询中,resultType跟resultMap不能同时存在
当返回数据有多条时,可通过List方式返回
mapper
List<Department> selectAll();
xml
<select id="selectAll" resultMap="BaseResultMap">
select
*
from department
</select>
该类型返回值可分为两种方式:
1.返回单条数据,map对应表中字段
Map getDeptAsMap(Long id);
<select id="getDeptAsMap" parameterType="java.lang.Long" resultType="map">
select
*
from department
where id = #{id,jdbcType=BIGINT}
</select>
2.返回多条数据
以Map形式返回多条数据,map中每一条记录对应一条查询记录,(该方式与List返回值类似,不过是数据的组织方式不同而已),这里需要指定使用哪个属性作为Map主键
mapper
@MapKey("id") //指定Map的主键为返回结果的id
Map getDeptAsMaps();
xml
<select id="getDeptAsMaps" resultType="map">
select
*
from department
</select>
以JSONObject的形式返回查询结果,多用于查询结果列数不定的情况(就是说查询结果是动态的)
controller
@ApiOperation(value = "返回JSONObject")
@PostMapping("findJSONObject")
public ResultMsg findJSONObject( )
{
return ResultMsg.getMsg(employeeMapper.findJSONResult());
}
mapper
JSONArray findJSONResult();
xml
<select id="findJSONResult" resultType="com.alibaba.fastjson.JSONObject" >
SELECT * from employee
</select>
好了至此,mybatis中增删改查请求参数的方式,以及返回结果各种形式及含义就算是讲完了,弄懂了这些,在平时开发中我们就可以在做增删改查操作时,从容的选择入参和出参。
下节我讲下Mybatis中如何实现一对一和一对多的查询操作
一对一查询 assocation
一对多查询collection
评论