一 返回各种数据类型案例
1.1 返回单个实体
dao层:
mapper层:
id :identification:语句的标识,在同一个mapper映射文件下id需要唯一
parameterType: 参数类型,可以不写。因为 MyBatis 可以推断出传入语句的具体参数
resultType: 全限定类名或者是类型别名.
当使用resultType来映射结果时,需要 数据库表的列名或列别名 和 类的属性名相同,这样才能进行字段的匹配(USER_ID 和userId 就不能匹配)。但是如果在Mybatis配置文件中设置了
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/> <!--开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。-->
</settings>
此 时,表列名的下划线标记方式可以映射到驼峰标记的形式。(USER_ID -> userId)。mybatis进行映射时会将实体类属性和数据库列名(别名)都转化为大写来比较,所以USER_ID 和 UserId,userID等都可以匹配。
TooManyResultsException
返回单个实体时,调用方法 getUserById,但是如果是因为数据错误导致实际查询结果存在多个时,则会抛出异常
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
除非可以确定最多只能查询到一条结果,否则的话不建议这么写.可以尝试返回集合的方式。
1.2通过返回list<String>
/**
* 查询区域id,公司id,品牌id的组合
* @param operateArea
* @return
*/
List<String> getYesterdayShelfBikeCompose(OperateAreasBo operateArea);
这里有点奇怪:要返回list<String>, 为何xml中resultType的类型设置为String,就行了
1.3通过返回List<Map<String,Object>>
1.dao层:
//查询设备健康度占比 public List<Map<String,Object>> queryDeviceHealthRation(ParamInfoVo paramInfoVo);
2.mapper层
3.返回结果:
1.4.返回list<Javabean>
1.mapper:
//工单的统计
List<OperateTaskStatisticsBo> totalTaskStatistics(OperatorTaskDto operatorTaskDto);
2. xml的方法:
<!--工单统计数据-->
<select id="totalTaskStatistics" parameterType="xxx.domain.operator.dto.OperatorTaskDto" resultType="xxx.domain.operator.bo.OperateTaskStatisticsBo"> select search_day as searchDay, SUM(IFNULL(exchage_count,0)) as exchangeBatteryNum
from operate_task_statistics
1.5.返回integer与String
1.5.1 返回 integer
/**
* 通过区域id,公司id,品牌id查询前一天上架车辆
* @return
*/
Integer getYesterdayShelfBikeNumSum(OperateAreasBo operateArea);
1.5.2 返回 string
mapper.xml
<select id="queryDeviceStop" resultType="">
select stop_symbol from where part_code=#{deviceCode}
</select>
dao层:
public String queryDeviceStopSymbol(@Param("deviceCode") String deviceCode);
1.6.返回map类型,返回多行数据
map的key对应指定的字段名字所属值,map的value对应查出数据封装成的bean,返回的多条数据
dao层接口:
xmlMapper:
<!--查询可用的运营城市的运营城市名称-->
<select id="getOperateCityName" resultType="xxxx.domain.config.entity.OperateCity">
select ad_code as adCode, operate_city_name as operateCityName from operate_city where del_flag=0
</select>
1.7.返回map类型,返回单条数据
1.service层
2.dao层
3.mapper
13、Mybatis把返回结果封装成map类型_u010502101的博客-CSDN博客_mybatis查询结果封装成map
1.8.返回map<String,List<Bean>>结构的数据
1.model:
2.mapper:
3.dao
4.controller
5.调用结果:
注意注意,返回的数据类型为map的话,,resultType不能使用,否则报错
要改成:resultMap
1.9.使用@param参数
1.9.1 获取参数方式1
service:
@Override
public void batchupdateOrderNumCover1(String beginDate,String endDate) {
dailyOrderStatisticsReportInsertMapper.batchupdateOrderNumCover1(beginDate,endDate);
}
dao:
/**
* 修改订单订单数》=1的用户状态
*/
public void batchupdateOrderNumCover1(@Param("startTime")String startDate,@Param("endTime") String endDate);
xml:
注意xml引用的参数要和@Param("xxx") 中xxx对应
1.9.2 获取参数2
1.10.传递interger类型的参数
在xml中,切记不能将integer,写成java.util.Intger下面,否则报错
报错:
正确的做法:java.lang.Integer
1.11 mybaits的like 模糊查询
1.11.1 方式1
设置各种复杂的like查询
mybaits上进行查询
1.11.2 方式2
多个like查询
1.11.3 方式3
百分号在后边的情况:
1.12 in语句
dao层:
//查询source名称
@MapKey("sourceId")
public Map<String,CrawMaterialEntry> querySourceNameMap(@Param("sidSet") Set<Integer> sourceIdSet);
mapper:
二 数据库类型和mybaits数据类型的映射
2.1 映射关系如下