Mybatis最入门---ResultMaps实例篇(一对一查询)
来源:互联网 发布:python 最大公约数 编辑:程序博客网 时间:2024/06/13 22:45
[一步是咫尺,一步即天涯]
前面我们花了两篇文章的篇幅叙述了Mybatis中最核心的resultMap配置,本文开始,我们来演示在实际开发中,如何配置和使用resultMap提供给我们强大功能。
准备工作:
a.操作系统 :win7 x64
b.基本软件:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基础
特别的,作为演示程序,还请各位看官不要纠结数据库的细节内容
-----------------------------------------------------------------------------------------------------------------------------------------------------------1.首先,我们现在数据库中建立一张用户信息表。【之前我们已经有一张sysuser表】,如下:
2.创建Mybatis04工程,工程结构图,如下:
3.修改pom文件,如下:(各位看官可以直接从前面工程复制过来即可)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.java.mybatis</groupId><artifactId>mybatis04</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>mybatis01</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies></project>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;}@Overridepublic 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 {privateString 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}@Overridepublic 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,具体内容如下;
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.csdn.ingo.dao.UserDao"><resultMap type="User" id="UserResult"><id property="id" column="id"/><result property="password" column="password"/><result property="userInfo.userid" column="userid"/><result property="userInfo.department" column="department"/><result property="userInfo.position" column="position"/><result property="userInfo.mobile" column="mobile"/><result property="userInfo.gender" column="gender"/><result property="userInfo.email" column="email"/></resultMap><select id="findUserInfoById" parameterType="String" resultMap="UserResult">select * from sysuser u,userinfo i where u.id=i.userid and u.id=#{id}</select></mapper>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。修改单元测试方法,如下:
@Testpublic 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的结果集合的写法,改造成如下内容:【其他内容保持不变】
<resultMap type="user" id="UserResult"><id property="id" column="id"/><result property="password" column="password"/><association property="userInfo" resultMap="UserInfoResult"></association></resultMap><resultMap type="userInfo" id="UserInfoResult"><id property="userid" column="userid"/><result property="department" column="department"/><result property="position" column="position"/><result property="mobile" column="mobile"/><result property="gender" column="gender"/><result property="email" column="email"/></resultMap>2.注意这里的别名配置,如果各位看官没有配置别名的话,最好使用全路径对象名。防止找不到对象,即type属性中的值
3.重新运行单元测试方法即可。
------------------------------------------------------------------------------------------------------------------------------------------------------
假设UserInfo的结果集合只与User集合关联查询,下面的写法也是正确的,如下:
------------------------------------------------------------------------------------------------------------------------------------------------------
1.把结果集合的写法,改造成如下内容:【其他内容保持不变】
<resultMap type="user" id="UserResult"><id property="id" column="id" /><result property="password" column="password" /><association property="userInfo" javaType="UserInfo"><id property="userid" column="userid" /><result property="department" column="department" /><result property="position" column="position" /><result property="mobile" column="mobile" /><result property="gender" column="gender" /><result property="email" column="email" /></association></resultMap>【特别注意,我们这里指定了<association>中的javaType属性,没有该属性,将会导致空指针异常】
-------------------------------------------------------------------------------------------------------------------------------------------------------
上面的这些做法都是,使用user的id属性来先查询user表,userinfo表。但是在实际开发中,我们经常是对每一个表都会创建对应的增改删查功能,并且也会配置其结果集合,即resultMap。所以,实际开发时,我们推荐下面的用法,仅供参考!
-------------------------------------------------------------------------------------------------------------------------------------------------------
1.我们增加对UserInfo查询的接口,UserInfoDao.java的具体内容如下:
public interface UserInfoDao {UserInfo findUserInfoById(String id);}2.创建UserInfoMapper.xml,具体内容如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.csdn.ingo.dao.UserInfoDao"><resultMap type="userInfo" id="UserInfoResult"><id property="userid" column="userid" /><result property="department" column="department" /><result property="position" column="position" /><result property="mobile" column="mobile" /><result property="gender" column="gender" /><result property="email" column="email" /></resultMap><select id="findUserInfoById" parameterType="String" resultMap="UserInfoResult">select * from userinfo where userid=#{id}</select></mapper>3.修改UserMapper.xml中的resultMap配置,具体内容如下:【其他内容不变】
<resultMap type="user" id="UserResult"><id property="id" column="id" /><result property="password" column="password" /><association property="userInfo" column="userid"select="com.csdn.ingo.dao.UserInfoDao.findUserInfoById"></association></resultMap>4.注意,这里请将UserInfoMapper.xml加入到mybatis-config.xml中的xml文件路径中,如下:
<mappers><mapper resource="mappers/UserMapper.xml" /><mapper resource="mappers/UserInfoMapper.xml" /></mappers>或者采用包名配置即可
5.执行单元测试方法,观察控制台输出即可。
--------------------------------------------------------------------------------------------------------------------------------------------------------
至此,Mybatis最入门---ResultMaps实例篇(一对一查询)结束
- Mybatis最入门---ResultMaps实例篇(一对一查询)
- Mybatis最入门---ResultMaps实例篇(一对一查询)
- Mybatis最入门---ResultMaps实例篇(一对多查询)
- Mybatis最入门---ResultMaps实例篇(一对多查询)
- Mybatis最入门---ResultMaps高级用法(上)
- Mybatis最入门---ResultMaps高级用法(下)
- Mybatis最入门---ResultMaps高级用法(上)
- Mybatis最入门---ResultMaps高级用法(上)
- Mybatis最入门---ResultMaps高级用法(下)
- Mybatis最入门---ResultMaps基本用法
- Mybatis最入门---ResultMaps基本用法
- Mybatis最入门---ResultMaps基本用法
- MyBatis的ResultMaps之一对一关系
- Mybatis入门--关联查询一对一
- mybatis查询(一对一查询)
- mybatis(7)一对一查询
- Mybatis最入门---分页查询(内部原理篇)
- Mybatis最入门---分页查询(内部原理篇)
- Xcode 之自己编译静态库
- [剑指offer]重建二叉树
- lintcode之 数组剔除元素后的乘积
- C语言简易计算器
- App组件之服务Service——翻译自developer.android.com
- Mybatis最入门---ResultMaps实例篇(一对一查询)
- Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published
- POJ 2251 Dungeon Master BFS&DFS
- 教你如何建高逼格个人网站
- 【Unity】Unity 3D中的内存管理
- android 自定义组合控件[有Demo]
- git 常用命令
- Android API Guides---Supporting Different Screens in Web Apps
- jquery实现checkbox全选,反选,取消选择