Mybatis 基于注解开发 实现 多对一关联关系 一对多关联关系

多对一关联关系 Mybatis中是通过一对一实现的
例如 “账户:用户”是多对一的关系,但是对于每一个账户而言只对应一个用户
在这里插入图片描述
在这里插入图片描述

账户类

public class Account implements Serializable {
    private Integer id;
    private Integer uid;
    private Double money;

    //多对一(mybatis中的一对一)的映射:一个账户对应一个用户
    private  User user;
	//...
	//此处省略了set 和get 以及toString
}

用户类

public class User implements Serializable {
    private Integer id;
    private String username;
    private String  sex;
    private String address;
    private Date birthday;

    //一对多的关系映射:一个用户包含多个账户
    private List<Account> accountList;
	//...
	//此处省略了set 和get 以及toString
}

IAccountDAO.interface


public interface IAccountDAO {

//此处使用了立即加载,在获取账户时,一同查询账户所对应的用户的信息
    @Select("select * from account")
    @Results(id = "accountMap",
            value = {
            @Result(id = true,column = "id",property = "id"),
            @Result(column = "uid" ,property = "uid"),
            @Result(column = "money" ,property = "money"),
            @Result(property = "user" ,column = "uid" ,one=@One(select="com.xxx.dao.IUserDAO.findById",fetchType = FetchType.EAGER))
})
    List<Account> findALL();

    @Select("select * from account where uid=#{uid}")
    List<Account> findAccountByUid(Integer uid);
}

IUserDAO.interface

public interface IUserDAO {
    @Select("select * from user where id=#{id}")
    User findById(Integer id);

//此处使用了懒加载,即只有在要获取用户的账户信息时才会去查询
    @Results(
            id = "userMap",
            value = {
                    @Result(column = "id", property = "id", id = true),
                    @Result(column = "username", property = "username"),
                    @Result(column = "sex", property = "sex"),
                    @Result(column = "birthday", property = "birthday"),
                    @Result(column = "address", property = "address"),
                    @Result(property = "accountList",
                            column = "id",
                            many = @Many(
                                    select = "com.zrr.dao.IAccountDAO.findAccountByUid",
                                    fetchType = FetchType.LAZY
                            )
                    )})
    @Select("select * from user ")
    List<User> findALL();
}

测试|IAccountDAO实现的方法


public class TestAccount {
    private InputStream in;

    private SqlSession session;
    private IAccountDAO iAccountDAO;

    @Before
    public void init() throws IOException {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2创建工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        session = factory.openSession();
        iAccountDAO = session.getMapper(IAccountDAO.class);
    }

    @After
    public void destory() throws IOException {
        //提交事務
        session.commit();
        session.close();
        in.close();

    }

    @Test
    public void testFindAll(){
      List<Account> accounts= iAccountDAO.findALL();
        for (Account a:accounts
             ) {
            System.out.println("每个账户的信息为:");
            System.out.println(a);
            System.out.println(a.getUser() );
        }
    }

}

测试IUserDAO实现的方法


public class TestUser {
    private InputStream in;

    private SqlSession session;
    private IUserDAO iUserDAO;

    @Before
    public void init() throws IOException {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2创建工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        session = factory.openSession();
        iUserDAO = session.getMapper(IUserDAO.class);
    }

    @After
    public void destory() throws IOException {
        //提交事務
        session.commit();
        session.close();
        in.close();

    }
    @Test
    public void testFindAllInfo(){
        List<User> users= iUserDAO.findALL();
        for (User u:users
        ) {
            System.out.println("用户 的信息为:");
            System.out.println(u);
       
            List<Account> accounts=u.getAccountList();
            for (Account a: accounts
                 ) {
                System.out.println(a);
            }
        }
    }
}

这里省略了配置信息,具体见上一篇笔记注解开发的环境搭建
https://blog.csdn.net/weixin_49035356/article/details/112345385
记录的笔记主要是给自己以后看的,不一定能解决您的问题,仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值