先给大家看一下我的项目 整个的一个 构造:

好,然后 开始我的mybatis关系,用的是mysql

1.首先,先导入依赖:

<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.4.5</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.43</version>
</dependency>

2.然后,连接数据库,写mybatis-config.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--  懒加载 -->
<settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/><setting name="cacheEnabled" value="true"/>
</settings><!--设置别名-->
    <typeAliases><!--<typeAlias type="com.desert.Dto.MyPerson" alias="a"></typeAlias>-->
        <package name="com.desert"></package></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><!-- Q  加载dao方法 -->

        <!--一对一-->
            <mapper class="com.desert.dao.ICardDao"/><mapper class="com.desert.dao.IPersonDao"/><!--一对多-->
        <mapper class="com.desert.dao.ICityDao"></mapper><mapper class="com.desert.dao.IProvincesDao"></mapper><!--多对多-->
        <mapper class="com.desert.dao.IUserDao"></mapper><mapper class="com.desert.dao.IRolesDao"></mapper></mappers>
</configuration>

一:说一下 我的一对一关系:

一对一我那Person和Card拿来做实列:

Person表:

private String pname;
private int pid;
private int page;private Card card;

-------------------------------------------------------------

Person数据库:

然后 再是我的Card表:(也可以定义一个Person属性,这里我就不定义了)

private int uid;
private String cnumber;

------------------------------------
数据库:


然后,再是我的dao方法:
IPersonDao:
public interface IPersonDao {@Select("select * from person where pid = #{pid}")@Results({@Result(id=true,column="pid",property="pid"),@Result(column="pname",property="pname"),@Result(column="page",property="page"),@Result(column="pid",property="card",one=@One(select="com.desert.dao.ICardDao.getCard",fetchType= FetchType.EAGER))})public Person getPerson(int pid);}
ICardDao:
public interface ICardDao {@Select("select * from card where uid = #{uid} ")public Card getCard(int uid);}
这样,一个简单的一对一关系就好了。
然后,再是去测试

@Test   //一对一
public void Testonttoone() throws IOException {SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config"));SqlSession sqlSession = sqlSessionFactory.openSession();IPersonDao iPersonDao=sqlSession.getMapper(IPersonDao.class);// 根据id查询Person对象,同时需要获得关联的Card对象
   Person person=iPersonDao.getPerson(1);System.out.println(person);System.out.println(person.getCard().getCnumber());sqlSession.close();}

二:再说一下 一对多的关系:

这里 我拿省份(Provinces)和城市(Citys)拿来做实列:

Provinces表:

private int pid;
private String pname;private Set<Citys> citysSet;
--------------------------------
数据库:

Citys表:

private int cid;

private String cname;

private int pid;
--------------------------------------------
数据库:

然后,再是我的dao方法:

IProvincesDao:

public interface IProvincesDao {@Select("select * from provinces where pid = #{pid}")@Results({@Result(id=true,column="pid",property="pid"),@Result(column="pname",property="pname"),@Result(column="pid",property="citysSet",many=@Many(select="com.desert.dao.ICityDao.getCitybypid",fetchType= FetchType.LAZY
                    ))})public Provinces getProvincesByid(int pid);}

ICitysDao:

public interface ICityDao {@Select("select * from city where pid=#{pid}")public List<Citys> getCitybypid(int pid);}

之后,再mybatis-config加载之后,就可以测试了:

测试类:

