Mybatis: 使用注解实现表的关联
1,数据库表创建
create table dept(
deptno number(5) primary key,
dname nvarcher2(10)
);
create table deptinfo(
id number(5),
num number(5)
)
2,创建实体类
Dept.java
package com.sc.pojo;
import java.io.Serializable;
/**
* @ClassName dept
* @Author Bervin
* @Description //TODO
* @Date 15:08 2020/5/25
* @Param
**/
public class Dept implements Serializable {
private Integer id;
private String name;
//多表关联之1对1关联
private Deptinfo deptinfo;
public Deptinfo getDeptinfo() {
return deptinfo;
}
public void setDeptinfo(Deptinfo deptinfo) {
this.deptinfo = deptinfo;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "dept{" +
"id=" + id +
", name='" + n '}';
}
}
Deptinfo.java
package com.sc.pojo;
import java.io.Serializable;
import java.sql.Date;
/**
* @ClassName Deptinfo
* @Author Bervin
* @Description //TODO
* @Date 16:39 2020/5/25
* @Param
**/
public class Deptinfo implements Serializable {
private int id;
private int num;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "Deptinfo{" +
"id=" + id +
", num=" + num
" }';
}
}
2,创建Mappper接口
DeptMapper接口
package com.sc.mapper;
import com.sc.pojo.Dept;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.cache.decorators.LruCache;
import java.util.List;
//配置缓存注解
@CacheNamespace(eviction = LruCache.class,size = 512,readWrite = true,flushInterval = 60000)
public interface DeptMapper {
@Results(id="deptMap",value={
@Result(property="id",column = "deptno",id = true),
@Result(property = "name",column = "dname"),
@Result(property = "deptinfo",column = "deptno",one=@One(select="com.sc.mapper.DeptInfoMapper.queryByPrimaryKey"))
})
@Select("select deptno,dname from dept")
List<Dept> queryAll();
}
DeptInfoMapper接口
package com.sc.mapper;
import com.sc.pojo.Deptinfo;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
public interface DeptInfoMapper {
@Results(id="deptinfoMap",value={
@Result(property="id",column = "id"),
@Result(property = "num",column = "num"),
})
@Select("select id,num from deptinfo where id=#{id}")
Deptinfo queryByPrimaryKey(Integer id);
}
3,在mybatis.xml文件中配置如下映射关系
<mappers>
<mapper class="com.sc.mapper.DeptMapper"></mapper>
<mapper class="com.sc.mapper.DeptInfoMapper"></mapper>
</mapper>
4,在测试类中测试
import com.sc.mapper.*;
import com.sc.pojo.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class TestMybatis {
@Test
public void queryDuoBiaoGuanLian() throws IOException {
InputStream is=Resources.getResourceAsStream("mybatis.xml");
sf=new SqlSessionFactoryBuilder().build(is);
session = sf.openSession();
DeptMapper mapper=session.getMapper(DeptMapper.class);
List<Dept> list = mapper.queryAll();
for (Dept d:
list) {
System.out.println(d);
System.out.println(d.getDeptinfo());
}
session.commit(); // 事务提交或者回滚
session.close();
}
}
这样便成功查询到了dept表和deptinfo表的,运行结果如下:
==> Preparing: select id,num from deptinfo where id=?
==> Parameters: 9(Integer)
<== Columns: ID, NUM
<== Row: 9, 5
<== Total: 1
dept{id=9, name='Bervin',}
Deptinfo{id=9, num=5, time=null}