SPRING-SOURCE.RU | |
|
|
Я буду использовать MEMORY таблицы, где данные содержаться в памяти, но любые изменения в структуре или содержании записываются в файл <dbname>.script. Этот файл считается при следующем запуске базы и MEMORY таблицы будут пересоздаваться с заполненным контентом. Важно помнить, что данные, хранящиеся в памяти, записываются в файл когда вы делаете команду SHUTDOWN (COMPACT | IMMEDIATELY). Но если вы остановите сервер просто закрыв его или еще как-нибудь (грубо), то данные не будут сохранены.
Запускаем HSQL сервер баз данных:
java -cp hsqldb.jar org.hsqldb.Server
Мы не указываем ни имени, ни алиасов и поэтому имена файлов будут иметь маску test – имя по умолчанию.
Далее запускаем менеджер:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
В окне выберите HSQL Database Engine Server и нажмите ОК. Для начала создадим таблицу для работы и занесем в ее поля данные.
create table Course (course_id integer, name varchar, course varchar, PRIMARY KEY (course_id)); insert into Course values (1,'Sam', 'Java'); insert into Course values (2,'peter', 'J2EE'); insert into Course values (3,'paul', 'JSF'); insert into Course values (4,'jonathan', 'Hibernate'); insert into Course values (5,'james', 'Spring'); select * from Course;
После этого выберите View -> Refersh Tree и вы увидите в левом окне надпись COURSE. Также после этого будут сгенерированы соответствующие файлы.
Набирайте команду SHUTDOWN COMPACT и запускайте ее. Теперь у нас есть файл test.script.
Снова запускаем сервер и переходим в Eclipse. Структура директорий показана на картинке.
Вот содержание 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mytutorial</groupId> <artifactId>simple</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>simple</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.4.ga</version> </dependency> <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>1.8.0.7</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>maven-repository.dev.java.net</id> <name>Java Dev Net Repository</name> <url>http://download.java.net/maven/2/</url> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>ibiblio.org</id> <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name> <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url> <releases> <enabled>true</enabled> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
Теперь пора создавать классы. Начнем с Course.java:
package com.mytutorial; public class Course { private Long id; private String name; private String course; }
Делаем для всех этих свойств getters и setters:
public class Course { private Long id; private String name; private String course; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } }
Затем в директории ресурсов создаем файл Course.hbm.xml. Он нужен для связывания Course.java с HSQL базой данных, таблицей COURSE.
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.mytutorial.Course" table="Course"> <id name="id" column="course_id"> <generator class="native" /> </id> <property name="name" column="name" /> <property name="course" column="course" /> </class> </hibernate-mapping>
Теперь создадим файл hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:hsql://localhost</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">2</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <!-- Drop and re-create the database schema on start-up, also try with “update” to keep the previous values --> <property name="hbm2ddl.auto">create</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <mapping resource="com/mytutorial/Course.hbm.xml" /> </session-factory> </hibernate-configuration>
Теперь создаем DAO класс CourseDao.java
package com.mytutorial; import java.util.List; public interface CourseDao { public abstract void create(ListlistCourses); public abstract List findAll(); }
Теперь создаем его реализацию CourseDaoImpl.java
package com.mytutorial; import java.util.List; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; public class CourseDaoImpl implements CourseDao { private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory from hibernate.cfg.xml sessionFactory = 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 void create(List<Course> listCourses) { Session session = sessionFactory.openSession(); session.getTransaction().begin(); for (Course course : listCourses) { session.save(course); } session.getTransaction().commit(); } public List findAll() { Session session = sessionFactory.openSession(); List<Course> list = session.createQuery("From Course").list(); return list; } }
Теперь создадим бизнес сервис CourseService.java
package com.mytutorial; import java.util.List; public interface CourseService { public abstract void processCourse(List<Course> courses); }
И его реализацию
package com.mytutorial; import java.util.List; public class CourseServiceImpl implements CourseService { public void processCourse(List<Course> courses) { CourseDao dao = new CourseDaoImpl(); // tightly coupled dao.create(courses); List<Course> list = dao.findAll(); System.out.println("The saved courses are --> " + list); } }
Создаем App.java
package com.mytutorial; import java.util.ArrayList; import java.util.List; public class App { public static void main(String[] args) { List<Course> courses = new ArrayList<Course>(10); Course c1 = new Course(); c1.setName("John"); c1.setCourse("Java"); courses.add(c1); Course c2 = new Course(); c2.setName("Peter"); c2.setCourse("Hibernate"); courses.add(c2); CourseService service = new CourseServiceImpl(); // tightly coupled service.processCourse(courses); } }
А потом в Course.java добавляем:
@Override public String toString() { return new StringBuffer().append("id=" + id).append(",name=" + name) .append(",course=" + course).toString(); }
Вот что мы получим на выходе:
Hibernate: insert into Course (name, course, course_id) values (?, ?, ?) Hibernate: call identity() Hibernate: insert into Course (name, course, course_id) values (?, ?, ?) Hibernate: call identity() Hibernate: select course0_.course_id as course1_0_, course0_.name as name0_, course0_.course as course0_ from Course course0_ The saved courses are --> [id=1,name=John,course=Java, id=2,name=Peter,course=Hibernate]
Copyright © 2024 |