前期准备
首先导入上一个项目的pom文件,java文件夹和resources文件夹,这是整个项目的目录结构
一对多关联映射
一:首先根据表的结构创建两个实体类Account和User
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
//从表实体应该包含一个主表实体的对象引用
private User user;
//省略了setter和getter方法,省略了toString方法
}
public class User {
private Integer id;
private String username;
private String address;
private String sex;
private Date birthday;
//一对多关系映射:主表实体应该包含从表实体的集合引用
private List<Account> accounts;
//省略了setter和getter方法,省略了toString方法
}
两个实体类没有直接的关联,所有需要在每个实体类中加入另一个的对象引用和集合引用。
二:然后创建持久层的接口
public interface UserDao {
/**
* 查找所有对象
* @return
*/
List<User> findAll();
}
public interface AccountDao {
/**
* 查找所有账户
* @return
*/
List<Account> findAll();
/**
* 查找所有账户的姓名地址
* @return
*/
List<AccountUser> findAllUser();
}
三:一对一的操作可以通过写从表的子类的方法实现
在从表实体类的子类中定义主表的对象引用
public class AccountUser extends Account{
private String username;
private String address;
private User user;
//省略了setter和getter方法,省略了toString方法
}
然后在映射文件中写入查询语句:
<!--查询所有 -->
<select id="findAllUser" resultType="AccountUser">
select a.* ,u.username,u.address from account a,user u where a.uid = u.id
</select>
在映射文件中查询出两个表中想要知道的信息,让后通过两个表的键相等对应,查出信息,返回值类型也是从表实体类的子类,这个类继承了从表的信息,也对主表进行了定义,也就是包含了两个表的信息
四:写测试类,测试映射文件的准确
/**
* 执行查询所有用户的账号信息
*/
@Test
public void testFindAccountUser() {
List<AccountUser> accountUsers = accountDao.findAllUser();
for(Account accountuser:accountUsers){
System.out.println(accountuser);
}
}
然后是控制台的打印结果:
先打印了Account的信息,然后在打印了AccountUser的信息,也就是查询出来的信息。执行的查询语句是:
select a.* ,u.username,u.address from account a,user u where a.