Mybatis最入门---ResultMaps实例篇(一对一查询)

[一步是咫尺,一步即天涯]

前面我们花了两篇文章的篇幅叙述了Mybatis中最核心的resultMap配置,本文开始,我们来演示在实际开发中,如何配置和使用resultMap提供给我们强大功能。

准备工作:

a.操作系统 :win7 x64

b.基本软件:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基础

特别的,作为演示程序,还请各位看官不要纠结数据库的细节内容

-----------------------------------------------------------------------------------------------------------------------------------------------------------

1.首先,我们现在数据库中建立一张用户信息表。【之前我们已经有一张sysuser表】,如下:

Mybatis最入门---ResultMaps实例篇(一对一查询)_第1张图片

2.创建Mybatis04工程,工程结构图,如下:

Mybatis最入门---ResultMaps实例篇(一对一查询)_第2张图片

3.修改pom文件,如下:(各位看官可以直接从前面工程复制过来即可)


	4.0.0

	com.java.mybatis
	mybatis04
	0.0.1-SNAPSHOT
	jar

	mybatis01
	http://maven.apache.org

	
		UTF-8
	

	
		
			junit
			junit
			4.12
			test
		
		
			org.mybatis
			mybatis
			3.3.1
		
		
			mysql
			mysql-connector-java
			5.1.26
		
		
			log4j
			log4j
			1.2.17
		
	

4.修改User.java,具体内容如下:

package com.csdn.ingo.entity;

import java.io.Serializable;

/**
*@author 作者 E-mail:ingo
*@version 创建时间:2016年4月17日下午6:25:27
*类说明
*/
@SuppressWarnings("serial")
public class User implements Serializable{
	
	private String id;
	private String password;
	private UserInfo userInfo;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public UserInfo getUserInfo() {
		return userInfo;
	}
	public void setUserInfo(UserInfo userInfo) {
		this.userInfo = userInfo;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(String id, String password, UserInfo userInfo) {
		super();
		this.id = id;
		this.password = password;
		this.userInfo = userInfo;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", password=" + password + ", userInfo=" + userInfo.toString() + "]";
	}
}
5.创建UserInfo.java,具体内容如下:

package com.csdn.ingo.entity;

import java.io.Serializable;

/**
*@author 作者 E-mail:ingo
*@version 创建时间:2016年4月20日下午7:19:18
*类说明
*/
@SuppressWarnings("serial")
public class UserInfo implements Serializable {
	
	private	String userid;
	private String department;
	private String position;
	private String mobile;
	private String gender;
	private String email;
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getDepartment() {
		return department;
	}
	public void setDepartment(String department) {
		this.department = department;
	}
	public String getPosition() {
		return position;
	}
	public void setPosition(String position) {
		this.position = position;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public UserInfo(String userid, String department, String position, String mobile, String gender, String email) {
		super();
		this.userid = userid;
		this.department = department;
		this.position = position;
		this.mobile = mobile;
		this.gender = gender;
		this.email = email;
	}
	public UserInfo() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "UserInfo [userid=" + userid + ", department=" + department + ", position=" + position + ", mobile="
				+ mobile + ", gender=" + gender + ", email=" + email + "]";
	}
	
}
6.修改UserDao.java,具体内容如下:

package com.csdn.ingo.dao;

import com.csdn.ingo.entity.User;

/**
*@author 作者 E-mail:ingo
*@version 创建时间:2016年4月17日下午6:26:40
*类说明
*/
public interface UserDao {
	User findUserInfoById(String id);
}
7.修改UserMapper.xml,具体内容如下;




	
		
		
		
		
		
		
		
		
	
	
 
8.我们这里再给出SqlSessionFactoryUtil.java的内容,如下:

package com.csdn.ingo.util;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoryUtil {

	private static SqlSessionFactory sqlSessionFactory;
	
	public static SqlSessionFactory getSqlSessionFactory(){
		if(sqlSessionFactory==null){
			InputStream inputStream=null;
			try{
				inputStream=Resources.getResourceAsStream("mybatis-config.xml");
				sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return sqlSessionFactory;
	}
	
	public static SqlSession openSession(){
		return getSqlSessionFactory().openSession();
	}
}
9。修改单元测试方法,如下:

@Test
	public void testSelet() {
		UserDao userDao = sqlSession.getMapper(UserDao.class);
		String id = "admin";
		User curUser = userDao.findUserInfoById(id);
		if(curUser!=null){
			log.info("成功找到用户:"+curUser.toString());
		}
	}

10。鉴于篇幅的关系,其他文件请参考前文基本增改删查工程中的配置。

11.测试方法:运行单元测试方法即可。观察控制台输出,如下:

Mybatis最入门---ResultMaps实例篇(一对一查询)_第3张图片

------------------------------------------------------------------------------------------------------------------------------------------------------

如果有阅读过前文的观众,一定知道这种写法是我们极为不推荐的做法。下面,介绍能够重用的写法:

------------------------------------------------------------------------------------------------------------------------------------------------------
1.为了使得集合能够重用,我们把userinfo的结果集合的写法,改造成如下内容:【其他内容保持不变】


		
		
		
	
	
		
		
		
		
		
		
	
2.注意这里的别名配置,如果各位看官没有配置别名的话,最好使用全路径对象名。防止找不到对象,即type属性中的值

3.重新运行单元测试方法即可。

------------------------------------------------------------------------------------------------------------------------------------------------------

假设UserInfo的结果集合只与User集合关联查询,下面的写法也是正确的,如下:

------------------------------------------------------------------------------------------------------------------------------------------------------
1.把结果集合的写法,改造成如下内容:【其他内容保持不变】

	
		
		
		
			
			
			
			
			
			
		
	
【特别注意,我们这里指定了中的javaType属性,没有该属性,将会导致空指针异常】

-------------------------------------------------------------------------------------------------------------------------------------------------------

上面的这些做法都是,使用user的id属性来先查询user表,userinfo表。但是在实际开发中,我们经常是对每一个表都会创建对应的增改删查功能,并且也会配置其结果集合,即resultMap。所以,实际开发时,我们推荐下面的用法,仅供参考!

-------------------------------------------------------------------------------------------------------------------------------------------------------

1.我们增加对UserInfo查询的接口,UserInfoDao.java的具体内容如下:

public interface UserInfoDao {
	UserInfo findUserInfoById(String id);
}
2.创建UserInfoMapper.xml,具体内容如下:




	
		
		
		
		
		
		
	
	
 
3.修改UserMapper.xml中的resultMap配置,具体内容如下:【其他内容不变】


		
		
		
	
4.注意,这里请将UserInfoMapper.xml加入到mybatis-config.xml中的xml文件路径中,如下:

	
		
		
	
或者采用包名配置即可

5.执行单元测试方法,观察控制台输出即可。

--------------------------------------------------------------------------------------------------------------------------------------------------------

至此,Mybatis最入门---ResultMaps实例篇(一对一查询)结束


你可能感兴趣的:(Mybatis)