设为首页 收藏本站
查看: 275|回复: 0

[经验分享] ibatis调用mysql进行数据库操作实例

[复制链接]

尚未签到

发表于 2016-10-17 10:02:34 | 显示全部楼层 |阅读模式
iBatis是个像Hibernate, JDO,EJB一类的数据持久框架,它能将对象映射为SQL语句.它是个轻量级的框架并且持久性API适合持久化POJO.iBatis也与Hibernate, JDO不同,因为它使用存储过程和现有的SQL来处理数据库.
 
以下例子显示了如何创建ibatis例子及执行查询插入删除更新调用存储过程的过程。
1mysql数据库中创建一个数据库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 ,导入ibatismysql-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的工厂类,相当于MyEclipseHibernate应用程序生成的HibernateSessionFactory类。
创建测试类ClientTest.java来测试数据库一系列操作。
 
创建完目录结构如下图所示

 
DSC0000.jpg
 

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());

        }

    }

}
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287328-1-1.html 上篇帖子: mysql中的 IN和FIND_IN_SET的查询问题 下篇帖子: 各种数据库下面的Mysql分页代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表