03-Mybatis表之间的关系(一对一)

it2026-02-25  8

文章目录

一、 完成account的一对一(一个账户只能有一个用户)操作(通过写Account的子类方式查询)1.1 创建user,account两个实体类1.2 创建user,account操作数据库的两个类IUserDao,IAccountDao1.3 创建Account的子类AcountUser(把account和user结合起来)1.4 创建IUserDao,IAccountDao的映射配置文件IUserDao.xml,IAccountDao.xml1.5 测试1.6 测试结果 二、完成account的一对一操作(建立实体类关系的方式)2.1 修改account实体类2.2 修改IAccountDao.xml2.3 测试2.4 测试结果

一、 完成account的一对一(一个账户只能有一个用户)操作(通过写Account的子类方式查询)

1.1 创建user,account两个实体类

account:省略get和set方法 private int id; //账户id private int uid; //用户id private String a_num; //账户号 user private int id; //用户id private String username; //用户姓名 private Date birthday; //用户生日 private String gender; //用户性别

1.2 创建user,account操作数据库的两个类IUserDao,IAccountDao

IUserDao public interface IUserDao { /** * 查询所有 * @return */ List<User> findAll(); } IAccountDao public interface IAccountDao { /** * 查询所有账户信息 */ List<Account> findAll(); /** * 查询所有账户信息和账户所属用户 * @return */ List<AccountUser> findAllAccountUser(); }

1.3 创建Account的子类AcountUser(把account和user结合起来)

package cn.lhh.domain; import java.util.Date; public class AccountUser extends Account { private String username; private Date birthday; private String gender; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "AccountUser{" + "id='" + super.getId() + '\'' + " " + "uid='" + super.getUid() + '\'' + " " + "a_num='" + super.getA_num() + '\'' + " " + "username='" + username + '\'' + " " + " birthday=" + birthday + " " + " gender='" + gender + '\'' + '}'; } }

1.4 创建IUserDao,IAccountDao的映射配置文件IUserDao.xml,IAccountDao.xml

IUserDao.xml <!--查询所有用户信息--> <select id="findAll" resultType="user"> select * from user; </select> IAccountDao.xml <!--查询所有账户信息--> <select id="findAll" resultType="account"> select * from account; </select> <!--查询所有账户信息及所属用户信息--> <select id="findAllAccountUser" resultType="accountUser"> select a.*,u.username,u.birthday,u.gender from account a,user u where a.uid = u.id </select>

1.5 测试

/** * 测试查询所有账户信息及所属用户信息 */ @Test public void testFindAllAccountUser() { List<AccountUser> aus = dao.findAllAccountUser(); for (AccountUser au : aus) { System.out.println(au); } }

1.6 测试结果

AccountUser{id='1' uid='3' a_num='475563' username='王大大' birthday=Thu Oct 22 08:00:00 CST 2020 gender='男'} AccountUser{id='2' uid='3' a_num='546545' username='王大大' birthday=Thu Oct 22 08:00:00 CST 2020 gender='男'} AccountUser{id='3' uid='7' a_num='498787' username='李四' birthday=Sun Oct 04 08:00:00 CST 2020 gender='男'}

视屏观看:ssm P50

二、完成account的一对一操作(建立实体类关系的方式)

2.1 修改account实体类

private int id; private int uid; private String a_num; //建立表与表之间的关联,一个账户只能有一个用户 private User user;

2.2 修改IAccountDao.xml

<!--定义封装account和user的resultMap--> <resultMap id="accountUserMap" type="account"> <id property="id" column="aid"></id> <result property="uid" column="uid"></result> <result property="a_num" column="a_num"></result> <!--一一对应的关系映射,配置封装user的内容--> <!--记得加javaType,不让会出现空指针异常,还有这里注意是javaType,如果是collection标签,为ofType标签--> <association property="user" column="uid" javaType="user"> <id property="id" column="id"></id> <result property="username" column="username"></result> <result property="birthday" column="birthday"></result> <result property="gender" column="gender"></result> </association> </resultMap> <!--查询所有账户信息--> <select id="findAll" resultMap="accountUserMap"> select u.*,a.id as aid,a.uid,a.a_num from account a,user u where a.uid = u.id </select>

这里javaType是表示要把内容分装为那种类型

2.3 测试

/** * 测试查询所有用户信息 */ @Test public void testFindAll() { List<Account> accounts = dao.findAll(); for (Account account : accounts) { System.out.println("---------------"); System.out.println(account); System.out.println(account.getUser()); } }

2.4 测试结果

account{id=1, uid=3, a_num='475563'} User{id=3, username='王大大', birthday=Thu Oct 22 08:00:00 CST 2020, gender='男'} --------------- account{id=2, uid=3, a_num='546545'} User{id=3, username='王大大', birthday=Thu Oct 22 08:00:00 CST 2020, gender='男'} --------------- account{id=3, uid=7, a_num='498787'} User{id=7, username='李四', birthday=Sun Oct 04 08:00:00 CST 2020, gender='男'}

视屏观看:ssm p51

具体代码看day03_mybaits_03oneToMany
最新回复(0)