博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ibatis-调用存储过程
阅读量:6943 次
发布时间:2019-06-27

本文共 5781 字,大约阅读时间需要 19 分钟。

一、创建工程和数据库

    1.工程名:ibatisdemo1

    2.数据库名:ibatis

        1)创建表

        表:student

        CREATE TABLE `student` (

          `sid` int(11) NOT NULL,

          `sname` varchar(30) DEFAULT NULL,

          `major` varchar(30) DEFAULT NULL,

          `birth` date DEFAULT NULL,

          `score` decimal(10,0) DEFAULT NULL,

          PRIMARY KEY (`sid`)

        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        添加测试数据

        insert  into 

            `student`(`sid`,`sname`,`major`,`birth`,`score`) 

        values (1,'ss','ff','2014-03-06','22');

        insert  into 

            `student`(`sid`,`sname`,`major`,`birth`,`score`) 

        values (2,'vv','ee','2014-03-05','33');

        2)创建存储过程

        无参存储过程

        DELIMITER $

        DROP PROCEDURE IF EXISTS `mybatis`.`showdata` $

        CREATE PROCEDURE `mybatis`.`showdata`()

        BEGIN

            SELECT

                *

            FROM

                student;

        END $

        DELIMITER ;

        调用:CALL showdata();

        

        带输入参数存储过程

        DROP PROCEDURE IF EXISTS `mybatis`.`showdatabyid` $

        CREATE PROCEDURE `mybatis`.`showdatabyid`(IN sid INT)

        BEGIN

            SELECT

                *

            FROM

                student

            WHERE

                student.sid = sid;

        END $

        DELIMITER ;

        调用:CALL showdatabyid(2)

        

        带输出参数存储过程

        DELIMITER $

        DROP PROCEDURE IF EXISTS `mybatis`.`showdatacount` $

        CREATE PROCEDURE `mybatis`.`showdatacount`(OUT counts INT)

        BEGIN

            SELECT

                COUNT(1) INTO counts

            FROM

                student;

        END $

        DELIMITER ;

        调用:

        CALL showdatacount(@counts);

        SELECT @counts;

二、添加相关jar

    1.在项目中创建lib目录

        /lib

    2.在lib目录下添加jar包

        mysql-connector-java.jar

        ibatis-2.3.3.720.jar

        junit-4.4.jar

三、添加配置文件

    1.在项目中创建conf目录

        /conf

    2.在conf目录添加属性文件

        属性文件名称:SqlMap.properties

        内容:

        driver=com.mysql.jdbc.Driver

        url=jdbc:mysql://localhost:3306/ibatis

        username=root

        password=root

    3.在conf目录添加配置文件

        配置文件名称:SqlMapConfig.xml

        内容:

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

        <!DOCTYPE sqlMapConfig         

            PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"         

            "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">   

          

        <sqlMapConfig>  

            <!-- 加载连接数据属性文件 --> 

              <properties resource="SqlMap.properties"/>

              <!-- 配置事务 -->

              <transactionManager type="JDBC" commitRequired="false">

              <!-- 配置数据源 -->   

                <dataSource type="SIMPLE">   

                  <property name="JDBC.Driver" value="${driver}"/>   

                  <property name="JDBC.ConnectionURL" value="${url}"/>   

                  <property name="JDBC.Username" value="${username}"/>   

                  <property name="JDBC.Password" value="${password}"/>   

                </dataSource>   

              </transactionManager>   

        </sqlMapConfig>   

