========================= 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