案例   查询国家的同时,查询出国家下的省会信息!

01.使用单表的连接查询

创建对应的实体类 和数据库表

/**
*
*国家的实体类
*/
public class Country { private Integer cId; //国家的编号
private String cName; //国家的名称
//关联省会的属性
private Set<Provincial> provincials;
public Integer getcId() {
return cId;
}
public void setcId(Integer cId) {
this.cId = cId;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
public Set<Provincial> getProvincials() {
return provincials;
}
public void setProvincials(Set<Provincial> provincials) {
this.provincials = provincials;
}
public Country(Integer cId, String cName, Set<Provincial> provincials) {
super();
this.cId = cId;
this.cName = cName;
this.provincials = provincials;
}
public Country() {
super();
}
@Override
public String toString() {
return "Country [cId=" + cId + ", cName=" + cName + ", provincials="
+ provincials + "]";
} }
/**
*
*省会对应的实体类
*/
public class Provincial {
private Integer pId; //省会的编号
private String pName; //省会名称 public Integer getpId() {
return pId;
}
public void setpId(Integer pId) {
this.pId = pId;
}
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
public Provincial(Integer pId, String pName) {
super();
this.pId = pId;
this.pName = pName;
}
public Provincial() {
super();
}
@Override
public String toString() {
return "Provincial [pId=" + pId + ", pName=" + pName + "]";
} }

创建对应的dao和mapper文件

public interface CountryDao {
/**
* 根据国家的id查询出国家的信息 以及国家下面的省会信息
*/
Country selectCountryById(Integer cId);
}
<?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">
<mapper namespace="cn.bdqn.dao.CountryDao"> <!-- 这里的resultMap和之前使用的不一样,哪怕属性和字段一致 也要书写
因为mybatis在底层封装的时候,是根据我们resultMap中写的属性来的 -->
<resultMap type="Country" id="countryMap">
<id property="cId" column="cid"/>
<result property="cName" column="cname"/>
<!-- 设置关联的集合属性 -->
<collection property="provincials" ofType="Provincial">
<id property="pId" column="pid"/>
<result property="pName" column="pname"/>
</collection>
</resultMap>
<!-- 这是单表的关联查询 不经常使用 因为 不能使用延迟加载 -->
<select id="selectCountryById" resultMap="countryMap">
select cid,cname,pid,pname from country,provincial
where cid=countryid and cid=#{xxx} <!--#{xxx} 参数的占位符 -->
</select>
</mapper>

在MyBatis.xml文件中 管理Mapper文件

<!-- 加载映射文件信息 -->
<mappers>
<mapper resource="cn/bdqn/dao/CountryMapper.xml" />
</mappers>

测试类代码

public class CountryTest {
CountryDao dao;
SqlSession session; @Before
public void before() {
// 因为需要关闭session 需要把session提取出去
session = SessionUtil.getSession();
dao = session.getMapper(CountryDao.class);
} @After
public void after() {
if (session != null) {
session.close();
}
} /**
* 根据国家的id查询出国家的信息 以及国家下面的省会信息
*/
@Test
public void test1() {
Country country = dao.selectCountryById(1);
System.out.println(country);
} }

02.使用多表的查询

修改mapper.xml文件中代码即可    其他代码不变

<?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">
<mapper namespace="cn.bdqn.dao.CountryDao"> <select id="selectProvincialByCountryId" resultType="Provincial">
select pid,pname from provincial
where countryid=#{xxx}
<!--#{xxx} 对应的就是resultMap中 collection节点下面的column -->
</select> <resultMap type="Country" id="countryMap">
<id property="cId" column="cid"/>
<result property="cName" column="cname"/>
<!--设置关联的集合属性
select:需要关联的查询语句
column: select关联语句中需要的参数 -->
<collection property="provincials" ofType="Provincial"
select="selectProvincialByCountryId"
column="cid"/>
</resultMap> <!-- 多表的查询 经常使用 可以使用延迟加载策略 -->
<select id="selectCountryById" resultMap="countryMap">
select cid,cname from country where cid=#{xxx}
<!--#{xxx} 用户传递过来的ID -->
</select> </mapper>

最新文章

  1. TypeScript: Angular 2 的秘密武器(译)
  2. webpack解惑:require的五种用法
  3. unreal slate 创建 window
  4. 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件
  5. GitHub上新建或删除仓库Repository
  6. 更改SharePoint 2007/2010/2013 Web 应用程序端口号
  7. 禁止用户选定文本: user-select
  8. Quartz.NET
  9. 自己写的一个Yeoman的Generator-Require-Angularjs
  10. sql 大数据库 插入超时问题解决
  11. [NodeJS] Deploy a Node Application with the Now CLI
  12. ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法
  13. JWPlayer使用指南
  14. [编织消息框架][netty源码分析]2 eventLoop
  15. chrome 浏览器最小字体为12px 的解决办法
  16. vs2017开发IOS(vs2017 xamarin 连接mac)
  17. Docker五大优势:持续集成、版本控制、可移植性、隔离性和安全性
  18. ORACLE获取SQL绑定变量值的方法总结
  19. 【SQL】数据库中的五种约束
  20. 2016年3月12日Android学习笔记

热门文章

  1. nginx配置实例
  2. 【性能提升神器】Covering Indexes
  3. 小程序学习笔记五:API
  4. 怎么样加快JavaScript加载和执行效率
  5. 阿里云提示WordPress“/wp-includes/http.php输入IP验证不当”的解决办法
  6. Sql Server 增加字段、修改字段、修改类型、修改默认值(转)
  7. 【转载】SpringCloud-Eurek 心跳阈值说明
  8. iOS Message from debugger: Terminated due to memory issue ~解决方法
  9. name转json
  10. Mac下,如何把项目托管到github