こんにちは
最近なくしたパスモが飯能で見つかったが、取りに行くのを断念しました、桑原です
話の流れで、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





