ハマログ

株式会社イーツー・インフォの社員ブログ

hibernateで単純なSELECT文の順読み込み

こんにちは
最近なくしたパスモが飯能で見つかったが、取りに行くのを断念しました、桑原です

話の流れで、Javaでキーブレークを使った集計を実装しようと思い立ちました
hibernateで単純なSELECT文による順読み込みを行います
その読み込んだ結果を集計します

そこまでを目論でいましたが、hibernateの設定で四苦八苦し、
なんとか順読み込みできるところまでで、時間切れとなってしまいました

この記事では、その順読み込みのところまでのソースと、実行結果を
だらだらと下に貼り付けて終わりとさせて頂きました

次回は、これを基礎に集計処理に仕立て上げる予定です

次回
は、キーブレークを使った集計について説明します

この記事では次に記事を参考にさせて頂いています
ありがとうございます

Hibernateを使ってみる(Annotationを使って)

http://d.hatena.ne.jp/tanakakns/20120618/1340010699

log4jの設定ファイル(log4j.properties)の書き方

http://d.hatena.ne.jp/gungnir_odin/20130116/1358347663

順読み込みを行う対象のテーブルのDDLと見本データの登録文

create table URIAGE_CHOU (
ID          bigint          primary key not null auto_increment,
NENGETSU    varchar(6)      not null,
SHOUHIN     varchar(100)    not null,
GAKU        int             not null
);
insert URIAGE_CHOU (NENGETSU,SHOUHIN,GAKU) values ('201305', 'senbei', 30);
insert URIAGE_CHOU (NENGETSU,SHOUHIN,GAKU) values ('201305', 'monaka', 70);
insert URIAGE_CHOU (NENGETSU,SHOUHIN,GAKU) values ('201306', 'senbei', 30);
insert URIAGE_CHOU (NENGETSU,SHOUHIN,GAKU) values ('201306', 'senbei', 30);
insert URIAGE_CHOU (NENGETSU,SHOUHIN,GAKU) values ('201306', 'monaka', 70);

MySQL version: 5.5.28

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>exp1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>exp1</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<repositories>
		<repository>
			<id>JBoss repository</id>
			<url>http://repository.jboss.com/maven2/</url>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.4.2</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.1.4.Final</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.27</version>
		</dependency>
	</dependencies>

</project>

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>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/yourdbname?characterEncoding=UTF-8</property>
        <property name="connection.username">user</property>
        <property name="connection.password">password</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <mapping package="com.example.exp1" />
        <mapping class="com.example.exp1.UriageChou" />
    </session-factory>

</hibernate-configuration
>

log4j.properties

#---------------------------------------------------------------------------------------
# Logger
#---------------------------------------------------------------------------------------
# Root
log4j.rootLogger=INFO, ROOT

#---------------------------------------------------------------------------------------
# Appender
#---------------------------------------------------------------------------------------
# for Root
log4j.appender.ROOT=org.apache.log4j.ConsoleAppender
log4j.appender.ROOT.layout=org.apache.log4j.PatternLayout
log4j.appender.ROOT.layout.ConversionPattern=%-5p - %m%n

UriageChou.java

売上帳テーブルのレコードを表します。
このレコードを年月毎に集計する予定です。

package com.example.exp1;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "URIAGE_CHOU")
public class UriageChou {

    public UriageChou() {
    }
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID", unique = true, nullable = false)
    private long id;

    @Column(name = "NENGETSU", length = 6)
    private String  nengetsu;

    @Column(name = "SHOUHIN", length = 100)
    private String  shouhin;

    @Column(name = "GAKU")
    private Integer gaku;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNengetsu() {
        return nengetsu;
    }

    public void setNengetsu(String nengetsu) {
        this.nengetsu = nengetsu;
    }

    public String getShouhin() {
        return shouhin;
    }

    public void setShouhin(String shouhin) {
        this.shouhin = shouhin;
    }

    public Integer getGaku() {
        return gaku;
    }

    public void setGaku(Integer gaku) {
        this.gaku = gaku;
    }
}

App.java

処理の開始点を持つクラス
とりあえずDBと接続して売上帳テーブルから順にレコードを読み、コンソールに表示しています。

package com.example.exp1;

import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Hello world!
 *
 */
public class App 
{
    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static void main( String[] args )
    {
        SessionFactory f = buildSessionFactory();
        Session ss = f.openSession();
        ss.beginTransaction();
        ScrollableResults rs = ss.createSQLQuery("select * from URIAGE_CHOU order by NENGETSU")
                .addEntity(UriageChou.class)
                .scroll(ScrollMode.FORWARD_ONLY)
                ;
        
        while(rs.next()) {
            UriageChou u = (UriageChou) rs.get(0);
            System.out.println(u.getShouhin());
        }
                
        ss.getTransaction().commit();
    }
}

実行結果

Hibernate: select * from URIAGE_CHOU order by NENGETSU
senbei
monaka
senbei
senbei
monaka
daodatabaseDBhibernateJavaデータベース

桑原 光昭   桑原 光昭   2013年11月25日


関連記事

最適化のタイミングとバランス

Premature optimization is the root of al…

EコマースのオープンソースMagentoをXAMPPにインストール

こんにちは。S.Iです。 この度新規案件でMagentoのXAMPP for W…

jEnvで複数のJava SDKを使い分ける

素性のよくわからぬJavaの案件を引き継ぐことになり、その案件はJava7を必要…


← 前の投稿

次の投稿 →