一、假定一个父母有多个孩子,那父母和孩子对应关系为1对多。
二、 1、添加依赖包,参考上篇文章
2、初始化数据库和初始数据,以mysql为例
DROP DATABASE IF EXISTS moy_mybatis;CREATE DATABASE moy_mybatis CHARACTER SET UTF8;USE moy_mybatis;DROP TABLE IF EXISTS t_children;CREATE TABLE t_children( children_id INT(11), children_name VARCHAR(50) DEFAULT NULL, children_birthday DATE DEFAULT NULL, parent_id INT(11) NOT NULL, PRIMARY KEY (`children_id`));DROP TABLE IF EXISTS t_parent;CREATE TABLE t_parent( id INT(11) , name VARCHAR(50) DEFAULT NULL, birthday DATE DEFAULT NULL, PRIMARY KEY (id));INSERT INTO t_children(children_id,children_name,children_birthday,parent_id)VALUES (1,'一号熊孩子',now(),1);INSERT INTO t_children(children_id,children_name,children_birthday,parent_id)VALUES (2,'二号熊孩子',now(),1);INSERT INTO t_children(children_id,children_name,children_birthday,parent_id)VALUES (3,'三号熊孩子',now(),2);INSERT INTO t_parent(id,name,birthday)VALUES (1,'一号父母',now());INSERT INTO t_parent(id,name,birthday)VALUES (2,'二号父母',now());
3、新建实体类Children和Parent
package com.moy.mybatis3.entity;import java.util.Date;/** * [Project]:moy-gradle-project * [Email]:moy25@foxmail.com * [Date]:2018/2/19 * [Description]: * * @author YeXiangYang */public class Children { private int childrenId; private String childrenName; private Date childrenBirthday; public int getChildrenId() { return childrenId; } public void setChildrenId(int childrenId) { this.childrenId = childrenId; } public String getChildrenName() { return childrenName; } public void setChildrenName(String childrenName) { this.childrenName = childrenName; } public Date getChildrenBirthday() { return childrenBirthday; } public void setChildrenBirthday(Date childrenBirthday) { this.childrenBirthday = childrenBirthday; } @Override public String toString() { return "Children{" + "childrenId=" + childrenId + ", childrenName='" + childrenName + '\'' + ", childrenBirthday=" + childrenBirthday + '}'; }}
package com.moy.mybatis3.entity;import java.util.Date;import java.util.List;/** * [Project]:moy-gradle-project * [Email]:moy25@foxmail.com * [Date]:2018/2/19 * [Description]: * * @author YeXiangYang */public class Parent { private int id; private String name; private Date birthday; private Listchildren; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } @Override public String toString() { return "Parent{" + "id=" + id + ", name='" + name + '\'' + ", birthday=" + birthday + ", children=" + children + '}'; }}
4、新建实体对应配置文件Children.xml和Parent.xml
5、编写接口ParentMapper
package com.moy.mybatis3.mapper;import com.moy.mybatis3.entity.Parent;/** * [Project]:moy-gradle-project * [Email]:moy25@foxmail.com * [Date]:2018/2/19 * [Description]: * * @author YeXiangYang */public interface ParentMapper extends BaseMapper{ Parent queryParentAndChildren(int id);}
6、为了方便测试,编写一个获取SqlSession的工具类Mybatis3Utils
package com.moy.mybatis3.utils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.Reader;import java.util.Objects;/** * [Project]:moy-gradle-project * [Email]:moy25@foxmail.com * [Date]:2018/2/19 * [Description]: * * @author YeXiangYang */public abstract class Mybatis3Utils { public static final SqlSessionFactory sqlSessionFactory; public static final ThreadLocalsessionThread = new ThreadLocal<>(); static { try { Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { throw new RuntimeException(e); } } public static SqlSession getCurrentSqlSession() { SqlSession sqlSession = sessionThread.get(); if (Objects.isNull(sqlSession)) { sqlSession = sqlSessionFactory.openSession(); sessionThread.set(sqlSession); } return sqlSession; } public static void closeCurrentSession() { SqlSession sqlSession = sessionThread.get(); if (Objects.nonNull(sqlSession)) { sqlSession.close(); } sessionThread.set(null); }}
7、新建mybatis配置信息文件mybatis-config.xml
8、编写测试类ParentMapperTest
package com.moy.mybatis3.mapper;import com.moy.mybatis3.entity.Children;import com.moy.mybatis3.entity.Parent;import com.moy.mybatis3.utils.Mybatis3Utils;import org.apache.ibatis.session.SqlSession;import org.junit.After;import org.junit.Before;import org.junit.Test;import java.util.List;import static org.junit.Assert.*;/** * [Project]:moy-gradle-project * [Email]:moy25@foxmail.com * [Date]:2018/2/20 * [Description]: * * @author YeXiangYang */public class ParentMapperTest { SqlSession sqlSession; ParentMapper parentMapper; @Before public void before() { sqlSession = Mybatis3Utils.getCurrentSqlSession(); parentMapper = sqlSession.getMapper(ParentMapper.class); } @After public void after() { Mybatis3Utils.closeCurrentSession(); } @Test public void queryParentAndChildren() { Parent parent = parentMapper.queryParentAndChildren(1); System.out.println(parent); }}
yexiangyang
moyyexy@gmail.com