mybatis多表查询,一对一查询


一对一
前提条件

什么时候会用到一对一?

    假设有两张表,一张用户表,一张账号表,用户只能有一个账户,而用户信息和账户信息都放到一张表里就很显得数据很冗余。所以就分出来两张表。假设一款游戏,要做登录验证,用户名和密码就可以单独出来一个表,因为登录的时候只查询的是用户名和密码,所以单独一个表出来是最佳方案,这样查询速度快, 同时用户密码表也要关联上用户信息表。

一对一设计的两种方案

    主键共享 (pk+fk)外键唯一 (fk+unique)

一对一查询

一对一查询有两种方式
1. 创建子类 (不常用)
2. 从表中有实体引用(常用)

准备环境
现在有两种表,一张用户名(从表),一张账户表(主表)

    从表实体类中应该含一个主表实体的包对象引用
public class Account {
private Integer id;
private Integer uid;
private Double money;
//从表实体类中应该有一个主表的对象
private User user;
//提供getset方法 该重写的方法重写了
}

    准备的SQL语句
select
a.*,u.id,u.name,u.password
from
account a
join
user u
on
a.uid = u.id

    因为Account(子表)表中有一个主表的对象,那么再查询结果封装的时候是 没办法把User封装进去的,需要这样设置(在映射文件中写 resultMap)
<!--定义一个能封装account和user的resultMap-->
<resultMap id="accountUserMap" type="Account">
<!--定义主键字段-->
<id property="id" column="id"></id>
<!--定义非主键字段-->
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>

<!--一对一的关系映射:配置user的内容-->
<!--property:该实体类中的哪个对应关系的主表属性-->
<!--column:通过哪一个 字段进行获取的-->
<!--javaType:最后的结果封装到哪个类 正常写法是com.xxx.xx 用了TypeAlia..所以直接类名-->
<association property="user" column="uid" javaType="User">
<!--在里面写User的属性和数据库对应起来-->
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="password" column="password"></result>
</association>
</resultMap>

    sql语句原封不动的写就行 (这里写上 resultMap起的id名)
<select id="findAll" resultMap="accountUserMap">
select
a.*,u.id,u.name,u.password
from
account a
join
user u
on
a.uid = u.id
</select>

这样就能查询出来了


下一篇更新: 多表查询 一对多查询

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

mybatis多表查询,一对一查询

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » mybatis多表查询,一对一查询
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