7.2 dble连接Demo

开发框架连接

ibatis

利用ibatis连接dble时,连接方式与MySQL相同。下面是一个简单示例。 JDBC配置:

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc: mysql://127.0.0.1:8066/TESTDB?useUnicode=true&characterEncoding=utf-8
jdbc.user=root
jdbc.password=123456
映射文件配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
  <insert id="saveUser" parameterType="com.bean.User">
    insert into user(id,name,phone,birthday)
    values (0,#{name},#{phone},#{birthday})
    <selectKey keyProperty="id" order="after" resultType="int">
      select last_insert_id() as id
    </selectKey>
  </insert>
  <delete id="deleteUserById" parameterType="java.lang.String">
    delete from user where id=#{id}
  </delete>
  <update id="updateUser" parameterType="com.bean.User">
    update user set name=#{name},phone=#{phone},birthday=#{birthday} where id=#{id}
  </update>
  <update id="updateUsers">
    /\*!dble:sql=select * from user;\*/update users set usercount=(select count(\*) from user),ts=now()
  </update>
  <select id="getUserById" parameterType="java.lang.String" resultType="com.bean.User">
    select \* from user where id=#{id}
  </select>
  <select id="getUsers" resultType="com.bean.User">
    select \* from user
  </select>
语句select last_insert_id() as id可用来获取新写入记录的ID。 updateUsers方法用到了 dble的注解,由于ibatis中的符号#具有特殊含义,因此注解中不能含有#。

hibernate

利用hibernate连接dble时,连接方式与MySQL相同。下面是一个简单示例。 hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc: mysql://192.168.58.51:8066/testdb?useUnicode=true&characterEncoding=utf-8</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123456</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
  <property name="hibernate.format_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <mapping resource="com/actiontech/test/News.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
News.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.actiontech.test.News" table="news_table">
    <id name="id" type="java.lang.Integer">
      <column name="id" />
    </id>
    <property name="title" type="java.lang.String">
      <column name="title" />
    </property>
    <property name="content" type="java.lang.String">
      <column name="content" />
    </property>
  </class>
</hibernate-mapping>
News.java:

package com.actiontech.test;
public class News {
  private Integer id;
  private String title;
  private String content;
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getTitle() {
    return title;
  }
  public void setTitle(String title) {
    this.title = title;
  }

public String getContent() { return content; } public void setContent(String content) { this.content = content; } }</pre> NewsManager.java:

package com.actiontech.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class NewsManager {
  public static void main(String[] args)
    throws Exception {
    Configuration config = new Configuration().configure();
    SessionFactory factory = config.buildSessionFactory();
    Session session = factory.openSession();
    Transaction transaction = session.beginTransaction();
    News news = new News();
    news.setId(10);
    news.setTitle("dble示例");
    news.setContent("Hibernate 连接dble的第一个例子");
    session.save(news);
    transaction.commit();
    session.close();
    factory.close();
  }
}
dble虽然支持Hibernate但不建议使用Hibernate,因为Hibernate无法控制SQL的生成,无法做到对查询SQL的优化,大数量下可能会出现性能问题。

JDBC

利用JDBC连接dble时,连接方式与MySQL相同。下面是一个简单示例:

package com.actiontech.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicLong;
public class SingleMixEngine {
  public static void main(String[] args) throws Exception {
    Class.forName("com.mysql.jdbc.Driver");
    Properties props = new Properties();
    props.setProperty("user", "root");
    props.setProperty("password", "123456");
    SingleMixEngine engine = new SingleMixEngine();
    engine.execute(props,"jdbc:mysql://192.168.58.51:8066/testdb");
  }
  final AtomicLong tmAl = new AtomicLong();
  final String tableName="news_table";
  public void execute(Properties props,String url) {
    CountDownLatch cdl = new CountDownLatch(1);
    long start = System.currentTimeMillis();
    for (int i = 0; i < 1; i++) {
      TestThread insertThread = new TestThread(props,cdl, url);
      Thread t = new Thread(insertThread);
      t.start();
      System.out.println("Test start");
    }
    try {
      cdl.await();
      long end = System.currentTimeMillis();
      System.out.println("Test end,total cost:" + (end-start) + "ms");
    } catch (Exception e) {
    }
  }

  class TestThread implements Runnable {
    Properties props;
    private CountDownLatch countDownLatch;
    String url;
    public TestThread(Properties props,CountDownLatch cdl,String url) {
      this.props = props;
      this.countDownLatch = cdl;
      this.url = url;
    }
    public void run() {
      Connection connection = null;
      PreparedStatement ps = null;
      Statement st = null;
      try {
        connection = DriverManager.getConnection(url,props);
        connection.setAutoCommit(true);
        st = connection.createStatement();
        String dropSql = "drop table if exists " + tableName;
        System.out.println("Execute SQL:\n\t"+dropSql);
        st.execute(dropSql);

        String createSql = "create table " + tableName + "(id int,title varchar(20),content varchar(50))";
        System.out.println("Execute SQL:\n\t"+createSql);
        st.execute(createSql);

        String insertSql = "insert into " + tableName + " (id,title,content) values(?,?,?)";
        System.out.println("Prepared SQL:\n\t"+insertSql);
        ps = connection.prepareStatement(insertSql);
        for (int i = 1; i <= 3; i++) {
          ps.setInt(1,i);
          ps.setString(2, "测试"+i);
          ps.setString(3, "这是第"+i+"条测试数据");
          ps.execute();
          System.out.println("Insert data:\t"+i+","+"测试"+i+","+"这是第"+i+"条测试数据");
        }

        String querySQL = "select * from " + tableName + " order by id";
        System.out.println("Execute SQL:\n\t"+querySQL);
        ResultSet rs = st.executeQuery(querySQL);
        int colcount = rs.getMetaData().getColumnCount();
        System.out.println("Current Data:");
        while(rs.next()){
          for(int i=1;i<=colcount;i++){
            System.out.print("\t"+rs.getString(i));
          }
          System.out.println();
        }

        String updateSql = "update " + tableName + " set title='test1' where id=1";
        System.out.println("Execute SQL:\n\t"+updateSql);
        st.execute(updateSql);
        rs = st.executeQuery(querySQL);
        System.out.println("Current Data:");
        while(rs.next()){
          for(int i=1;i<=colcount;i++){
            System.out.print("\t"+rs.getString(i));
          }
          System.out.println();
        }

        String deleteSql = "delete from " + tableName + " where id=2";
        System.out.println("Execute SQL:\n\t"+deleteSql);
        st.execute(deleteSql);
        rs = st.executeQuery(querySQL);
        System.out.println("Current Data:");
        while(rs.next()){
          for(int i=1;i<=colcount;i++){
            System.out.print("\t"+rs.getString(i));
          }
          System.out.println();
        }

        String createIndexSql = "create index idx_1 on " + tableName + "(title)";
        System.out.println("Execute SQL:\n\t"+createIndexSql);
        st.execute(createIndexSql);

        String dropIndexSql = "drop index idx_1 on " + tableName;
        System.out.println("Execute SQL:\n\t"+dropIndexSql);
        st.execute(dropIndexSql);
      } catch (Exception e) {
        System.out.println(new java.util.Date().toString());
        e.printStackTrace();
      } finally {
        if (ps != null)
          try {
            ps.close();
          } catch (SQLException e1) {
            e1.printStackTrace();
          }
        if (connection != null)
          try {
            connection.close();
          } catch (SQLException e1) {
            e1.printStackTrace();
          }
        this.countDownLatch.countDown();
      }
    }
  }
}

results matching ""

    No results matching ""