=========================
MyBatis关联映射之添加详情
=========================
1 详情表
create table t_detail(
detailid int primary key auto_increment,
address varchar(50) not null,
telephone varchar(11) not null,
description varchar(200),
userid int not null unique, <- 唯一
constraint FK_USER foreign key(userid) reference t_user(id)
); \_________________/ \________/
| |
外键 主键
\_________________________/
|
物理关联
比物理关联更好的方式是通过业务代码建立逻辑关联:
create table t_detail(
detailid int primary key auto_increment,
address varchar(50) not null,
telephone varchar(11) not null,
description varchar(200),
userid int not null unique
);
2 实体类
在/src/main/java/cn.tedu.association.pojo目录下创建Detail.java文件:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Detail {
private int detailid;
private String address;
private String telephone;
private String description;
private int userid;
}
3 添加详情
3.1 定义接口
在/src/main/java/cn.tedu.association.dao目录下创建DetailDao.java文件:
public interface DetailDao {
public int addDetail(Detail detail);
}
3.2 配置映射
在/src/main/resources/mappers目录下创建DetailMapper.xml文件:
insert into t_detail(address, telephone, description, userid)
values(#{address}, #{telephone}, #{description}, #{userid})
在/src/main/resources/mybatis-config.xml文件中添加:
...
...
...
...
3.3 单元测试
在/src/test/java/cn.tedu.association.dao/UserDaoTest.java文件中修改:
public class UserDaoTest {
@Test
public void testAddUser() {
SqlSession session = MyBatisUtil.getSession();
try {
UserDao userDao = session.getMapper(UserDao.class);
User user = new User(0, "zhangfei", "111111", "张飞", "001.jpg");
assertEquals(1, userDao.addUser(user));
DetailDao detailDao = session.getMapper(DetailDao.class);
Detail detail = new Detail(0, "北京市海淀区", "13910110072", "我思故我在", user.getId());
assertEquals(1, detailDao.addDetail(detail));
session.commit();
}
catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
运行测试用例。
4 查询用户信息
在/src/main/java/cn.tedu.association.dao/UserDao.java文件中添加:
public interface UserDao {
...
public User getUser(String username);
...
}
在/src/main/resources/mybatis-config.xml文件中添加:
...
...
...
...
在/src/main/resources/mappers/UserMapper.xml文件中添加:
...
...
在/src/main/java/cn.tedu.association.dao/DetailDao.java文件中添加:
public interface DetailDao {
...
public Detail getDetail(int userid);
...
}
在/src/main/resources/mybatis-config.xml文件中添加:
...
...
...
...
在/src/main/resources/mappers/DetailMapper.xml文件中添加:
...
...
在/src/test/java/cn.tedu.association.dao/UserDaoTest.java文件中添加:
public class UserDaoTest {
...
@Test
public void testGetUser() {
UserDao userDao = MyBatisUtil.getMapper(UserDao.class);
User user = userDao.getUser("zhangfei");
assertNotEquals(null, user);
System.out.println(user);
DetailDao detailDao = MyBatisUtil.getMapper(DetailDao.class);
Detail detail = detailDao.getDetail(user.getId());
assertNotEquals(null, detail);
System.out.println(detail);
}
...
}
运行测试用例。
例程:Association