@Test   //一对多
public void Testonttomany() throws IOException {SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config"));SqlSession sqlSession = sqlSessionFactory.openSession();IProvincesDao iProvincesDao=sqlSession.getMapper(IProvincesDao.class);Provinces provinces=iProvincesDao.getProvincesByid(1);System.out.println(provinces.getPname());for (Citys citys : provinces.getCitysSet()) {System.out.println(citys.getCname());}sqlSession.close();}

三:再是我的多对多,这里,拿用户(Users)和角色(Roles)来做实列:

Users:

private int uid;
private String uname;private Set<Roles> roles;
------------------------------------------------
数据库:



Roles:
private int rid;
private String rname;private Set<Users> users;

-----------------------------------------

数据库:

然后 再是我的IUsersDao:

public interface IUserDao {//根据id得到用户:
    @Select("select * from users where uid = #{uid}")@Results({@Result(id=true,column="uid",property="uid"),@Result(column="uname",property="uname"),@Result(column="uid",property="roles",many=@Many(select="com.desert.dao.IRolesDao.getAllRolesByuid",fetchType= FetchType.LAZY
                    ))})public Users getUsersById(int uid);}

我的IRolesDao:

public interface IRolesDao {//根据用户id得到所有的角色:

    @Select("select * from roles where rid in(select rid from u_r where uid=1)")public List<Roles> getAllRolesByuid(int uid);}

然后,在mybatis-config加载好配置文件 就可以直接去测试了:

@Test   //多对多
public void Testmanytomany() throws IOException {SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config"));SqlSession sqlSession = sqlSessionFactory.openSession();IUserDao iUserDao=sqlSession.getMapper(IUserDao.class);Users users=iUserDao.getUsersById(1);System.out.println(users.getUname());for (Roles roles : users.getRoles()) {System.out.println(roles.getRname());}

    sqlSession.close();}

其实个人觉得 mybatis中注解比xml配置文件 好用些

mybatis用注解实现 一对一,一对多,多对多哟相关推荐

  1. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  2. mybatis的一对一 一对多 多对多

    mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...

  3. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  4. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  5. JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置 ----喝最烈的酒.

    1.Mybatis多表查询 1.1 一对一查询 1.1.1 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单 ...

  6. Mybatis—— 使用注解实现一对一复杂关系映射及延迟加载

    @Results 注解 代替的是标签<resultMap> 该注解中可以使用单个@Result 注解,也可以使用@Result 集合 @Results({@Result(),@Result ...

  7. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  8. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...

  9. Django一对一 ,一对多,多对多

    Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...

  10. 高级MyBatis -- resultMap实现联表(一对多,多对一)

    前言: 结合实际生活来看联表,拿一个习以为常的例子来说,学生和老师: 多个学生对应一个老师 -- 多对一 (当然是在一个课堂上,嘻嘻) 一个老师对应多个学生 -- 一对多 (同上) 在实际操作时,我们 ...

最新文章

  1. PyTorch 训练可视化教程 visdom
  2. cxGrid功能_用于备查【转】
  3. 基于Tablestore管理海量快递轨迹数据架构实现
  4. 多线程-共享全局变量(python版)
  5. Python05 梯形公式 Simpson公式 Cotes公式 Romber公式(附代码)
  6. android检测手机网络连接不上,Android WIFI及手机网络连接情况检查
  7. VisualBrush
  8. 助力开发者的魔法式“绝招儿”,你了解几个?
  9. 深入理解分布式事务(XA及rocketmq事务)
  10. oracle excel总结,oracle导出excel 步骤总结
  11. PS:更换证件照背景颜色
  12. 市场规模、市场份额、市场定位、产品类型以及发展规划-园艺电动工具
  13. 光盘刻录 CD刻录软件 Ashampoo Burning Studio特别版 刻录CD就这么简单
  14. win7计算机出现空白图标,win7任务栏右下角图标显示为空白如何解决_win7任务栏右下角图标空白怎么去掉...
  15. 【JavaWeb】火车票管理系统 (三)用户登录-03
  16. 字蛛的用法以及遇到的问题
  17. 程序员电脑组装_解密中国互联网企业创始人,程序员是如何打下半壁江山的?...
  18. 2018华北五省计算机应用大赛,“远洋航空杯”2019年华北五省(市、自治区) 及港澳台大学生计算机应用大赛隆重举行...
  19. 凸优化——凸优化问题与算法
  20. Linux音频驱动之二:Control接口的调用

热门文章

  1. ODT,ZQ校准,OCT,TDQS
  2. 生成文字和二维码合成
  3. 蘑菇街 App 的组件化之路·续
  4. Only fullscreen activities can request orientation终极解决方法
  5. IDEA集成Gerrit插件
  6. 黑马旅游网 —— 登录/注册案例
  7. 计算机发展趋势 网络化,计算机的发展趋势表现在多极化网络化等几个方面
  8. 在 Coq 中形式化 100 个定理
  9. mysql数据库有什么应用场景_科普:云数据库MySQL的几种应用场景
  10. Android appWidget——每日一句应用开发