您的位置:首页 > 数据库 > MySQL

ibatis调用mysql进行数据库操作实例

2011-04-28 16:25 274 查看

iBatis是个像Hibernate, JDO,EJB一类的数据持久框架,它能将对象映射为SQL语句.它是个轻量级的框架并且持久性API适合持久化POJO.iBatis也与Hibernate, JDO不同,因为它使用存储过程和现有的SQL来处理数据库.

 

以下例子显示了如何创建ibatis例子及执行查询插入删除更新调用存储过程的过程。

1在mysql数据库中创建一个数据库ibatisdata及数据库表person及一个存储过程showData,创建代码如下

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for person

-- ----------------------------

DROP TABLE IF EXISTS `person`;

CREATE TABLE `person` (

  `id` int(11) NOT NULL DEFAULT '0',

  `name` varchar(16) DEFAULT NULL,

  `passwd` varchar(16) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Procedure structure for showData

-- ----------------------------

DROP PROCEDURE IF EXISTS `showData`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `showData`()

BEGIN

select * from Person;

END;;

DELIMITER ;

 

-- ----------------------------

-- Records

-- ----------------------------

INSERT INTO `person` VALUES ('1', 'zhang', null);

 

2 在myeclipse中创建一个java project,然后通过右击项目-properties-java build path-libraries –add external jars ,导入ibatis及mysql-connector jar包;

然后创建 Person.java类,即对应数据库中person表的POJO类。

为了映射配置我们需要创建SqlMapConfig.xml(类似于hibernate中的hibernate.cfg.xml文件)来指定如下信息:针对映射语句的命名空间前缀、我们数据库使用jdbc进行访问及访问驱动、链接url、链接用户名密码、对应的SQL语句描述文件等信息。

创建SqlMap映射文件Person.xml负责程序执行的SQL语句(相当于Hibernate的映射文件 *.hbm.xml,只是它的映射不靠POJO的属性到数据库字段的一一映射,靠的是Sql语句,所以谓之 SqlMap, 注意每条语句中参数的写法)等。

创建一个获取SqlMapClient的工厂类,相当于MyEclipse为Hibernate应用程序生成的HibernateSessionFactory类。

创建测试类ClientTest.java来测试数据库一系列操作。

 

创建完目录结构如下图所示

 

 

Person.java

package com.yan;

public class Person {

    public Integer id;

    public String name;

    public String passwd;

    public Person() {

       super();

    }

    public Person(Integer id) {

       super();

       this.id = id;

    }

    public Integer getId() {

       return id;

    }

    public String getName() {

       return name;

    }

    public String getPasswd() {

       return passwd;

    }

    public void setId(Integer id) {

       this.id = id;

    }

    public void setPasswd(String passwd) {

       this.passwd = passwd;

    }

    public void setName(String name2) {

       this.name = name2;

    }

}

 

SqlMapConfig.java

package com.yan;

import java.io.Reader;

import com.ibatis.common.resources.Resources;

import com.ibatis.sqlmap.client.SqlMapClient;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class SqlMapConfig {

    private static final SqlMapClient sqlMap;

    static

    {

        try

        {

            String resource = "SqlMapConfig.xml";

            Reader reader = Resources.getResourceAsReader(resource);

            sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

        }

        catch (Exception e)

        {

            e.printStackTrace();

            throw new RuntimeException("Error initializing MyAppSqlConfig class. Cause: " + e);

        }

    }

    public static SqlMapClient getSqlMapInstance()

    {

        return sqlMap;

    }

}

 

SqlMapConfig.xml

<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"

"http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

 

    <!-- SqlMap的环境属性配置 -->

    <settings cacheModelsEnabled="true" enhancementEnabled="true"

       lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"

       maxTransactions="5" useStatementNamespaces="false" />

   

    <!-- 配置SqlMap的连接池属性,默认使用SimpleDataSource实现-->

    <transactionManager type="JDBC">

       <dataSource type="SIMPLE">

           <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />

           <property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1:3306/ibatisdata" />

           <property name="JDBC.Username" value="root" />

           <property name="JDBC.Password" value="123456" />

       </dataSource>

    </transactionManager>

   

    <!-- SqlMap的映射文件 -->

    <sqlMap resource="com/yan/Person.xml" />

</sqlMapConfig>

 

Person.xml

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

<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"

"http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="Person">

    <!-- 传入包装类型(Integer)参数,查询到结果集组装成一个Person对象返回 -->

    <select id="getPerson" parameterClass="int" resultClass="com.yan.Person">

       SELECT ID as id, NAME as name, PASSWD as passwd

        FROM PERSON  WHERE ID = #value#

    </select>

   

    <!-- 插入一条Person对应的记录到数据库中 -->

    <insert id="insertPerson" parameterClass="com.yan.Person">

       INSERT INTO PERSON (ID, NAME, PASSWD) VALUES (#id#,#name#, #passwd#)

    </insert>

   

    <!-- 关联ID更新一条Person记录到数据库中 -->

    <update id="updatePerson" parameterClass="com.yan.Person">

       UPDATE PERSON SET NAME = #name#, PASSWD = #passwd# WHERE ID = #id#

    </update>

   

    <!-- 根据ID从数据库中删除一条Person记录 -->

    <delete id="deletePerson" parameterClass="com.yan.Person">

       DELETE FROM PERSON WHERE ID = #id#

    </delete>

   

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

    <procedure id="storedinfo" resultClass="com.yan.Person" >

      {call showData()}

    </procedure>

</sqlMap>

 

ClientTest.java

package com.yan;

 

import java.util.List;

 

import com.ibatis.sqlmap.client.SqlMapClient;

public class ClientTest {

    public static void main(String[] args) throws Exception

    {

        SqlMapClient sqlMap = SqlMapConfig.getSqlMapInstance(); // as coded above

       

        Integer personPk = new Integer(1);//根据id查找Person

        Person person = (Person) sqlMap.queryForObject("getPerson", personPk);

        System.out.println(person.getName());

      

        person.setName("yan");

        sqlMap.update("updatePerson",person);//更新Person

       

        person.setId(7);

        sqlMap.insert("insertPerson",person);//插入新的Person

       

        sqlMap.delete("deletePerson", person);//根据id删除Person

       

        List<Person> persons=sqlMap.queryForList("storedinfo",null);//调用存储过程,查询出所有的Person

        for(Person p:persons){

        System.out.println("id:"+p.getId()+"   name :"+p.getName()+"   pwd:"+p.getPasswd());

        }

    }

}

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: