发表时间:2008-01-06
最后修改:2009-08-31
public class Dept {
private Integer deptno;// 部门编号
private String dname;// 部门名称
private String loc;// 部门位置
//省略get 和set方法
}
public class Emp {
private Integer empno;//员工编号
private String ename;//员工姓名
private String job;//职位
private Integer mgr;//经理号
private Date hiredate;//雇佣日期
private Float sal;//工资
private Float comm;//工资补助
private Integer deptno;//部门编号
//省略get 和set方法
}
//sql
create table dept
(
deptno number(7) primary key,
dname varchar2(30) ,
loc varchar2(30)
);
insert into dept values(1,'市场部','');
insert into dept values(2,'开发部','');
insert into dept values(3,'服务部','');
create table emp
(
empno number(7) primary key,
ename varchar2(20),
job varchar2(10),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(7)
);
--alter table emp add constraint foreign key fk_emp_dept(deptno) references dept(deptno);
insert into emp values(7233,'tomcat','saler',7369,date'2000-9-5',5000,null,1);
insert into emp values(7369,'mysql','manager',1,date'2000-2-12',6600,200,2);
insert into emp values(7562,'java','saler',2,date'2000-3-23',8000,100,1);
insert into emp values(7412,'struts','saler',2,date'1999-5-14',20000,null,1);
insert into emp values(7986,'hibernate','manager',7512,date'2000-2-12',6600,200,2);
insert into emp values(7328,'spring','saler',2,date'1988-12-25',8000,1000,1);
//创建序列
create sequence myseq;
//存储过程
create or replace
procedure mypro(dept_no out number,deptname in varchar2,dept_loc in varchar2)
as
no number(7);
insertStr varchar(150);
begin
select myseq.nextval into no from dual;
dept_no:=no;
insertStr := 'insert into dept(deptno,dname,loc)
values('||dept_no||','||''''||deptname||''''||','||''''||dept_loc||''''||')';
execute immediate insertStr;
commit;
end;
ibatis的配置文件:
<parameterMap id="save" class="java.util.Map">
<!-- jdbcType="int" 可能会抛出异常 -->
<parameter property="dept_no" javaType="java.lang.Long"
jdbcType="INTEGER" mode="OUT" />
<parameter property="dept_name" jdbcType="VARCHAR2"
javaType="java.lang.String" mode="IN" />
<parameter property="dept_loc" javaType="java.lang.String"
jdbcType="VARCHAR2" mode="IN" />
</parameterMap>
<!-- 执行存储过程 有返回值-->
<procedure id="saveDept" parameterMap="save"
resultClass="java.lang.Integer">
{call mypro(?,?,?)}
</procedure>
3 测试方法
SqlMapClient sqlClient = null;
try {
Reader reader = Resources
.getResourceAsReader("config/SqlMapConfig.xml");
sqlClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
// Map map = new HashMap();
// //map.put("deptno", 10);
// map.put("deptname", "name");
// map.put("dept_loc", "loc");
// sqlClient.startTransaction();
// sqlClient.queryForObject("saveDept", map);
//
// sqlClient.commitTransaction();
Map map = new HashMap();
BigDecimal key = new BigDecimal(0);
map.put("dept_no", key);
map.put("dept_name", "name");
map.put("dept_loc", "loc");
sqlClient.startTransaction();
Object object = sqlClient.queryForObject("saveDept", map);
sqlClient.commitTransaction();
System.out.println(map.get("dept_no").toString());
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}