MyBatis学习(八)

本教程对应视频课程地址:http://edu.51cto.com/sd/3ec2c

1、延迟加载

延迟加载的意义在于,虽然是关联查询,但是不是及时将关联的数据查询出来,而是在需要的时候进行查询

1.1、延迟加载的sql分析

select * from tb_order where order_number=‘20180810001‘
select * from tb_user where userid=2

1.2、全局配置文件设置

<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 按需要加载 -->
<setting name="aggressiveLazyLoading" value="false"/>

1.3、定义接口方法

public List<Order> queryLazy(@Param("orderNum")String orderNum);

1.4、mapper.xml文件配置

<resultMap type="Order" id="lazyOrderMap" autoMapping="true">
    <id column="oid" property="oid"/>
    <association property="user" javaType="User" column="user_id" select="selectById"/>
  </resultMap>

  <select id = "selectById" resultType="User">
    select * from tb_user where userid=#{userid}
  </select>
  <select id = "queryLazy" resultMap="lazyOrderMap">
        select * from tb_order where order_number=#{orderNum}
  </select>

1.5、测试方法

@Test
    public void testLazy()throws Exception{
        List<Order> list = orderMapper.queryLazy("20180810001");
        for (Order order : list) {
            System.out.println(order.getOid());

        }
    }

1.6、观察日志

DEBUG - Opening JDBC Connection
DEBUG - Created connection 80004644.
DEBUG - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG - ==>  Preparing: select * from tb_order where order_number=?
DEBUG - ==> Parameters: 20180810001(String)
DEBUG - <==      Total: 1
1
DEBUG - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG - Closing JDBC Connection [[email protected]]
DEBUG - Returned connection 80004644 to pool.

修改代码,调用懒属性操作,再次观察日志

DEBUG - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG - ==>  Preparing: select * from tb_order where order_number=?
DEBUG - ==> Parameters: 20180810001(String)
DEBUG - <==      Total: 1
1
DEBUG - Cache Hit Ratio [cn.org.kingdom.mapper.OrderMapper]: 0.0
DEBUG - ==>  Preparing: select * from tb_user where userid=?
DEBUG - ==> Parameters: 2(BigDecimal)
DEBUG - <==      Total: 1
阿柯
DEBUG - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG - Closing JDBC Connection [[email protected]]
DEBUG - Returned connection 313288686 to pool.

2、mybatis调用存储过程

2.1、mybatis调用无参的存储过程

1、先来定义一个无参数的存储过程

create or replace procedure mypro is
begin
  insert into dept(deptno,dname,loc) values(60,‘销售部‘,‘北京‘);
  commit;
end mypro;

2、定义接口方法

public void callPro();

3、定义mapper文件

 <select id = "callPro" statementType="CALLABLE">
    {call mypro}
  </select>

4、编写测试类

@Test
    public void callpro1()throws Exception{
        orderMapper.callPro();
    }

2.2、调用有参数的存储过程

定义一个有参数的存储过程

create or replace procedure pro_getUserNameById(v_userid in tb_user.userid%type,
v_username out tb_user.user_name%type) is
begin
           select user_name into v_username from tb_user where userid=v_userid;
end pro_getUserNameById;

接口方法定义

public void callPro2(User vo);

mapper.xml文件的配置

<!-- 调用有参数的
    useCache="false"
    定义入参和出参
    jdbcType:大家参考org.apache.ibatis.type.JdbcType
  -->
  <select id = "callPro2" useCache="false" statementType="CALLABLE">

    {call pro_getusernamebyid(
        #{userid,mode=IN,jdbcType=INTEGER,javaType=int},
        #{userName,mode=OUT,jdbcType=VARCHAR,javaType=string}
    )}
  </select>

测试方法

@Test
    public void callpro2()throws Exception{
        User user = new User();
        user.setUserid(2);
        orderMapper.callPro2(user);
        System.out.println(user.getUserName());
    }

日志信息

DEBUG - Opening JDBC Connection
DEBUG - Created connection 1723550754.
DEBUG - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG - ==>  Preparing: {call pro_getusernamebyid( ?, ? )}
DEBUG - ==> Parameters: 2(Integer)
阿柯
DEBUG - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG - Closing JDBC Connection [[email protected]]
DEBUG - Returned connection 1723550754 to pool.

原文地址:http://blog.51cto.com/11230344/2302211

时间: 2024-10-27 17:59:28

MyBatis学习(八)的相关文章

mybatis学习八 事物

1.事物的定义: 是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. 2,事物的特性: 一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性.一致性.隔离性和持久性)属性. 3. mybatis中的事物 3.1, 在 mybatis 中默认是关闭了 JDBC 的自动提交功能 3.1.1 每一个 SqlSession 默认都是不自动提交事务. 3.1.2 session.comm

MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-mybatis3 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 如下图所示: 创建好的项目如下

MyBatis MapperScannerConfigurer配置――MyBatis学习笔记之八

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八 2012-09-02 20:01:42 标签:Spring MyBatis MapperScannerConfigurer bean默认命名 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://legend2011.blog.51cto.com/3018495/980150 在上一篇博文的示例中,我们在beans.xml中配置了stu

MyBatis学习总结(五)——实现关联表查询(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(五)--实现关联表查询 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TAB

MyBatis学习总结(七)——Mybatis缓存(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空. 2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,Hash

MyBatis:学习笔记(3)——关联查询

MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好. 但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的. 所以我们尽量要将不同的信息存储与不同的表中,但

MyBatis学习总结(六)——调用存储过程(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(六)--调用存储过程 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_increment, 3 name varchar(10), 4 sex char(2) 5 ); 6 7 insert into p_user(name,sex) values('A',"男");

mybatis学习笔记(1)

之前做项目的时候,DAO层写了一些spring jdbc,用起来的确不是很方便,今天特意去学习了新的框架:mybatis.把之前用spring-jdbc写的内容换成了mybatis框架搭建的内容. 首先你要到mybatis的官网去下mybatis的jar包:mybatis-3.2.7.jar.由于我是在spring的基础上去搭建mybatis所以还要去弄一个mybatis-spring-1.2.2.jar, 这个连接的包好像在spring官方是找不到的,需要自己去网上找. 进入正题.首先在src

Oracle学习(八):处理数据

1.知识点:能够对比以下的录屏进行阅读 SQL> --SQL语句 SQL> --1. DML语句(Data Manipulation Language 数据操作语言): insert update delete select SQL> --2. DDL语句(Data Definition Language 数据定义语言): create/alter/drop/truncate table SQL> -- create/drop view,create/drop index(sequ

springMVC3学习(八)--全局的异常处理

在springMVC的配置文件中: <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>/error</value><!-- 表示当抛出异常但没有