四、创建与数据库表中相关的javabean和映射文件

    1.在src下创建包

        cn.jbit.domain

    2.在包下创建类

        类名:Student.java

        内容:

        public class Student {

            private Integer sid;

            private String sname;

            private String major;//主修专业

            private Date birth;

            private float socre;

            // get and set 省略

        }

    3.在包下创建映射文件

        映射文件名:Student.xml

        内容:

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

            <!DOCTYPE sqlMap         

                PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"         

                "http://ibatis.apache.org/dtd/sql-map-2.dtd">   

            <sqlMap>   

              <typeAlias alias="Student" type="cn.jbit.domain.Student"/>

              <!-- 调用无参存储过程 -->

              <procedure id="studentproc" resultClass="Student">

                  {CALL showdata()}

              </procedure>

              <!-- 调用带输入参数存储过程 -->

              <procedure id="studentprocbyid" resultClass="Student" parameterClass="int">

                  {CALL showdatabyid(#id#)}

              </procedure>

              <!-- 调用带输出参数存储过程 -->

              <parameterMap class="map" id="outprocmap">

                  <parameter property="counts" javaType="int" jdbcType="int" mode="OUT"/>

              </parameterMap>

              <procedure id="outproc" parameterMap="outprocmap">

                  {CALL showdatacount(?)}

              </procedure>

            </sqlMap> 

    4.在核心配置文件中添加引用映射文件

        <!-- 加载映射文件 -->

        <sqlMap resource="cn/jbit/domain/Student.xml"/>   

五、设计DAO层

    接口:IStudentDao.java

        public interface IStudentDao {

            /**

             * 调用存储过程

             * @return

             */

            public List<Student> callProc();

            

            /**

             * 调用带参存储过程(输入)

             * @return

             */

            public List<Student> callProc(int id);

            

            /**

             * 调用带参存储过程(输出)

             * @return

             */

            public Integer callProcout();

        }

    实现类:StudentDaoImpl.java

        public class StudentDaoImpl implements IStudentDao{

            private static SqlMapClient sqlMapClient;

            static{

                try {

                    //加载配置文件

                    Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");

                    //实例化SqlMapClient

                    sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

                    //关闭

                    reader.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            

            @Override

            public List<Student> callProc() {

                List<Student> students=null;

                try {

                    students = sqlMapClient.queryForList("studentproc");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

                return students;

            }

        

            @Override

            public List<Student> callProc(int id) {

                List<Student> students=null;

                try {

                    students = sqlMapClient.queryForList("studentprocbyid",id);

                } catch (SQLException e) {

                    e.printStackTrace();

                }

                return students;

            }

        

            @Override

            public Integer callProcout() {

                HashMap hm = new HashMap();

                hm.put("counts",0);

                try {

                    sqlMapClient.insert("outproc", hm);

                } catch (SQLException e) {

                    e.printStackTrace();

                }

                return (Integer) hm.get("counts");

            }

        }

六、设计SERVICE层

    接口:IStudentService.java

        public interface IStudentService {

            /**

             * 调用带参存储过程(输出)

             * @return

             */

            public int callProcout();

            

            /**

             * 调用存储过程

             * @return

             */

            public List<Student> callProc();

            

            /**

             * 调用带参存储过程(输入)

             * @return

             */

            public List<Student> callProc(int id);

        }

    实现类:StudentServiceImpl.java

        public class StudentServiceImpl implements IStudentService {

        

            private IStudentDao studentDao = new StudentDaoImpl();

            @Override

            public List<Student> callProc() {

                return studentDao.callProc();

            }

        

            @Override

            public List<Student> callProc(int id) {

                return studentDao.callProc(id);

            }

        

            @Override

            public int callProcout() {

                return studentDao.callProcout();

            }

        }

七、测试

    1.在项目中创建test目录

        /test

    2.在test目录下创建包

        cn.jbit.junit

    3.在包下创建测试类

        类名:StudentTest.java

        public class StudentTest {

            IStudentService studentService = new StudentServiceImpl();

            /**

             * 测试调用带参存储过程(输出)

             */

            @Test

            public void testCallProcOut(){

                int result =studentService.callProcout();

                System.out.println(result);

            }

            

            

            /**

             * 测试调用带参存储过程(输入)

             */

            @Test

            public void testCallProcbyid(){

                List<Student> students =studentService.callProc(2);

                for (Student student : students) {

                    System.out.println(student.getSid());

                }

            }

            

            /**

             * 测试调用存储过程

             */

            @Test

            public void testCallProc(){

                List<Student> students =studentService.callProc();

                for (Student student : students) {

                    System.out.println(student.getSid());

                }

            }

        }

    本文转自  素颜猪  51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1558740

转载地址:http://qyonl.baihongyu.com/

你可能感兴趣的文章
sqlserver 分页
查看>>
php通过system()调用Linux命令问题
查看>>
swift 警告框 - 自定义按钮颜色,图片
查看>>
提高搜索引擎结果页面排名的各种技术
查看>>
刷题常用的STL容器总结
查看>>
sdut 1451 括号东东 (dp或模拟)
查看>>
POJ1002 487-3279
查看>>
Appium 在 Android UI 测试中的应用
查看>>
登录界面 动画背景效果
查看>>
DEV 第三方控件报表分类汇总
查看>>
DLL技术应用03 - 零基础入门学习Delphi46
查看>>
多维数组元素的地址
查看>>
动态内存管理 - C++快速入门33
查看>>
c#.net中引入ConfigurationManager报错
查看>>
2013应届毕业生“PPS”校招应聘总结
查看>>
CentOS 7 启动VNC失败问题
查看>>
微软职位内部推荐-This Job is no longer available.
查看>>
abbyy在使用时提示更改分辨率如何处理
查看>>
vagrant教程
查看>>
左右手坐标系与旋转正向
查看>>