mysql map 关联查询_Mybatis基本知识七:关联关系查询:一对多关联查询

上一篇文章:《Mybatis基本知识六:多参数接收问题》

若文中有纰漏,请多多指正!!!

1. 前言

当查询的结果涉及多张具有关联关系的表时,就需要进行关联关系查询。根据表和表之间的关联关系的不同,关联关系查询大致分为以下几类:一对多关联查询

一对一关联查询

多对多关联查询

多对一关联查询

这里的关联查询是指:在查询一方的时候,同时将关联的另一方的信息也查询出来。

本节主要分析【一对多关联查询】,其他关联查询,在后续章节中分析。

2. 一对多关联查询

一对多关联查询:是指在查询一的一方的时候会将其所关联的多的一方的数据也查询出来。 一对多关联查询在mapper配置查询时又可以大致分两种配置写法:多表连接查询

多表单独查询

下面的示例中将以表Country(国家)和表Provice(区域)举例说明一对多关联查询的应用:一个国家可以有多个区域划分。1) 数据定义(MySql)

/**国家*/

create table Country(

id int primary key auto_increment comment '主键',

cname varchar(50) comment '名称'

);

INSERT INTO `country` VALUES (1, '北京');

INSERT INTO `country` VALUES (2, '天津');

/**地区*/

create table Provice(

id int primary key auto_increment comment "主键",

pname varchar(50) comment "名称",

cid int comment "Country主键Id"

);

INSERT INTO `provice` VALUES (1, '红桥区', 2);

INSERT INTO `provice` VALUES (2, '北辰区', 2);

INSERT INTO `provice` VALUES (3, '海淀区', 1);

INSERT INTO `provice` VALUES (4, '朝阳区', 1);2) 实体类定义

需要注意如果实体类定义的是双向关联时,即在实体类中都将对方作为域属性出现,那么toStirng()方法定义时要引起高度注意,不要让toString()方法都可以输出对方的信息,避免出现循环递归调用,程序异常。为避免这种情况,我们只让主查询的一方输出关联的信息即可。

/**

* 国家

* @author Administrator

* @description 一的一方

*/

public class Country {

private Integer id;//主键

private String cname;//名称

private List provices;//省份

//setter and getter and toString

}

/**

* 区域

* @author Administrator

* @description 多的一方

*/

public class Provice {

private Integer id;

private String pname;//名称

private Integer cid;//Country主键Id

//setter and getter and toString

}3)接口定义

/**

* 一对多查询

*/

public interface CountryDao {

/**

* 根据Country主键查询该国家下的所有区域

* 多表单独查询

*/

Country findCountryByIdSingle(Integer id);

/**

* 根据Country主键查询该国家下的所有区域

* 多表连接查询

*/

Country findCountryByIdGather(Integer id);

}4)测试定义

public class TestDemo {

private CountryDao dao;

private SqlSession sqlsession;

@Before

public void setUp() throws Exception{

sqlsession = MyBatisUtil.getSqlSession();

dao = sqlsession.getMapper(CountryDao.class);

}

/**

* 一对多查询:

* 在查询一方对象数据的时候,同时将其关联的多方对象的数据也都关联查询出来。

*/

@Test

public void findCountry(){

//1.多表单独查询

Country single = dao.findCountryByIdSingle(1);

System.out.println(single);

//2.多表连接查询

Country gather = dao.findCountryByIdGather(2);

System.out.println(gather);

}

@After

public void setDown(){

//关闭资源

if(sqlsession != null){

sqlsession.close();

}

}

}5)多表单独查询

多表单独查询是指多张表根据关联字段各自查询出各自的相关内容,最后将主表的查询结果联合其他表的查询结果,封装成一个对象去返回。

注意:如果查询是跨映射文件的,那么在查询使用的id时一定要加上其对应映射文件的namespace。mapper配置

select * from country where id = #{id}

select="selectProviceByCid" column="id"/>

select * from provice where cid = #{id}

测试结果

Country [id=1, cname=北京, provices=[Provice [id=3, pname=海淀区, cid=1], Provice [id=4, pname=朝阳区, cid=1]]]6)多表连接查询

多表连接查询是指多张表根据关联字段组成一张表的形式进行查询。mapper配置

select c.id counid,c.cname,p.id pid,p.pname,p.cid from country c,provice p

where c.id = p.cid and c.id = #{id}

测试结果

Country [id=2, cname=天津, provices=[Provice [id=1, pname=红桥区, cid=2], Provice [id=2, pname=北辰区, cid=2]]]7)练习源码地址

链接:https://pan.baidu.com/s/1kkVnkE9rjwjGcLeHgJ1gdg

提取码:gorf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis PageHelper 是一个 MyBatis 分页插件,能够快速、便捷的进行分页查询,支持多种数据库。使用 PageHelper 可以避免手写 SQL 语句进行分页操作,同时 PageHelper 支持物理分页和逻辑分页两种方式。 下面是使用 PageHelper 进行分页查询的步骤: 1. 导入 PageHelper 依赖 Maven 项目在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.11</version> </dependency> ``` 2. 配置 PageHelper 在 MyBatis 的配置文件中添加以下配置: ``` <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins> ``` 其中 dialect 属性指定了数据库类型,PageHelper 支持的数据库类型包括:oracle、mysql、mariadb、sqlite、hsqldb、postgresql、db2、sqlserver、informix、达梦、人大金仓、南大通用、神通、PostgreSQL9.3-9.5。 3. 使用 PageHelper 进行分页查询 在需要进行分页查询的方法中使用 PageHelper.startPage 方法进行分页设置,然后调用查询方法获取查询结果。例如: ``` PageHelper.startPage(1, 10); // 第一页,每页显示 10 条记录 List<User> userList = userDao.selectUserList(); // 查询用户列表 PageInfo<User> pageInfo = new PageInfo<>(userList); // 封装分页结果 ``` 其中 PageHelper.startPage 方法接收两个参数,第一个参数为当前页码,第二个参数为每页显示的记录数。 最后使用 PageInfo 类对查询结果进行封装,得到分页结果。PageInfo 类中包含了分页信息和查询结果。 以上就是使用 MyBatis PageHelper 进行分页查询的基本步骤。需要注意的是,在使用 PageHelper 进行分页查询时,需要确保查询语句中不要使用 limit 关键字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值