zoukankan      html  css  js  c++  java
  • Mybatis-延迟加载

      立即加载:只要一调用就立即发起加载。举例:一个用户有100个账户,查询账户时有必要把用户信息也显示出来。

      延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作;

      可以简单理解为,只有在使用的时候,才会发出sql语句进行查询;延迟加载的有效期是在session打开的情况下,当session关闭后,会报异常。

    当调用load方法加载对象时,返回代理对象,等到真正用到对象的内容时才发出sql语句

    package bean;
    
    public class student {
        private Integer s_id;//id
        private Integer c_id;//关联id
        private String s_name;//name
        private classes classes;//班级对象
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public Integer getCid() {
            return cid;
        }
        public void setCid(Integer cid) {
            this.cid = cid;
        }
        public String getSname() {
            return sname;
        }
        public void setSname(String sname) {
            this.sname = sname;
        }
        public classes getClasses() {
            return classes;
        }
        public void setClasses(classes classes) {
            this.classes = classes;
        }
    }
    package bean;
    
    import java.util.List;
    
    public class classes {
        private Integer c_id;//班级id
        private String c_name;//班级name
        private List<student> student;//学生集合对象
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getCname() {
            return cname;
        }
        public void setCname(String cname) {
            this.cname = cname;
        }
        public List<student> getStudent() {
            return student;
        }
        public void setStudent(List<student> student) {
            this.student = student;
        }
    }
    <!-- classes接口xml--> 
    <!-- resultMap手动定义 -->
        <resultMap type="classes" id="claMap">
            <!-- id标签,主键 -->
            <id column="id" property="id" />
            <!-- result标签,普通列 -->
            <result column="cname" property="cname" />
            <collection property="student" ofType="student"
                select="dao.studao.selbyid" column="id">
            </collection>
        </resultMap>
    
        <!-- select标签用于查询 -->
        <select id="selallC" resultMap="claMap">
            select * from classes
        </select>
    
        <!-- student接口xml-->
            <select id="selbyid" resultType="student">
            select * from student where
            cid=#{cid}
        </select>    

    全局配置xml

           <settings>
            <!-- 开启延迟加载支持 -->
            <setting name="lazyLoadingEnabled" value="true" />
            <!-- 将积极加载改为消极加载 按需加载 -->
            <setting name="aggressiveLazyLoading" value="false" />
        </settings>    

    测试类

    package Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    import javax.xml.ws.Action;
    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 bean.classes;
    import bean.student;
    import dao.cladao;
    import dao.studao;
    
    
    
    public class MybatisyTest {    
        InputStream inputstream;
        SqlSessionFactory factory;
        SqlSession session;
        cladao cdao;
        studao sdao;
        @Before
        public  void init() throws IOException{
            //读取配置文件
            inputstream=Resources.getResourceAsStream("mybatis-config.xml");
            factory =new SqlSessionFactoryBuilder().build(inputstream);
            session =factory.openSession();
            cdao=session.getMapper(cladao.class);
    
        }
        @Test
        public void selallcla() throws IOException{
            List<classes> cla =cdao.selallC();
            for(classes c:cla) {
                System.out.println("班级id:"+c.getId()+",班级名称:"+c.getCname());
                if(c.getId()==2) {
                    List<student> stu=c.getStudent();
                    for(student s:stu) {
                        System.out.println("学生id:"+s.getId()+",学生姓名:"+s.getSname());
                    }
                }
            }
        }
        @After
        public void destory()  throws IOException {
            //关闭
            session.commit();
            session.close();
            inputstream.close();
        }
    
    }

    执行@Test注解

    只查询班级表中的所有数据,当你点击想查询的班级(传入id值),再执行sql语句查询学生表符合条件的学生信息

  • 相关阅读:
    51 nod 1181 质数中的质数(质数筛法)
    Just oj 2018 C语言程序设计竞赛(高级组)F:Star(结构体排序+最小生成树)
    欧拉函数+费马小定理拓展
    ZOJ 3785 What day is that day?(数论:费马小定理)
    Just oj 2018 C语言程序设计竞赛(高级组)H: CBT?
    树链剖分(入门学习)
    bitset用法
    链式前向星
    Nearest Common Ancestors(LCA板子)
    LCA(最近公共祖先)
  • 原文地址:https://www.cnblogs.com/tweixi/p/12444986.html
Copyright © 2011-2022 走看看