在实际开发中,实体类之间有一对一、一对多、多对多的关系,所以需要正确配置它们对应关系,Mybatis通过配置文件能够从数据库中获取列数据后自动封装成对象。
如:一个订单Orders类对应一个用户User类,一个User类对应多个Orders类。
Orders.java
packagecn.itheima.pojo;importjava.util.Date;public classOrders {privateInteger id;privateInteger userId;privateString number;privateDate createtime;privateString note;private User user; //一个订单对应一个用户
publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicInteger getUserId() {returnuserId;
}public voidsetUserId(Integer userId) {this.userId =userId;
}publicString getNumber() {returnnumber;
}public voidsetNumber(String number) {this.number = number == null ? null: number.trim();
}publicDate getCreatetime() {returncreatetime;
}public voidsetCreatetime(Date createtime) {this.createtime =createtime;
}publicString getNote() {returnnote;
}public voidsetNote(String note) {this.note = note == null ? null: note.trim();
}publicUser getUser() {returnuser;
}public voidsetUser(User user) {this.user =user;
}
}
User.java
packagecn.itheima.pojo;importjava.util.Date;importjava.util.List;public classUser {private intid;private String username;//用户姓名
private String sex;//性别
private Date birthday;//生日
private String address;//地址
private List ordersList; //一个用户对应多个订单
public ListgetOrdersList() {returnordersList;
}public void setOrdersList(ListordersList) {this.ordersList =ordersList;
}public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getUsername() {returnusername;
}public voidsetUsername(String username) {this.username =username;
}publicString getSex() {returnsex;
}public voidsetSex(String i) {this.sex =i;
}publicDate getBirthday() {returnbirthday;
}public voidsetBirthday(Date birthday) {this.birthday =birthday;
}publicString getAddress() {returnaddress;
}public voidsetAddress(String address) {this.address =address;
}
@OverridepublicString toString() {return "User [id=" + id + ", username=" + username + ", sex=" +sex+ ", birthday=" + birthday + ", address=" + address + "]";
}
}
一、一对一映射
1、 在UserMapper.xml中配置Orders和User的一对一映射关系
SELECT a.*,b.id uid,username,birthday,sex,address
FROM orders a,user b
WHERE a.user_id=b.id
2、在UserMapper.java中编写接口
List findOrdersAndUser2();
3、测试
@Testpublic void testFindOrdersAndUser2() throwsException {
SqlSession session=sqlSessionFactory.openSession();
UserMapper userMapper= session.getMapper(UserMapper.class);
List list =userMapper.findOrdersAndUser2();
System.out.println(list);
}
二、一对多映射
1、在UserMapper.xml中配置User和Orders的一对多关系
SELECT a.*,b.id oid,user_id,number,createtime
FROM user a,orders b WHERE a.id=b.user_id
2、在UserMapper.java中编写接口
List findUserAndOrders();
3、测试
@Testpublic void testFindUserAndOrders() throwsException {
SqlSession session=sqlSessionFactory.openSession();
UserMapper userMapper= session.getMapper(UserMapper.class);
List list =userMapper.findUserAndOrders();
System.out.println(list);
}