zoukankan      html  css  js  c++  java
  • 小试Ibatis

    iBatis 是一个 O/R Mapping 解决方案, iBatis 最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能, iBatis 是能满足你的要求又足够灵活的最简单的解决方案。iBatis中所有的DAO方法都只传一个值对象,复杂查询当然也不例外。另外对常见的1:1,1:N关系的支持不如Hibernate。Ibatis是应该属于面向SQL的O/RMapping 而Hibernate 则属于面向对象的O/R Mappding相对比较复杂。

    一直听说Ibatis很简单,而且很不错。所以,今天就学习一下。

    先建数据库和表:
    /*
    MySQL Data Transfer
    Source Host: localhost
    Source Database: ibatis
    Target Host: localhost
    Target Database: ibatis
    Date: 2007-4-24 1:02:15
    */

    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for t_user
    -- ----------------------------
    Create TABLE `t_user` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(50) default NULL,
      `password` varchar(10) default NULL,
      `email` varchar(50) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

    -- ----------------------------
    -- Records
    -- ----------------------------
    Insert INTO `t_user` VALUES ('1', '小林信仁', 'admin', 'xihaikun#baidu.com.cn');
    Insert INTO `t_user` VALUES ('2', 'Eays, 'admin', 'sydica#163.com');
    Insert INTO `t_user` VALUES ('3', '8', '8888', 'xihaikun#google.net');

    我的Eclipse工程目录:

    现在编写Ibatis的SqlMapConfig.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE sqlMapConfig
        PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
        "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
    <!-- Ibatis配置文件-->

    <sqlMapConfig >
    <!-- 加载连接数据库属性文件 -->
    <properties resource="net/eays/maps/SqlMapConfig.properties" />

     <!--
     cacheModelsEnabled:是否启动SqlMapClient的缓存机制。
     enhancementEnabled:是否针对POJO启用字节码增加机制以提升geter/seter的调用效用,为延迟加载带来了及大的性能提升。
     lazyLoadingEnabled:是否启用延迟加载机制。
     maxRequests:最大并大请求数。
     maxSessions:最大Session数,即当前最大允许的开发SqlMapClient数
     maxTransactions:最大并发事务数。   
     -->
     <settings
     cacheModelsEnabled = "true"
     enhancementEnabled = "true"
     lazyLoadingEnabled = "true"
      maxRequests = "32"
      maxSessions = "10"
      maxTransactions = "5"
      useStatementNamespaces = "false"
     />
        <!-- DataSource -->
        <transactionManager type="JDBC">
         <dataSource type="SIMPLE">
          <!--JDBC驱动-->
          <property name="JDBC.Driver" value="${driver}" />
          <!--数据库URL-->
          <property name="JDBC.ConnectionURL" value="${url}" />
          <!--数据库用户名-->
          <property name="JDBC.Username" value="${username}" />
          <!--数据库密码-->
          <property name="JDBC.Password" value="${password}" />
       <!--不知道,在网站上查不出来,有时间再研究-->
       <property name="JDBC.DefaultAutoCommit" value="true" />
       <!--数据库连接池可维持的最大容量-->
       <property name="Pool.MaximumActiveConnections" value="10"/>
       <!--数据库连接池中允许的可挂起连接数-->
       <property name="Pool.MaximumIdleConnections" value="5"/>
       <!--数据库连接池中,连接被某个任务所占用的最大时间-->
       <property name="Pool.MaximumCheckoutTime" value="120000"/>
       <!--当线程想从连接池中获取连接时,连接池中无可用连接,该参数设置线程所允许等待的最长时间-->
       <property name="Pool.TimeToWait" value="500"/>
       <!--数据库连接状态检查语句-->
       <property name="Pool.PingQuery" value="select 1 from t_user"/>
       <!--是否允许检查连接状态-->
       <property name="Pool.PingEnabled" value="false"/>
       <!--对持续连接超过设定值的连接进行检查-->
       <property name="Pool.PingConnectionsOlderThan" value="1"/>
       <!--对空闲超过设定值的连接进行检查-->
       <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
         </dataSource>
        </transactionManager>
    <!--加载SqlMap文件-->
    <sqlMap resource="net/eays/maps/User.xml" />
    </sqlMapConfig>

    编写配置文件类:SqlMapConfig.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/ibatis
    username=root
    password=password

    编写User.java类

    package net.eays.maps;


    /**
     * @author 小林信仁
     * @version 2007.4.23
     */
    public class User {
     
     private int id;
     private String name;
     private String password;
     private String email;
     
     public int getId() {
      return id;
     }
     public void setId(int id) {
      this.id = id;
     }
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     public String getEmail() {
      return email;
     }
     public void setEmail(String email) {
      this.email = email;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
     
    }
    然后编写User.java类关联映射的User.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="Author">
     <!--模块配置-->
     <!--设置本映射文件中的别名-->
     <typeAlias alias="user" type="net.eays.maps.User" />
     <!--Statement配置-->
     
     <select id="getUser" parameterClass="java.lang.String" resultClass="user">
     <![CDATA[ select name,password,email from t_user where  name = #name#]]>
     </select>
     <!--查询所有的记录-->
     <select id="getAllUser" resultClass="user">
     <![CDATA[ select * from t_user]]>
     </select>
     <!--修改-->
     <update id="updateUser" parameterClass="user">
     <![CDATA[ update t_user set name = #name#,password = #password# where id = #id#]]>
     </update>
     <!--删除-->
     <delete id="deleteUser" parameterClass="user">
     <![CDATA[ delete from t_user where id = #id# ]]>
     </delete>
     <insert id="insertUser" parameterClass="user">
     <![CDATA[ insert into t_user(name,password,email) values(#name#,#password#,#email#)]]>
     </insert>
    </sqlMap>

    编写测试类:
    package com.eays;

    import java.sql.*;
    import java.io.Reader;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    import net.eays.maps.User;
    import com.ibatis.sqlmap.client.SqlMapClient;
    import com.ibatis.sqlmap.client.SqlMapClientBuilder;
    import com.ibatis.common.resources.Resources;

    /**
     * @author 小林信仁
     * @version 2007/4/23
     */
    public class TestIbatis {
     //首先初始化一个Ibatis获取一个SqlMapConfig.xml对象
      public static SqlMapClient sqlMap = null;
      TestIbatis(){
      
      String resource = "net/eays/maps/SqlMapConfig.xml";
      try {
       Reader reader = Resources.getResourceAsReader(resource);
       sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
      } catch (IOException e) {
       // TODO Auto-generated catch block
       System.err.print("无价实例化SqlMapConfig对象");
      }
     }
     public  void updateUser(String name,String password,int id){
      User user = new User();
      user.setId(id);
      user.setName(name);
      user.setPassword(password);
      try {
       sqlMap.startTransaction();
       sqlMap.update("updateUser", user);
       sqlMap.commitTransaction();
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       System.err.println("修改错误");
      }finally{
       try {
        sqlMap.endTransaction();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
     }
     public static List getAllUser(){
      List list = null;
      try {
       sqlMap.startTransaction();
       list = sqlMap.queryForList("getAllUser");
       sqlMap.commitTransaction();
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }finally{
       try {
        sqlMap.endTransaction();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
      return list;
     }
     
     public  boolean insertUser(String name,String password,String email){
      boolean bool = false;  
      User user = new User();
      user.setName(name);
      user.setEmail(email);
      user.setPassword(password);
      try {
       sqlMap.startTransaction();
       sqlMap.insert("insertUser",user);
       bool = true;
       sqlMap.commitTransaction();
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }finally{
       try {
        sqlMap.endTransaction();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
      return bool;
      
     }
     public static void main(String[] args) {
      
      TestIbatis testIbatis = new TestIbatis();
      testIbatis.updateUser("易思网", "sydica", 2);
      List list = TestIbatis.getAllUser();
      Iterator iterator = list.iterator();
      while(iterator.hasNext()){
       User user = (User)iterator.next();
       System.out.print("Email=" + user.getEmail() + " ");
       System.out.print("Id=" + user.getId() + " ");
       System.out.print("Password=" + user.getPassword() + " ");
       System.out.println("Name=" + user.getName() + " ");
       
      }
     }
     
    }


     
  • 相关阅读:
    Native RabbitMQ Direct Exchange
    RabbitMQ系列文章导读
    AbstractQueuedSynchronizer
    CountDownLatch和CyclicBarrier
    显示锁Lock
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
  • 原文地址:https://www.cnblogs.com/xhk1228/p/3172823.html
Copyright © 2011-2022 走看看