Mybatis注解开发一对一的查询配置
- 注解开发和xml开发有着异曲同工之妙。xml是通过配置相关文件的相关节点实现的。而注解则是通过在函数方法之上添加@注解来实现的。因此在配置的时候,有很多的相通之处。
- 首先是编写相关的实体类。
public class Account implements Serializable { private Integer id; private Integer uid; private Double money; /** * 多对一的映射(mybatis中的一对一),一个账户对一个用户 * @return */ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", uid=" + uid + ", money=" + money + '}'; } }
- 编写相关的Dao接口类。
public interface AccountDao { /** * */ @Select("select * from account") @Results(id="accountMap",value = { @Result(id=true, column="id", property = "id"), @Result(column = "uid", property = "uid"), @Result(column = "money", property = "money"), @Result(column = "uid", property = "user", one = @One(select = "com.mybatis.dao.UserDao.findById", fetchType = FetchType.EAGER)) }) List<Account> findAll(); }
- @Result标签中id表示的是否主键。当需要面对一对一或者一对多的时候,需要设置参数@One或者@Many,并设置相关的函数操作。
- 测试用例
@Test public void TestfindAll(){ //5.使用代理方法执行查询所有的方法 List<Account> accounts =accountDao.findAll(); for(Account account:accounts){ System.out.println("------------------"); System.out.println(account); System.out.println(account.getUser()); } }
Mybatis注解开发一对多的查询配置
- 编写相关的实体类
public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; List<Account> accounts; public List<Account> getAccounts() { return accounts; } public void setAccounts(List<Account> accounts) { this.accounts = accounts; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } 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 getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }
- 编写相关的DAO类和接口
@Select("select * from user") @Results(id="userMap",value = { @Result(id=true,column = "id", property = "id"), @Result(column = "username",property = "username"), @Result(column = "address",property = "address"), @Result(column = "sex",property = "sex"), @Result(column = "birthday",property = "birthday"), @Result(column = "id",property = "accounts",many = @Many(select = "com.mybatis.dao.AccountDao.findAccountById",fetchType = FetchType.LAZY)) }) List<User> findAll();
- 测试用例
@Test public void TestfindAll(){ //5.使用代理方法执行查询所有的方法 List<User> users=userDao.findAll(); for(User user:users){ System.out.println("------------------------"); System.out.println(user); System.out.println(user.getAccounts()); } }
- 通过各种手段发现,其实对于一个对象来说只有一对一和一对多两种情况。因此只需要精准把握这两种关系就行。