《Spring+Mybatis》Mybatis之resultMap的用法学习笔记与代码

   .默认情况下,Mybatis会将查询到的数据的列和需要返回对象的属性逐一进行匹配,但是如果查询到的数据表的列和需要返回

的对象属性名不一致,就不会自动赋值,(只是把数据表的值查出来了,并没有放到对象中,对象中名字为name属性),所以这是需要采用resultMap

session.commit();//mybatis的事务默认是不会提交的 需要手动提交

1.未使用resultMapde情况:是直接用的map输出,但Map集合不能很好的描述一个领域模型,一般采用JavaBean(POJO)来描述模型数据

两个测试的配置代码在同一个配置文件上

package org.mybatis.test;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.db.MybatisDbutil;


public class SelectListTest {
	
	public static void main(String[] args) throws IOException {
		MybatisDbutil  dbutil=new MybatisDbutil();//如果不是定义的静态方法,就要创建对象
		SqlSession session=dbutil.getSqlSession();
		//查询表中所有数据返回List集合,集合中每一个都是Map对象
	List<Map<String,Object>> list=session.selectList("org.mybatis.mapper.UserMapper.selectList");
	for(Map<String,Object> row:list){
		System.out.println(row);
	}
		session.commit();//mybatis的事务需要手动提交
		session.close();
		//
	}

}



{SEX=男, ID=6, NAM=ad, AGE=22}
{SEX=男, ID=7, NAM=ad, AGE=22}
{SEX=女, ID=8, NAM=test, AGE=18}
{SEX=女, ID=10, NAM=qwe, AGE=12}
{SEX=女, ID=11, NAM=qwe, AGE=12}
{SEX=女, ID=12, NAM=qwe, AGE=12}
{SEX=女, ID=13, NAM=INSERT, AGE=12}
{SEX=男, ID=14, NAM=JAVA, AGE=23}
{SEX=男, ID=15, NAM=C语言, AGE=50}
{SEX=男, ID=16, NAM=python, AGE=20}

   2.使用resultMapde情况

eclipse中   快捷键ctrl+shift+x   转为大写     ctrl+shift+y   转为小写

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace指用户自定义的命名空间。 -->
<mapper namespace="org.mybatis.mapper.UserMapper">


<resultMap  id="userResultMap" type="org.mybatis.domain.User" >
	<!-- id是表示主键 
	type 表示实际返回的类型-->
	
	<id  property="id" column="USER_ID" />
	<result  property="name" column="USER_NAME"/>
	<result  property="sex" column="USER_SEX"/>
	<!-- 这里coiumn的配置证明了与结果与数据库字段大小写内容无关但是名字一定要匹配 不匹配赋值为null -->
	<result  property="age" column="user_AGE"/>
	

