MyBatis-50

问题描述:如何配置mybatis开发环境 大家好,小编来为大家解答以下问题,Mybatis500,一个有趣的事情,今天让我们一起来看看吧!

mybatis工作原理及为什么要用

MyBatis-50的相关图片

1、打开MyEclipse或者Eclipse,新建一个JavaProject项目mybatis。

2、下载所需jar包,右键点击项目依次选择New--Folder,此时弹出对话框,Folder name填写lib。复制jar包粘贴到lib文件夹,展开lib文件夹,选中2个jar包,右键点击jar包,依次选择Build Path--Add to Path。

3、打开SQL Server 2008查询分析器,创建mybatis数据库。

create database mybatis。

选择mybatis数据库,创建users表。

create table users(。

userId int identity(1,1) primary key,。

userName varchar(50) not null,。

userPassword char(32) not null,。

userBal int default 0。

4、在mybatis项目下创建cn.hans.mybatis.domain、cn.hans.mybatis.mapper、cn.hans.mybatis.test。

5、在cn.hans.mybatis.domain包下创建类User。

package cn.hans.mybatis.domain;。

public class User {。

private Integer userId;。

private String userName;。

private String userPassword;。

// account balance 账户余额。

private Integer userBal;。

public User(){

public Integer getUserId() {。

return userId;

public void setUserId(Integer userId) {。

this.userId = userId;。

public String getUserName() {。

return userName;。

public void setUserName(String userName) {。

this.userName = userName;。

public String getUserPassword() {。

return userPassword;。

public void setUserPassword(String userPassword) {。

this.userPassword = userPassword;。

public Integer getUserBal() {。

return userBal;。

public void setUserBal(Integer userBal) {。

this.userBal = userBal;。

6、在cn.hans.mybatis.mapper包下创建接口UserMapper。

package cn.hans.mybatis.mapper;。

import cn.hans.mybatis.domain.User;。

public interface UserMapper{。

public User selectUser(Integer userId);。

public void insertUser(User user);。

public void updateUser(User user);。

public void deleteUser(Integer userId);。

配置文件UserMapper.xml。

<?xml version="1.0" encoding="UTF-8" ?>。

<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//。

EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">。

<mapper namespace="cn.hans.mybatis.mapper.UserMapper">。

  <select id="selectUser" parameterType="Integer" resultType="cn.hans.mybatis.domain.User">。

     select *from users where userId = #{userId}。

  </select>。

  <insert id="insertUser" parameterType="cn.hans.mybatis.domain.User">。

      insert into users (userName,userPassword,userBal) values (#{userName},#{userPassword},#{userBal})。

  </insert>。

  <update id="updateUser" parameterType="cn.hans.mybatis.domain.User">。

      update users set userName=#{userName},userPassword=#{userPassword},userBal=#{userBal} where userId=#{userId}。

  </update>。

  <delete id="deleteUser" parameterType="Integer">。

      delete from users where UserId=#{userId}。

  </delete>。

</mapper>。

7、在项目根目录创建数据库配置文件db.properties。

jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver。

jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=mybatis。

jdbc.username=admin。

jdbc.password=admin。

mybatis配置文件Configuration.xml。

<?xml version="1.0" encoding="UTF-8" ?>。

<!DOCTYPE configuration PUBLIC。

  "-//mybatis.org//DTD Config 3.0//EN"。

  "http://mybatis.org/dtd/mybatis-3-config.dtd">。

<configuration>。

<properties resource="db.properties"/>。

<environments default="development">。

<environment id="development">。

<transactionManager type="JDBC"/>。

 <dataSource type="POOLED">。

   <property name="driver" value="${jdbc.driver}"/>。

   <property name="url" value="${jdbc.url}"/>。

   <property name="username" value="${jdbc.username}"/>。

   <property name="password" value="${jdbc.password}"/>。

 </dataSource>。

</environment>。

</environments>。

<mappers>。

      <mapper resource="cn/hans/mybatis/mapper/UserMapper.xml" />。

</mappers>。

</configuration>。

8、在cn.hans.mybatis.test下创建类MybatisTest。

package cn.hans.mybatis.test;。

import java.io.IOException;。

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 cn.hans.mybatis.domain.User;。

import cn.hans.mybatis.mapper.UserMapper;。

public class MybatisTest {。

public static void main(String[] args) throws IOException{。

SqlSessionFactory ssf=new SqlSessionFactoryBuilder()。

.build(Resources.getResourceAsReader("Configuration.xml"));。

SqlSession session=ssf.openSession();。

      UserMapper userMapper=session.getMapper(UserMapper.class);。

      User user=new User();。

      user.setUserName("test001");。

      user.setUserPassword("12345678123456781234567812345678");。

      user.setUserBal(50);。

userMapper.insertUser(user);。

session.commit();。

session.close();。

9、运行MybatisTest,打开SQL Server 2008,查询mybatis数据库下数据表users。如果现实如下,则配置成功。

谢谢采纳

mybatis怎么做联合查询的相关图片

mybatis怎么做联合查询

一、mybatis的工作原理:

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。

推荐在这个配置中使用类路径资源,但可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

二、使用mybatis的原因:因为mybatis具有许多的优点,具体如下:

1、简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

2、灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

3、解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

4、提供映射标签,支持对象与数据库的orm字段关系映射。

5、提供对象关系映射标签,支持对象关系组建维护。

6、提供xml标签,支持编写动态sql。

扩展资料:

mybatis的功能构架:

1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

参考资料来源:百度百科-MyBatis。

参考资料来源:百度百科-MyBatis从入门到精通。

什么是mybatis 为什么要使用my batis的相关图片

什么是mybatis 为什么要使用my batis

MyBatis之多表联合查询

在这篇文章里面主要讲解如何在mybatis里面使用一对一、一对多、多表联合查询(类似视图)操作的例子。

注:阅读本文前请先大概看一下之前两篇文章。

一、表结构

班级表class,学生表student,班级学生关系表ClassStudent。

这里一个学生只会在一个班级里面,也就是一对一的关系;一个班级有多个学生,也就是一对多的关系。

结构如下:

CREATE TABLE [dbo].[Class](。

[class_id] [int] NOT NULL,。

[class_name] [varchar](50) NOT NULL,。

CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED 。

[class_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]。

) ON [PRIMARY]

CREATE TABLE [dbo].[ClassStudent](。

[class_id] [int] NOT NULL,。

[student_id] [int] NOT NULL。

) ON [PRIMARY]

CREATE TABLE [dbo].[Student](。

[s_id] [int] NOT NULL,。

[s_name] [varchar](50) NOT NULL,。

CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED 。

[s_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]。

) ON [PRIMARY]

3张表的数据如下:

insert into Class values(1,'三(1)班')。

insert into Class values(2,'三(2)班')。

insert into Class values(3,'三(3)班')。

insert into Class values(4,'三(4)班')。

insert into Student values(1001,'张三')。

insert into Student values(1002,'李四')。

insert into Student values(1003,'赵五')。

insert into Student values(1004,'王二麻子')。

insert into ClassStudent values(1,1001)。

insert into ClassStudent values(1,1003)。

insert into ClassStudent values(4,1002)。

insert into ClassStudent values(3,1004)。

二、在原项目下新建一个包com.mybatis.sqljoinrelation,在包里面新建一个sqlMapper.xml的映射文件,在项目的mybatis的配置文件conf.xml中对这个sqlMapper.xml进行注册,注册片段如下:

<!-- 注册映射文件 -->。

<mappers>。

<mapper resource="com/mybatis/sqljoinrelation/sqlMapper.xml" />。

</mappers>。

紧接着在原项目下再新建一个包com.mybatis.bean,在里面新建实体类。

学生:

package com.mybatis.bean;。

/**

* 学生(临时)

*/

public class StudentTemp {。

private int studentid;。

private String studentname;。

private Class tempClass;。

public Class getTempClass() {。

return tempClass;。

public void setTempClass(Class tempClass) {。

this.tempClass = tempClass;。

public int getStudentid() {。

return studentid;。

public void setStudentid(int studentid) {。

this.studentid = studentid;。

public String getStudentname() {。

return studentname;。

public void setStudentname(String studentname) {。

this.studentname = studentname;。

@Override

public String toString() {。

return "StudentTemp [studentid=" + studentid + ", studentname="。

+ studentname + ", tempClass=" + tempClass + "]";。

班级:

package com.mybatis.bean;。

/**

* 班级

*/

public class Class {。

private int classid;。

private String classname;。

public int getClassid() {。

return classid;。

public void setClassid(int classid) {。

this.classid = classid;。

public String getClassname() {。

return classname;。

public void setClassname(String classname) {。

this.classname = classname;。

@Override

public String toString() {。

return "Class [classid=" + classid + ", classname=" + classname + "]";。

学生班级视图类:

package com.mybatis.bean;。

public class studentclass {。

private int s_id;。

private String s_name;。

private int class_id;。

private String class_name;。

public int getS_id() {。

return s_id;

public void setS_id(int s_id) {。

this.s_id = s_id;。

public String getS_name() {。

return s_name;

public void setS_name(String s_name) {。

this.s_name = s_name;。

public int getClass_id() {。

return class_id;。

public void setClass_id(int class_id) {。

this.class_id = class_id;。

public String getClass_name() {。

return class_name;。

public void setClass_name(String class_name) {。

this.class_name = class_name;。

@Override

public String toString() {。

return "studentclass [s_id=" + s_id + ", s_name=" + s_name。

+ ", class_id=" + class_id + ", class_name=" + class_name + "]";。

三、查询操作

1、 一对一,查询学生编号等于1001且他所在班级信息。

2、一对多,查询班级编号等于1且包含所有学生信息。

3、类似视图查询学生编号等于1001且他所在班级信息。

sqlMapper.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>。

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">。

<mapper namespace="com.mybatis.sqljoinrelation.sqlMapper">。

<!-- 1、 获取某学生以及该学生所在班级的信息 -->。

<!-- 可以显示指出c.class_id,c.class_name,s.s_id,s.s_name列明,

如果用"*"代替,则mybatis会自动匹配resultMap中提供的列名 -->。

<select id="getStudentAndClass" parameterType="int" resultMap="studentClassMap">。

select c.class_id,c.class_name,s.s_id,s.s_name。

from Class c left join ClassStudent cs。

on c.class_id = cs.class_id。

left join Student s。

on cs.student_id = s.s_id。

where s.s_id = #{id}。

</select>。

<!-- resultMap中的type表示返回什么类型的对象 -->。

<resultMap type="com.mybatis.bean.StudentTemp" id="studentClassMap">。

<!-- property 表示com.mybatis.bean.StudentTemp中的属性; column 表示表中的列名 -->。

<id property="studentid" column="s_id" />。

<result property="studentname" column="s_name" />。

<!-- association字面意思关联,这里只专门做一对一关联; property表示是com.mybatis.bean.StudentTemp中的属性名称;

javaType表示该属性是什么类型对象 -->。

<association property="tempClass" javaType="com.mybatis.bean.Class">。

<!-- property 表示com.mybatis.bean.Class中的属性; column 表示表中的列名 -->。

<id property="classid" column="class_id" />。

<result property="classname" column="class_name" />。

</association>。

</resultMap>。

<!-- 2、获取某学生以及该学生所在班级的信息,类似视图实现方式 -->。

<!-- resultType 对应简单类型,也就是实体中的属性名称与数据库表字段名称一模一样;

resultMap 对应复杂类型,属性名称与字段名称不一样可以通过resultMap中property,column进行映射 -->。

<select id="getStudentAndClassView" parameterType="int" resultType="com.mybatis.bean.studentclass">。

select c.class_id,c.class_name,s.s_id,s.s_name。

from Class c left join ClassStudent cs。

on c.class_id = cs.class_id。

left join Student s。

on cs.student_id = s.s_id。

where s.s_id = #{id}。

</select>。

<!-- 3、获取某班级以及班级里面所有学生的信息 -->。

<select id="getClassStudents" parameterType="int" resultMap="classStudentsMap">。

select *

from Class c left join ClassStudent cs。

on c.class_id = cs.class_id。

left join Student s。

on cs.student_id = s.s_id。

where c.class_id = #{id}。

</select>。

<resultMap type="com.mybatis.bean.ClassTemp" id="classStudentsMap">。

<id property="classid" column="class_id"/>。

<result property="classname" column="class_name"/>。

<!-- property表示集合类型属性名称,ofType表示集合中的对象是什么类型 -->。

<collection property="students" ofType="com.mybatis.bean.Student">。

<id property="studentid" column="s_id"/>。

<result property="studentname" column="s_name"/>。

</collection>。

</resultMap>。

</mapper>。

测试代码如下:

一对一与类似视图查询的代码在一起,如下:

package com.mybatis.sqljoinrelation;。

import org.apache.ibatis.session.SqlSession;。

import org.apache.ibatis.session.SqlSessionFactory;。

import com.mybatis.util.MybatisUtils;。

/**

* 一对一

*/

public class testonetoone {。

public static void main(String[] args) {。

SqlSessionFactory factory = MybatisUtils.getFactory();。

SqlSession session = null;。

try {

session = factory.openSession(true);。

//1、StudentTemp。

String statement1 = "com.mybatis.sqljoinrelation.sqlMapper.getStudentAndClass";。

System.out.println(session.selectOne(statement1, 1001));。

//2、用model类型接收数据。

String statement2 = "com.mybatis.sqljoinrelation.sqlMapper.getStudentAndClassView";。

System.out.println(session.selectOne(statement2, 1001));。

} catch (Exception e) {。

e.printStackTrace();。

}finally{

session.close();。

一对多测试代码如下:

package com.mybatis.sqljoinrelation;。

import org.apache.ibatis.session.SqlSession;。

import org.apache.ibatis.session.SqlSessionFactory;。

import com.mybatis.util.MybatisUtils;。

/**

* 一对多

*/

public class testonetomany {。

public static void main(String[] args) {。

SqlSessionFactory factory = MybatisUtils.getFactory();。

SqlSession session = null;。

try {

session = factory.openSession(true);。

//1、StudentTemp。

String statement = "com.mybatis.sqljoinrelation.sqlMapper.getClassStudents";。

System.out.println(session.selectOne(statement, 1));。

} catch (Exception e) {。

e.printStackTrace();。

}finally{

session.close();。

四、sqlMapper.xml需要说明的问题。

1、一对一:<association property="tempClass" javaType="com.mybatis.bean.Class">。

association字面意思关联,这里只专门做一对一关联; property表示是com.mybatis.bean.StudentTemp中的属性名称; javaType表示该属性是什么类型对象。

2、类似视图查询: <select id="getStudentAndClassView" parameterType="int" resultType="com.mybatis.bean.studentclass"> 。

resultType 对应简单类型,也就是实体中的属性名称与数据库表字段名称一模一样;

resultMap 对应复杂类型,属性名称与字段名称不一样可以通过resultMap中property,column进行映射,其中一对一与一对多都是用resultMap来映射。

3、一对多:<collection property="students" ofType="com.mybatis.bean.Student">。

collection字面意思是集合,这里专门做一对多关联 ,property表示集合类型属性名称,ofType表示集合中的对象是什么类型。

4、<select>select * from ...</student>与<select>select 字段1,字段2,字段3... from ...</student>。

可以显示指出c.class_id,c.class_name,s.s_id,s.s_name列明,如果用"*"代替,则mybatis会自动匹配resultMap或者resultType中提供的列名,

如果某对象存在列映射的属性,但是在select 后面找不到这个列,则在返回结果中,该列多映射的值为null。

至此,对于一对一、一对多、视图查询都能很好的解决,主要还是要重点关注第四点说明。

------------------SB要封便封。

Mybatis 执行sql的相关图片

Mybatis 执行sql

1、定义

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

2、使用原因

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

3、总体流程

(1)加载配置并初始化

触发条件:加载配置文件

处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API。

传入参数:为SQL的ID和传入参数对象。

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求

触发条件:API接口层传递请求过来。

传入参数:为SQL的ID和传入参数对象。

处理过程:

(A)根据SQL的ID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。

什么是mybatis框架

oracle 10g的DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,

显示真实的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销。通过对比预估的I/O与真实的I/O开销来判断。

SQL语句所存在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等。本文仅仅讲述。

display_cursor函数的使用。

一、display_cursor函数用法。

1、display_cursor函数语法。

DBMS_XPLAN.DISPLAY_CURSOR( 。

sql_id IN VARCHAR2 DEFAULT NULL, 。

cursor_child_no IN NUMBER DEFAULT NULL, 。

format IN VARCHAR2 DEFAULT 'TYPICAL'); 。

2、display_cursor函数参数描述。

sql_id。

指定位于库缓存执行计划中SQL语句的父游标。默认值为null。当使用默认值时当前会话的最后一条SQL语句的执行计划将被返回。

可以通过查询V$SQL 或V$SQLAREA的SQL_ID列来获得SQL语句的SQL_ID。

cursor_child_no。

指定父游标下子游标的序号。即指定被返回执行计划的SQL语句的子游标。默认值为0。如果为null,则sql_id所指父游标下所有子游标。

的执行计划都将被返回。

format。

控制SQL语句执行计划的输出部分,即哪些可以显示哪些不显示。使用与display函数的format参数与修饰符在这里同样适用。

除此之外当在开启statistics_level=all时或使用gather_plan_statistics提示可以获得执行计划中实时的统计信息。

有关详细的format格式描述请参考:dbms_xplan之display函数的使用 中format参数的描述。

下面给出启用统计信息时format新增的修饰符。

iostats 控制I/O统计的显示。

last 默认,显示所有执行计算过的统计。如果指定该值,则只显示最后一次执行的统计信息。

memstats 控制pga相关统计的显示。

allstats 此为iostats memstats的快捷方式,即allstats包含了iostats和memstats。

run_stats_last 等同于iostats last。只能用于oracle 10g R1。

run_stats_tot 等同于iostats。只能用于oracle 10g R1 。

抓一个最近一小时最消耗IO的SQL:

SELECT sql_id, COUNT(*)。

FROM gv$active_session_history ash, gv$event_name evt。

WHERE ash.sample_time > SYSDATE - 1 / 24。

AND ash.session_state = 'WAITING'。

AND ash.event_id = evt.event_id。

AND evt.wait_class = 'User I/O'。

GROUP BY sql_id。

ORDER BY COUNT(*) DESC;。

执行上面的SQL:

SQL> SELECT sql_id, COUNT(*)。

FROM gv$active_session_history ash, gv$event_name evt。

2 3 WHERE ash.sample_time > SYSDATE - 1 / 24。

4 AND ash.session_state = 'WAITING'。

5 AND ash.event_id = evt.event_id。

6 AND evt.wait_class = 'User I/O'。

7 GROUP BY sql_id。

8 ORDER BY COUNT(*) DESC;。

SQL_ID COUNT(*)。

------------- ----------。

g7fu6qba82m6b 668。

63r47zyphdk06 526。

9f5m4wd88nc1h 514。

593p47drw5fhk 232。

br91w16jzy4fu 120。

4fvwyjpnh6tp7 78。

gm0nrbfuj8kzr 70。

2184k363hw4xd 68。

gc4dajs7g5myy 46。

8vrk9sfuwfdgq 42。

ccpnb4dwdmq21 40。

查看SQL的执行计划:

SELECT * FROM TABLE(dbms_xplan.display_cursor('g7fu6qba82m6b')); 。

在SQLPLUS中执行:

SQL> set pagesize 2000。

SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));。

PLAN_TABLE_OUTPUT。

------------------------------------------------------------------------------------------------------------------------。

SQL_ID g7fu6qba82m6b, child number 0。

-------------------------------------。

UPDATE "CPDDS_PDATA"."CDM_LEDGER" SET "CSTM_NAME" = :a1,"CSTM_NO" =。

:a2,"PAPER_TYPE" = :a3,"PAPER_NO" = :a4,"CURR_TYPE" = :a5,"SVT_NO" =。

:a6,"BAL_DIR" = :a7,"BAL" = :a8,"AVAL_BAL" = :a9,"NORM_FRATIO" =。

:a10,"PK_BAL" = :a11,"DR_ACCU" = :a12,"CR_ACCU" = :a13,"LAST_TRAN_DATE" =。

:a14,"LAST_TRAN_TIME" = :a15,"PRT_LINE_NUM" = :a16,"NOREG_PK_REC_NUM" =。

:a17,"PK_NO" = :a18,"PWD" = :a19,"FLAG" = :a20,"FRZ_FLAG" =。

:a21,"CARD_HOLD_FLAG" = :a22,"PK_HOLD_FLAG" = :a23,"BGN_INT_DATE" =。

:a24,"OPEN_DATE" = :a25,"ACC_HOLD_FLAG" = :a26,"CLS_DATE" =。

:a27,"OPEN_TLR" = :a28,"CLS_TLR" = :a29,"CLS_INT" = :a30,"OPEN_INST" =。

:a31,"ADD_NUM" = :a32,"DAC" = :a33,"FRZ_TIMES1" = :a34,"FRZ_TIMES2" =。

:a35,"HOST_SEQNO" = :a36,"D_UPDATE_DATE" = :a37 WHERE "ACC" = :b0。

Plan hash value: 319441092。

-----------------------------------------------------------------------------------。

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |。

-----------------------------------------------------------------------------------。

| 0 | UPDATE STATEMENT | | | | 3 (100)| |。

| 1 | UPDATE | CDM_LEDGER | | | | |。

|* 2 | INDEX UNIQUE SCAN| I_CDM_LEDGER | 1 | 269 | 2 (0)| 00:00:01 |。

-----------------------------------------------------------------------------------。

Predicate Information (identified by operation id):。

---------------------------------------------------。

2 - access("ACC"=:B0)。

29 rows selected.。

总结

1、与display函数不同,display_cursor显示的为真实的执行计划。

2、对于format参数,使用与display函数的各个值,同样适用于display_cursor函数。

3、当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息。

4、根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等。

原文地址:http://qianchusai.com/MyBatis-50.html

lawnlamp-130

lawnlamp-130

interpersonal-230

interpersonal-230

中考背作文会被发现吗,中考背作文被发现的概率是多少

中考背作文会被发现吗,中考背作文被发现的概率是多少

cc/迷你世界女生皮肤头像,迷你世界女生皮肤图片简笔画

cc/迷你世界女生皮肤头像,迷你世界女生皮肤图片简笔画

cc/腐烂发霉的红薯图片,有点腐烂的红薯可以吃吗

cc/腐烂发霉的红薯图片,有点腐烂的红薯可以吃吗

mahatma-30

mahatma-30

standardized-70

standardized-70

难忘的旅行作文200字左右,难忘的旅行作文200字左右怎么写

难忘的旅行作文200字左右,难忘的旅行作文200字左右怎么写

infeed-40

infeed-40

configfree-210

configfree-210