一、注解模式
1、注意model下的类中address和grade里要添加属性,和其getter,setter方法
private list<Acc> accs;
public List<Acc> getAccs() {
return accs;
}
public void setAccs(List<Acc> accs) {
this.accs = accs;
}
2、建立sqlsession所需的工具类
3、mybatsi-config和之前同,无甚么变化
4、一对一
// id查找
@Select("select * from acc where userid=#{userid}") //,不用一对一或一对多的话,其实这句话就够了
@Results({
@Result(id=true,property = "userid" ,column = "userid"),
@Result(property = "username",column = "username"),
@Result(property = "password",column = "password"),
@Result(property = "motto",column = "motto"),
@Result(property = "address",column = "addressId",one = @One(select = "com.mao.mybatis.dao.AddressDao.selectByAid")),
@Result(property = "grade",column = "gradeid",one = @One(select = "com.mao.mybatis.dao.GradeDao.selectByGid"))
})
public Acc selectByUid(int userid);
@Select("select * from address where aid=#{aid}")
public Address selectByAid(int aid);
@Select("select * from grade where gid=#{gid}")
public Grade selectByGid(int gid); //方便起见放在一起看,其实分别在三个接口里
测试
@Test
public void testSelectAccByUid() {
log.info("测试一对一");
Acc acc = accDao.selectByUid(1001);
log.info(acc);
}
结果
[main] INFO com.mao.mybatis.dao.AccDaoTest - Acc [userid=1001, username=翟川, password=123456, motto=没有什么是我做不到的, address=Address [aid=1, sheng=陕西省, shi=西安市, qu=雁塔区, accs=null], grade=Grade [gid=1, gname=火箭班, accs=null]]
5、模糊查询一对多
@Select("select * from address where sheng like #{sheng} or shi like #{shi} or qu like #{qu}")
@Results({
@Result(id=true,property = "aid",column = "aid"),
@Result(property = "sheng",column = "sheng"),
@Result(property = "shi",column = "shi"),
@Result(property = "qu",column = "qu"),
@Result(property = "accs",column = "aid",many = @Many(select = "com.mao.mybatis.dao.AccDao.selectByAid")),
})
public List<Address> selectByKey(String key);
@Select("select * from acc where addressId=#{addressId}")
@Results({
@Result(id=true,property = "userid" ,column = "userid"),
@Result(property = "username",column = "username"),
@Result(property = "password",column = "password"),
@Result(property = "motto",column = "motto"),
@Result(property = "address",column = "addressId",one = @One(select = "com.mao.mybatis.dao.AddressDao.selectByAid")),
@Result(property = "grade",column = "gradeid",one = @One(select = "com.mao.mybatis.dao.GradeDao.selectByGid"))
})
public List<Acc> selectByAid(int aid); 方便起见放在一起看,其实分别在两个接口里
测试:
@Test
public void testSelectByKey() {
log.info("模糊查询");
List<Address> adds = addressDao.selectByKey("%西%");
for (Address address : adds) {
log.info(address);
}
}
结果
[main] INFO com.mao.mybatis.dao.AddressDaoTest - Address [aid=1, sheng=陕西省, shi=西安市, qu=雁塔区, accs=[Acc [userid=1001, username=翟川, password=123456, motto=没有什么是我做不到的, address=Address [aid=1, sheng=陕西省, shi=西安市, qu=雁塔区, accs=null], grade=Grade [gid=1, gname=火箭班, accs=null]]]]
[main] INFO com.mao.mybatis.dao.AddressDaoTest - Address [aid=2, sheng=山西省, shi=运城市, qu=盐湖区, accs=[Acc [userid=1002, username=唐敏, password=456789, motto=唐敏没啥。, address=Address [aid=2, sheng=山西省, shi=运城市, qu=盐湖区, accs=null], grade=Grade [gid=1, gname=火箭班, accs=null]], Acc [userid=1003, username=张海阳, password=123456, motto=你永远不知道睡觉对于睡神的美妙之处。, address=Address [aid=2, sheng=山西省, shi=运城市, qu=盐湖区, accs=null], grade=Grade [gid=1, gname=火箭班, accs=null]]]]
[main] INFO com.mao.mybatis.dao.AddressDaoTest - Address [aid=10, sheng=山西, shi=太原, qu=大梁渠, accs=[]]