</resultMap>
<!-- 
	id="save"是唯一的标示符
	parameterType属性指明插入时使用的参数类型
	useGeneratedKeys="true"表示使用数据库的自动增长策略
 -->
 <select id="selectresultMap"  resultMap="userResultMap">
 	select  * from tb_user2
 </select>
  <insert id="save" parameterType="org.mybatis.domain.User" useGeneratedKeys="true">
  	INSERT INTO TB_USER(name,sex,age) 
  	VALUES(#{name},#{sex},#{age})
  </insert>
 <select id="selectUser"  parameterType="int"  resultType="org.mybatis.domain.User">
  SELECT  * FROM TB_USER WHERE id=#{id}
  </select>
  <update id="modifyUser" parameterType="org.mybatis.domain.User">
  	UPDATE
      tb_user SET 	
  	 NAME=#{name},sex=#{sex},age=#{age} WHERE id=#{id} 
  </update> 
	<delete id="removeUser"  parameterType="int">
	delete  from tb_user  where id=#{id}
	</delete>
	<select id="selectList" resultType="map">
	select  * from tb_user
	</select>
</mapper>

package org.mybatis.test;

import java.io.IOException;
import java.util.List;


import org.apache.ibatis.session.SqlSession;
import org.mybatis.db.MybatisDbutil;
import org.mybatis.domain.User;

public class ResultMapTest {
	public static void main(String[] args) throws IOException {
		MybatisDbutil  dbutil=new MybatisDbutil();//如果不是定义的静态方法,就要创建对象
		SqlSession session=dbutil.getSqlSession();
		//查询表中所有数据返回List集合,集合中每一个都是Map对象
	List<User> user_list=session.selectList("org.mybatis.mapper.UserMapper.selectresultMap");
	for(User user:user_list){
		System.out.println(user);//记得重写toString方法
	}
		session.commit();//mybatis的事务需要手动提交
		session.close();
		//
	}

}


2018-02-04 14:20:07,724 [main] DEBUG [org.mybatis.mapper.UserMapper.selectresultMap] - ==>  Preparing: select * from tb_user2 
2018-02-04 14:20:07,760 [main] DEBUG [org.mybatis.mapper.UserMapper.selectresultMap] - ==> Parameters: 
2018-02-04 14:20:07,789 [main] DEBUG [org.mybatis.mapper.UserMapper.selectresultMap] - <==      Total: 5
User [id=1, name=张三, sex=null, age=18]
User [id=2, name=李四, sex=null, age=19]
User [id=3, name=王五, sex=null, age=20]
User [id=4, name=小美, sex=null, age=16]
User [id=5, name=校花, sex=null, age=18]





	
	<!-- 多表查询的基本操作 -->
	
	<!-- 映射学生表对象的resultMap-->
	<!-- id主键配置 -->
	<resultMap type="org.mybatis.domain.Student" id="studentresultMap">
		<id  property="id" column="id"/>
		<result  property="name"  column="name"/>
		<result  property="sex"  column="sex"/>
		<result  property="age"  column="age"/>
		<!-- 引用关系用关联映射   注意数据中表的字段calzz_id错误暂时不能修改  导致这里配置注意  要细心啊 -->
		<association property="clazz" column="calzz_id"	 javaType="org.mybatis.domain.Clazz"
		select="selectClazzWithId"/>
	</resultMap>
	<!-- 根据id查询班级 -->
	 <select id="selectClazzWithId"  resultType="org.mybatis.domain.Clazz">
		select * from tb_clazz  where  id = #{id}
	</select> 
	<!-- 查询所有学生信息  先执行 -->
	<select id="selectStudent"   resultMap="studentresultMap">
				select  * from  tb_student  
	</select>
	
	
	
	


2018-02-05 18:04:56,462 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudent] - ==>  Preparing: select * from tb_student 
2018-02-05 18:04:56,516 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudent] - ==> Parameters: 
2018-02-05 18:04:56,541 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====>  Preparing: select * from tb_clazz where id = ? 
2018-02-05 18:04:56,542 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====> Parameters: 1(Integer)
2018-02-05 18:04:56,558 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - <====      Total: 1
2018-02-05 18:04:56,561 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====>  Preparing: select * from tb_clazz where id = ? 
2018-02-05 18:04:56,561 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====> Parameters: 2(Integer)
2018-02-05 18:04:56,562 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - <====      Total: 1
2018-02-05 18:04:56,563 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudent] - <==      Total: 4
Student [id=1, name=jack, sex=男, age=22, clazz=Clazz [id=1, code=j1601]]
Student [id=2, name=rose, sex=女, age=21, clazz=Clazz [id=1, code=j1601]]
Student [id=3, name=Tom, sex=男, age=20, clazz=Clazz [id=2, code=j1602]]
Student [id=4, name=mary, sex=女, age=20, clazz=Clazz [id=2, code=j1602]]


<!-- 根据班级查学生,由于一个班级对应多个学生,所以查出来的结果应该是一个集合 下面进行 班级表的映射 -->

	<resultMap type="org.mybatis.domain.Clazz" id="classresultMap">
		<id property="id" column="id" />
		<result property="code" column="code" />
		<!-- 使用student表中的id作为参数 -->
		<collection property="students" javaType="ArrayList"

			column="id" ofType="org.mybatis.domain.Student" select="selectStudentWithId" />
	</resultMap>
	<select id="selectStudentWithId" resultType="org.mybatis.domain.Student">

		select * from tb_student where calzz_id= #{id}
	</select>
	<select id="selectClass" resultMap="classresultMap">

		select * from tb_clazz
	</select>



package org.mybatis.test;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.db.MybatisDbutil;
import org.mybatis.domain.Clazz;
import org.mybatis.domain.Student;

public class ClazzToStudentTest {

	public static void main(String[] args) throws IOException {
		MybatisDbutil  dbutil=new MybatisDbutil();//如果不是定义的静态方法,就要创建对象
		SqlSession session=dbutil.getSqlSession();
		//查询表中所有数据返回List集合,集合中每一个都是Map对象
	List<Clazz> clazz_list=session.selectList("org.mybatis.mapper.UserMapper.selectClass");
	for(Clazz clazz:clazz_list){
		System.out.println(clazz);//记得重写toString方法
		List<Student>  students=clazz.getStudents();
		for(Student  stu:students){
			System.out.println(stu.getId()+" "+stu.getName()+" "+stu.getSex()+" "+stu.getAge());
		}
	}
		session.commit();//mybatis的事务需要手动提交
		session.close();
		//
	}

}









2018-02-05 18:57:41,013 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClass] - ==>  Preparing: select * from tb_clazz 
2018-02-05 18:57:41,058 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClass] - ==> Parameters: 
2018-02-05 18:57:41,083 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====>  Preparing: select * from tb_student where calzz_id= ? 
2018-02-05 18:57:41,084 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====> Parameters: 1(Integer)
2018-02-05 18:57:41,122 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - <====      Total: 2
2018-02-05 18:57:41,125 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====>  Preparing: select * from tb_student where calzz_id= ? 
2018-02-05 18:57:41,125 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====> Parameters: 2(Integer)
2018-02-05 18:57:41,126 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - <====      Total: 2
2018-02-05 18:57:41,127 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClass] - <==      Total: 2
Clazz [id=1, code=j1601]
1 jack 男 22
2 rose 女 21
Clazz [id=2, code=j1602]
3 Tom 男 20
4 mary 女 20










  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值