MyBatis注解(多表)
mybatis 注解 多表
2023-06-13 09:12:39 时间
1、多表关系映射说明
1.1、一对一
@One 注解(一对一)
代替了标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。
@One 注解属性介绍:
select指定用来多表查询的sqlmapper
fetchType会覆盖全局的配置参数 lazyLoadingEnabled
使用格式:
@Result(column=" “,property=”",one=@One(select=""))
1.2、一对多
@Many 注解(多对一)
代替了标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。
使用格式:
@Result(property="",column="",many=@Many(select=""))
注意:
聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType(一般为 ArrayList)但是注解中可以不定义;
2、一对一
2.1、需求分析
查询学生信息,加载该学生的班级信息
2.2、编写Classes.java文件
import java.io.Serializable;
public class Classes implements Serializable {
private int cid;
private String cname;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "Classes{" +
"cid=" + cid +
", cname='" + cname + '\'' +
'}';
}
}
2.3、修改Students.java文件
private Classes classes;
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}
2.4、修改IStudentsDao.java文件
@Select("select sid,sname,ssex,sage,cid as c_id from students")
@Results(id="studentsMap1",value={
@Result(id=true,column = "sid",property = "sid"),
@Result(column = "sname",property = "sname"),
@Result(column = "ssex",property = "ssex"),
@Result(column = "sage",property = "sage"),
@Result(column = "c_id",property = "cid"),
@Result(column = "c_id",property = "classes",
one=@One(select = "com.tianyi.dao.IClassesDao.findById",fetchType = FetchType.EAGER))
})
List<Students> findAll1();
2.5、编写IClassesDao.java文件
import com.tianyi.javabean.Classes;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
public interface IClassesDao {
@Select("select * from classes where cid=#{cid}")
@Results(id="classesMap",value={
@Result(id=true,column = "cid",property = "cid"),
@Result(column = "cname",property = "cname")
})
Classes findById(int cid);
}
2.6、修改MbStudentsTest.java测试类
@Test
public void findAll1(){
List<Students> list=studentsDao.findAll1();
for (Students s:list) {
System.out.println(s);
//System.out.println(s+":"+s.getClasses());
}
}
3、一对多
3.1、需求分析
完成班级表与学生表的一对多的关系,查询出班级的信息和学生信息,学生信息只有在需要的时候才会显示。
3.2、编写Classes.java文件
private List<Students> studentsList;
public List<Students> getStudentsList() {
return studentsList;
}
public void setStudentsList(List<Students> studentsList) {
this.studentsList = studentsList;
}
3.3、编写IClassesDao.java文件
@Select("select * from classes")
@Results(id="classesMap1",value={
@Result(id=true,column = "cid",property = "cid"),
@Result(column = "cname",property = "cname"),
@Result(column = "cid",property = "studentsList",many = @Many(
select = "com.tianyi.dao.IStudentsDao.findById1",fetchType = FetchType.LAZY
))
})
List<Classes> findAll();
3.4、修改IStudentsDao.java文件
@Select("select * from students where cid=#{cid}")
Students findById1(int cid);
3.5、编写MbClassesTest.java文件
import com.tianyi.dao.IClassesDao;
import com.tianyi.dao.IStudentsDao;
import com.tianyi.javabean.Classes;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MbClassesTest {
private InputStream in;
private SqlSession session;
private IClassesDao classesDao;
@Test
public void findAll(){
List<Classes> list=classesDao.findAll();
for(Classes c:list){
System.out.println(c);
}
}
@Before
public void init()throws IOException {
in= Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
session=factory.openSession();
classesDao=session.getMapper(IClassesDao.class);
}
@After
public void destroy() throws IOException {
session.commit();
session.close();
in.close();
}
}
4、二级缓存的开启
4.1、修改SqlMapConfig.xml文件
<!-- 配置二级缓存 -->
<settings>
<!-- 开启二级缓存的支持 -->
<setting name="cacheEnabled" value="true"/>
</settings>
4.2、持久层使用二级缓存
@CacheNamespace(blocking = true)
public interface IClassesDao {
}
相关文章
- mybatis逆向工程插件
- mybatis逆向工程配置文件_mybatis逆向工程多表查询
- MyBatis多条件查询、动态SQL、多表操作、注解开发详细教程
- 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
- Spring boot Mybatis 整合(注解版)
- MyBatis-Plus用起来真的很舒服
- MyBatis缓存
- mybatis plus使用redis作为二级缓存
- MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!
- SSM-Mybatis(1)[通俗易懂]
- MyBatis框架:第三章:传统方式mybatis的增,删,改,查实现
- MyBatis框架:第十章:mybatis缓存
- 理论:第五章:Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点
- mybatis拦截器详解_短信拦截器
- MyBatis框架:第六章:mybatis的核心配置
- MyBatis框架:第五章:源码解析及Mapper接口方式的mybatis的增,删,改,查实现
- Mybatis 一对多 结果集映射 简单入门 易懂
- Mybatis使用注解实现一对一复杂关系映射及延迟加载
- Mybatis持久层框架 | 日志、分页、注解开发
- MyBatis-Plus 注解方式(一对多、多对一)
- MyBatis注解开发---实现自定义映射关系和关联查询
- MyBatis注解开发---实现增删查改和动态SQL
- Mybatis if 判断等于一个字符串详解编程语言
- MyBatis学习笔记(二) 关联关系详解编程语言
- SpringBoot+SpringAOP+Java自定义注解+mybatis实现切库读写分离详解编程语言
- MyBatis实现映射器的2种方式:XML文件形式和注解形式