mybatis存储过程
㈠ 什么是mybatis 为什么要使用my batis
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怎么调用PostgreSQL存储过程
1.调用没有OUT参数的存储过程:
创建存储过程:
create
or
replace
function
get_code(a1
varchar(32))
returns
varchar(32)
as
$$
declare
the_result
varchar(32);
begin
the_result
:=
name
from
t_project
where
id
=
a1;
return
the_result;
end;
$$
language
plpgsql;
sqlMap配置文件:
<select
id="f1"
resultType="String"
parameterType="map"
statementType="CALLABLE"
useCache="false">
<![CDATA[
select
get_code(
#{a1,mode=IN,jdbcType=VARCHAR}
)
]]>
</select>
注:不使用OUT参数的存储过程可以直接用
select
程序:
public
String
generateCode(String
a1)
{
Map<String,String>
paramMap
=
new
HashMap<String,String>();
paramMap.put("a1",
a1);
SqlSession
sqlSession
=
getSqlSession();
String
result
=
sqlSession.selectOne("f1",
paramMap);
return
result;
}
2.使用OUT参数的存储过程:
创建存储过程:
create
or
replace
function
testproc(a1
varchar(32),out
a2
varchar(32),out
a3
varchar(32))
as
$$
declare
begin
select
id
into
a2
from
t_project
where
id=a1;
select
name
into
a3
from
t_project
where
id=a1;
return;
end;
$$
language
plpgsql;
sqlMap配置文件:
<select
id="generateCode1"
parameterType="map"
statementType="CALLABLE"
useCache="false">
{
call
testproc(
#{a1,mode=IN,jdbcType=VARCHAR},
#{a2,mode=OUT,jdbcType=VARCHAR},
#{a3,mode=OUT,jdbcType=VARCHAR}
)
}
</select>
程序:
public
Map
generateCode1(String
a1)
{
Map<String,String>
paramMap
=
new
HashMap<String,String>();
paramMap.put("a1",
k1);
SqlSession
sqlSession
=
getSqlSession();
sqlSession.selectOne("generateCode1",
paramMap);
return
paramMap;
}
带输出参数的存储过程,sqlSession.selectOne("generateCode1",
paramMap);
将paramMap传入之后mybatis调用存储过程,将paramMap进行填充
paramMap最后的值:{a1=R20148800900,
a2=R20148800900,
a3=项目名称}
㈢ Java框架MyBatis工作流程是怎样的
一、Mybatis介绍
MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对 象)到数据库中的记录。
二、MyBatis工作流程
(1)加载配置并初始化
触发条件:加载配置文件
配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将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)返回处理结果将最终的处理结果返回。
orm工具的基本思想
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
从配置文件(通常是XML配置文件中)得到 sessionfactory.
由sessionfactory 产生 session
在session 中完成对数据的增删改查和事务提交等.
在用完之后关闭session 。
在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
功能架构
㈣ mybatise怎样调用存储过程
如何使用Myts调用数据库中的存储过程,下面以Oracle数据库的为例: 1.在数据库中创建以下的存储过程: 2.编写SQL映射文件WxclDAO.xml: 其中statementType="CALLABLE"表示要调用存储过程,parameterType参数类型; jdbcType对应数据库中的...
㈤ MyBatis怎么调用PostgreSQL存储过程
1.调用没有OUT参数的存储过程:
创建存储过程:
create or replace function get_code(a1 varchar(32)) returns varchar(32) as $$
declare the_result varchar(32);
begin
the_result := name from t_project where id = a1;
return the_result;
end;
$$
language plpgsql;
sqlMap配置文件:
<select id="f1" resultType="String" parameterType="map" statementType="CALLABLE" useCache="false">
<![CDATA[
select get_code(
#{a1,mode=IN,jdbcType=VARCHAR}
)
]]>
</select>
注:不使用OUT参数的存储过程可以直接用 select
程序:
public String generateCode(String a1) {
Map<String,String> paramMap = new HashMap<String,String>();
paramMap.put("a1", a1);
SqlSession sqlSession = getSqlSession();
String result = sqlSession.selectOne("f1", paramMap);
return result;
}
2.使用OUT参数的存储过程:
创建存储过程:
create or replace function testproc(a1 varchar(32),out a2 varchar(32),out a3 varchar(32)) as $$
declare
begin
select id into a2 from t_project where id=a1;
select name into a3 from t_project where id=a1;
return;
end;
$$
language plpgsql;
sqlMap配置文件:
<select id="generateCode1" parameterType="map" statementType="CALLABLE" useCache="false">
{
call testproc(
#{a1,mode=IN,jdbcType=VARCHAR},
#{a2,mode=OUT,jdbcType=VARCHAR},
#{a3,mode=OUT,jdbcType=VARCHAR}
)
}
</select>
程序:
public Map generateCode1(String a1) {
Map<String,String> paramMap = new HashMap<String,String>();
paramMap.put("a1", k1);
SqlSession sqlSession = getSqlSession();
sqlSession.selectOne("generateCode1", paramMap);
return paramMap;
}
带输出参数的存储过程,sqlSession.selectOne("generateCode1", paramMap);
将paramMap传入之后mybatis调用存储过程,将paramMap进行填充
paramMap最后的值:{a1=R20148800900, a2=R20148800900, a3=项目名称}
㈥ mybatis为什么调用不了存储过程
1、 sqlserver oracle sqlserver返回结果集是可以不要out参数的。如果sql中用的是select出结果,不需要配置out参数。多个结果集/结果集可以配置resultMap 来返回LIST,主要是调用selectList方法会自动把结果集加入到list中去的。
2 、sql有返回值 用select标签 。
3 、注意sql参数和mybatis参数的对应关系,这个这里就不讲了。
4、 注意参数个数 。
㈦ mybatis调用mysql存储过程(返回参数,单结果集,多结果集)
mybatis调用mysql存储过程(返回参数,单结果集,多结果集)
注: RETCODE、RETDESC 这里的输出值不用在函数里 SELECT RETCODE; ,因为即使没有,当执行成功后会自动返回在对象里(Object/Map),所以在函数里不用SELECT一下了。
Navicat中执行函数需要输入参数值,也是对应图1,@A@B表示输出值。(一个输入值两个输出值)
1. 标注一二三四五处如果存在,则执行成功后返回结果如下
标注一对应结果1
标注二对应结果2
标注三对应结果3
标注四对应结果4
标注五对应结果5
其中结果3返回的是集合。
存在这么多结果,想要取结果3中的集合是不好取的,只有像下图一样只有一个结果才好取出集合。
2. 标注一二四五处如果不存在,则执行成功后返回结果如下
只有结果1,对应的是标注三处的值。可以取出集合
函数p_plicate_enroll
㈧ 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。
(8)mybatis存储过程扩展阅读:
mybatis的功能构架:
1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。