首先建立maven项目
pom.xml依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
pom.xml导入后建立好directory(给予对应权限)和file
建立接口并在resource内xml文件里进行配置
<mappers>
<mapper class="com.dj.mapper.CatMapper"></mapper>
<mapper class="com.dj.mapper.DogMapper"></mapper>
<mapper class="com.dj.mapper.PdogmanMapper"></mapper>
<mapper class="com.dj.mapper.HouseMapper"></mapper>
<mapper class="com.dj.mapper.CardMapper"></mapper>
<mapper class="com.dj.mapper.ManMapper"></mapper>
</mappers>
做完准备工作我们来测试一下注解sql的一对一,一对多以及多对多
1一对一
一对一的表设计(左边表为’身份证’右边为’人’)
由于要用注解设定一对一关系这里写了一个根据id的条件查询 那么在查到card的同时需要查到一个man并将对象加入于card的实体类 代码中@Result部分id部分也就是主键部分是不可省略的 而其他本表中的存在并不需要从其他地方拿值的属性在此处省略
@Select("select * from card where cid=#{cid}")
@Results({
@Result(property = "cid",column = "cid",id = true),
@Result(property = "man",column = "cid",one = @One(select ="com.dj.mapper.ManMapper.seefornoe"))
})
public Card findone(int cid);
以下便是one=one(一对一)对应的方法
@Select("select * from man where cid=#{cid}")
public Man seefornoe(int id);
2一对多
一对多的表设计(左边为宠物狗右边为宠物狗主人)
这边通过条件id查询拿到pdogman(宠物狗主人)
@Select("select * from Pdogman where pid=#{pid}")
@Results({
@Result(property = "pid",column = "pid",id = true),
@Result(property = "dogs",column = "pid",many = @Many(select = "com.dj.mapper.DogMapper.findDogByid"))
})
public Pdogman seepamnbyid(int id);
同时也是通过另一个查询方法拿到狗主人养的多条狗
@Select("select * from dog where pid=#{pid}")
public List<Dog> findDogByid(int id);
3多对多
多对多表设计(左边为’猫’中间为’猫和猫屋关系对应表’右边为’猫屋’)
通过id条件查询到一只猫
@Select("select * from cat where cid=#{cid}")
@Results({
@Result(property = "cid",column = "cid",id = true),
@Result(property = "houses",column = "cid",many = @Many(select = "com.dj.mapper.HouseMapper.findhouseByid"))
})
public Cat seeforid(int id);
以下则为通过第三关系表利用猫的id拿到猫可以居住的所有猫屋
@Select("select * from house h,cat_house ch where h.hid=ch.hid and ch.cid=#{cid}")
public List<House> findhouseByid();
测试
public class fucktest {
private SqlSession sqlSession;
@Before
public void before(){
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(this.getClass().getClassLoader().getResourceAsStream("mybatis.xml"));
sqlSession=factory.openSession();
}
@Test
public void test(){
//查询 猫 拿 猫可居住的猫屋
CatMapper catMapper=sqlSession.getMapper(CatMapper.class);
Cat cat=catMapper.seeforid(1);
List<House> houses=cat.getHouses();
for (House house : houses) {
System.out.println(house.getHname());
}
//查询 狗主人 拿 狗
PdogmanMapper pdogmanMapper=sqlSession.getMapper(PdogmanMapper.class);
Pdogman pdogman=pdogmanMapper.seepamnbyid(1);
List<Dog> dogs=pdogman.getDogs();
for (Dog dog : dogs) {
System.out.println(dog.getDname());
}
//查询 人 拿 身份证
ManMapper manMapper=sqlSession.getMapper(ManMapper.class);
Man man=manMapper.seeotherone(1);
System.out.println(man.getCard().getCname());
}