[一步是咫尺,一步即天涯]
前面我们花了两篇文章的篇幅叙述了Mybatis中最核心的resultMap配置,本文开始,我们来演示在实际开发中,如何配置和使用resultMap提供给我们强大功能。
准备工作:
a.操作系统 :win7 x64
b.基本软件:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基础
特别的,作为演示程序,还请各位看官不要纠结数据库的细节内容
-----------------------------------------------------------------------------------------------------------------------------------------------------------1.首先,我们现在数据库中建立一张用户信息表。【之前我们已经有一张sysuser表】,如下:
2.创建Mybatis04工程,工程结构图,如下:
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.测试方法:运行单元测试方法即可。观察控制台输出,如下:
------------------------------------------------------------------------------------------------------------------------------------------------------
如果有阅读过前文的观众,一定知道这种写法是我们极为不推荐的做法。下面,介绍能够重用的写法:
------------------------------------------------------------------------------------------------------------------------------------------------------
1.为了使得集合能够重用,我们把userinfo的结果集合的写法,改造成如下内容:【其他内容保持不变】
2.注意这里的别名配置,如果各位看官没有配置别名的话,最好使用全路径对象名。防止找不到对象,即type属性中的值
3.重新运行单元测试方法即可。
------------------------------------------------------------------------------------------------------------------------------------------------------
假设UserInfo的结果集合只与User集合关联查询,下面的写法也是正确的,如下:
------------------------------------------------------------------------------------------------------------------------------------------------------
1.把结果集合的写法,改造成如下内容:【其他内容保持不变】
【特别注意,我们这里指定了-------------------------------------------------------------------------------------------------------------------------------------------------------
上面的这些做法都是,使用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实例篇(一对一查询)结束