Mybatis的查询结果除了可以设置为resultType以外,还可以设置为resultMap.
1.方式一:把resultType的值设置为Map
mapper 文件:
<select id="selectReturnMap" resultType="java.util.HashMap"> select id, actno from bankdb.t_account where id = #{id} </select>
接口方法:
Map<Object,Object> selectReturnMap(int id);
测试方法:
AccountDao dao = sqlSession.getMapper(AccountDao.class); Map<Object,Object> map=dao.selectReturnMap(1001); System.out.println("Map=:"+map);
注意:
这里我们并没有设置数据库列名与map的key的对应关系,并且我们也没有指定map里面有些什么key。
mybatis会自动把数据库的列名当作map的key,列值转化成map的value。
SQL返回值只能是一行,多余一行,则无法与map对应,就会报错。
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4
2.方式二:设置返回值类型为resultMap
2.1.使用resultMap:
1)需要先用resultMap标签定义一个map
2)在select标签中引用我们定义的map
2.2 resultMap的定义方法
1)id:自定义resultMap的名称
2)type:java实体类的全限定名称
column:数据库表的列名
property:java实体类的属性名
mapper文件:
<resultMap id="accountMap" type="com.galaxy.bank.pojo.Account"> <!-- column:数据库表的列名--> <!-- property:java实体类的属性名--> <id column="id" property="id"/> <!-- 非主键列使用result标签--> <result column="actno" property="actno"/> <result column="balance" property="balance"/> <result column="holder_name" property="holderName"/> <result column="country" property="country"/> </resultMap> <select id="selectAllAccountsMap" resultMap="accountMap"> select id, actno, balance, holder_name, country from bankdb.t_account </select>
Java Dao接口:
注意:返回值类型是List
List<Account> selectAllAccountsMap();
测试类:
@Test public void test09() { SqlSession sqlSession = MybatisUtil.getSqlSession(); AccountDao dao = sqlSession.getMapper(AccountDao.class); List<Account> accounts=dao.selectAllAccountsMap(); accounts.forEach(account -> { System.out.println("Account=:"+account); }); sqlSession.close(); }
-------------------------------------------------------------------------------------------------
2022年10月9日,农历九月十四,星期日,阴天有小雨,气温较冷,上海。
凌晨:01:16国庆节7天假期后的第二天,今日不调休,不上班.
---------------------------------------------------------------------------------------------------