一. 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(三)返回值的更多相关文章

  1. Mybatis select返回值为map时,选取表字段的两列作为key,value

    项目需要从ibatis升级到MyBatis,dao中有一个方法返回Map类型,具体是查询语句查询两个字段,将结果列表字段A的值作为key字段B的值作为value存入Map中作为结果返回: ibatis ...

  2. mybatis update 返回值

    mybatis sql: <update id="test" parameterType="map"> update test_0731 set n ...

  3. mybatis之返回值总结

    mybatis框架让我们能在编程中只需要编写一个接口,然后再编写mapper映射文件,无需编写接口的实现类就可以实现从数据库检索数据.这是mybatis通过动态代理,把mapper映射文件的内容转化为 ...

  4. 深入了解MyBatis返回值

    深入了解MyBatis返回值 想了解返回值,我们须要了解resultType,resultMap以及接口方法中定义的返回值. 我们先看resultType和resultMap resultType和r ...

  5. Mybatis 实用篇(四)返回值类型

    Mybatis 实用篇(四)返回值类型 一.返回 List.Map List<User> getUsers(); <select id="getUsers" re ...

  6. Mybatis执行sql(insert、update、delete)返回值问题

    数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert:   插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...

  7. MyBatis查询结果resultType返回值类型详细介绍

    一.返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值. mapper 接口: // 根据 id 获得数据库中的 username 字段的值 String getEmpNameById( ...

  8. mybatis中查询结果为空时不同返回类型对应返回值

    今天在别人的代码基础上实现新需求,看到对于mybatis查询结果的判断不是很正确,如果查询结果为空就会异常,不知道大家有没有这样的疑惑:mybatis中resultType有多种返回类型,对于每种不同 ...

  9. iOS用三种途径实现一方法有多个返回值

    以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...

随机推荐

  1. Vector容器构造函数

    No1 vector(); No2 vector( const vector& c ); No3 explicit vector( size_type num, const TYPE& ...

  2. 03Vue事件

    Vue提供了事件的绑定,方法写在methods对象中. 绑定dom中有两种方法: 方法一:v-on:click/dblclcick/mouseOver/mouseOut="方法名" ...

  3. [CF] Final Exam Arrangement

    问题链接:http://www.bnuoj.com/v3/contest_show.php?cid=4329#problem/F   问题大意:         就是有1--N们课程,每一个课程都有一 ...

  4. 跨站请求伪造(CSRF)-简述

    跨站请求伪造(CSRF)-简述 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 ...

  5. JavaAPI 中 <E> 与 <T> 的含义

    今天看集合的代码,发现在泛型的使用时的区别,Collection<E>.List<E>,而Iterator<T>,那么<E>和<T>含义有什 ...

  6. Redis基本认识和基础学习-基本命令

    Redis 基本介绍 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANS ...

  7. left join 条件位置问题

    表一:

  8. C++编译程序时的内存分配

    一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放 ...

  9. java语言插入数组中一个数,仍然能够实现排序

    package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Demo16 { /* * ...

  10. Android 开发笔记___FrameLayout

    xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:la ...