Mybatisは、注釈の作成と1対多の関連付け関係に基づいて多対1の関連付け関係を実現します

Mybatisの多対1の関連付け関係は、1対1で実現されます。
たとえば、「account:user」は多対1の関係ですが、アカウントごとに1人のユーザーしかいません。
ここに写真の説明を挿入
ここに写真の説明を挿入

アカウントクラス

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();
}

Test | 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
记录的笔记主要是给自己以后看的,不一定能解决您的问题,仅供参考

おすすめ

転載: blog.csdn.net/weixin_49035356/article/details/112358729