`

H2简单使用(配合hibernate)

 
阅读更多

在看一些教程,偶尔看到H2,被其精简的安装(只有一个jar包就好了..根本不用安装啊...)和完善的功能吸引了.

 

也做了一个很简单的东西,因为嫌写配置文件麻烦,所以就木有引spring进来了(这个我也是为了写教程里一个示例程序搭一下的 教程里直接JDBC然后写SQL 我这里加入一个hibernate 内容很简单 说错了欢迎指正呢)

 

环境:

 

h2-1.3.169

hibernate 3.6.10

 

项目结构如下:



 

 

先说下hibernate的配置文件:

<!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="connection.driver_class">org.h2.Driver</property>
	    <!-- 存放位置 我这边放在了h盘下h2目录的product 会在相应位置生成一个.h2文件-->
        <property name="connection.url">jdbc:h2:h:/h2/product</property>
        <!-- 用户名 下面是密码 -->
        <property name="connection.username">sa</property>
        <property name="connection.password">sa</property>
        <!-- 使用的数据库方言 -->
         <property name="dialect">org.hibernate.dialect.H2Dialect</property>
		<property name="show_sql">true</property>
		<property name="hbm2ddl">update</property>
		<property name="current_session_context_class">thread</property>
		<!-- 引入的实体 -->
		<mapping class="org.cc.ws.entity.Product"/>
	</session-factory>
</hibernate-configuration>

 

接下去是实体类的文件:

package org.cc.ws.entity;

import java.util.Date;

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


@Entity
public class Product {

	@Id
	@GeneratedValue
	@Column(name="id")
	private int id;
	
	@Column(unique=true,nullable=false)
	private String name;
	
	private double price;
	
	private Date createTime;
	
	private int count;
	
	private String manufacturer;
	
	private String phoneNumber;

	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 double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public String getManufacturer() {
		return manufacturer;
	}

	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}

	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

	@Override
	public String toString() {
		return "Product [id=" + id + ", name=" + name + ", price=" + price
				+ ", createTime=" + createTime + ", count=" + count
				+ ", manufacturer=" + manufacturer + ", phoneNumber="
				+ phoneNumber + "]";
	}
	
	
}

 

然后利用SchemaExport来生成一下数据库:

package org.cc.ws.utils;

// 省略下引包

public class ExportDB {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//默认读取hibernate.cfg.xml文件.....
		Configuration cfg=new Configuration().configure();
		
		SchemaExport export=new SchemaExport(cfg);
		
		export.create(true, true);
	}

}

 正常的话 会出现下面的语句(show_sql选项打开的话):

写道
drop table Product if exists
create table Product (id integer generated by default as identity, count integer not null, createTime timestamp, manufacturer varchar(255), name varchar(255) not null unique, phoneNumber varchar(255), price double not null, primary key (id))

 

 

好了 接下去的操作就很简单了

像平常使用hibernate一样

发一下Dao的实现类:

package org.cc.ws.dao.impl;

// 省略引包

public class ProductDaoImpl implements ProductDao {

	@Override
	public boolean insert(Product product) {
		Session session=FactoryHolder.getSessionFactory().getCurrentSession(); 
		Transaction tas=session.beginTransaction();
		try{
		 product.setCreateTime(new Date());
		 session.save(product);
		 tas.commit();
		}catch(Exception e){
			e.printStackTrace();
			tas.rollback();
			return false;
		}
		return true;
	}

	@Override
	public Product getByName(String name) {
		Session session=FactoryHolder.getSessionFactory().getCurrentSession(); 
		Transaction tas=session.beginTransaction();
		Product product=null;
		try{
		  Query query=session.createQuery("from Product t where t.name=:name");
		  query.setString("name", name);
		  product=(Product) query.uniqueResult();
		  tas.commit();
		}
		catch(Exception e){
			tas.rollback();
			e.printStackTrace();
		}
			
		return product;
	}

	@Override
	public List<Product> getByManufacture(String manufacturer) {
		Session session=FactoryHolder.getSessionFactory().getCurrentSession(); 
		Transaction tas=session.beginTransaction();
		List<Product> products=null;
		try{
		  Query query=session.createQuery("from Product t where t.manufacturer=:manufacturer");
		  query.setString("manufacturer", manufacturer);
		  products=(List<Product>) query.list();
		  tas.commit();
		}
		catch(Exception e){
			tas.rollback();
			e.printStackTrace();
		}
			
		return products;
	}

}

 

 最后是一个测试文件:

package org.cc.ws.dao.impl;

import org.cc.ws.dao.ProductDao;
import org.cc.ws.entity.Product;

import junit.framework.TestCase;

public class ProductDaoTest extends TestCase{
	private ProductDao dao;
	public void setUp(){
		dao=new ProductDaoImpl();
		
	}
	public void testInsert(){
		Product product=new Product();
		product.setName("测试物品1");
		product.setManufacturer("cc");
		product.setPrice(10.0);
		dao.insert(product);
	}
	
	public void testName(){
		System.out.println(dao.getByName("测试物品1").getId());
	}
}

 执行第一个:

写道
Hibernate: insert into Product (id, count, createTime, manufacturer, name, phoneNumber, price) values (null, ?, ?, ?, ?, ?, ?)

 然后执行第二个:

写道
Hibernate: select product0_.id as id0_, product0_.count as count0_, product0_.createTime as createTime0_, product0_.manufacturer as manufact4_0_, product0_.name as name0_, product0_.phoneNumber as phoneNum6_0_, product0_.price as price0_ from Product product0_ where product0_.name=?
1

 可见使用正常.

 

  • 大小: 27.7 KB
0
1
分享到:
评论

相关推荐

    H2 Database With Docs

    H2数据库是一个开源、轻量级、嵌入式的Java数据库,它被广泛应用于测试环境以及对数据存储有快速、简单需求的小型应用中。这款数据库支持多种数据类型,包括标准...配合完整的文档,学习和使用H2数据库将变得更加轻松。

    SpringBoot-H2-database:使用Springboot配置H2数据库

    SpringBoot-H2-database是一个项目,它展示了如何在Spring Boot应用程序中配置并使用H2内存数据库。Spring Boot是Java开发者的热门选择,因为它简化了设置和配置,使得快速开发成为可能。而H2是一个轻量级、高性能的...

    api-springboot2-h2数据库:使用SpringBoot 2和H2数据库开发的Api

    总结一下,本项目利用SpringBoot 2的自动化配置特性,配合H2数据库的快速响应能力,构建了一个简洁高效的API。通过定义实体类、JPA仓库接口以及控制器,我们实现了数据存储和检索功能。同时,H2数据库的Web控制台...

    spring-boot-h2:内存数据库中的Spring Boot和H2

    在测试类中,可以使用`@DataJpaTest`或`@SpringBootTest`注解配合`@AutoConfigureTestDatabase(replace = Replace.ANY)`来指定使用H2数据库进行测试。同时,通过配置`logging.level.org.hibernate.SQL`为`DEBUG`,...

    cursomc:Curso de Modelagem Conceitualal = Sping Boot com Java11,JPAHibernate,Maven,REST,Postman,Banco de Dados:H2

    《cursomc:Spring Boot与Java11、JPA/Hibernate、Maven、REST、Postman及H2数据库的模型概念化课程》 在这个全面的教程中,我们将深入探讨如何利用一系列先进的Java技术和框架来构建高效、现代化的Web应用程序。...

    CRUD-SPRING-H2-EMBEDDED:带有spring boot和H2-sql的crud rest控制器,带有application.properties的自动配置

    在本项目"CRUD-SPRING-H2-EMBEDDED"中,我们看到了一个使用Spring Boot框架构建的CRUD(创建、读取、更新、删除)RESTful API,该API与H2内存数据库配合工作,提供了自动配置功能,具体通过`application.properties`...

    rest_springboot_h2

    5. **JPA与Hibernate**: 作为Java的ORM(对象关系映射)解决方案,Spring Boot通常会配合JPA(Java Persistence API)和其默认实现Hibernate使用,来处理与数据库的交互。通过定义实体类和Repository接口,可以方便...

    使用gradle的SpringBoot项目搭建的社区网站.zip

    此外,社区网站通常需要前后端分离的设计,我们可以使用Thymeleaf或Mustache等模板引擎来渲染视图,或者完全采用RESTful API,配合前端框架如React或Vue.js进行开发。 总的来说,使用Gradle和SpringBoot构建社区...

    activiti5资料

    8. **持久化(Persistence)**:Activiti 使用H2数据库作为默认的数据存储,所有流程实例、任务、变量等信息都会持久化到数据库中,确保流程的可恢复性。 9. **监控与调试**:Activiti 提供了Actuator工具,用于...

    springboot初学小实例

    例如,如果项目中有`hibernate-jpa-2.1-api`,SpringBoot将自动配置JPA。 4. **SpringApplication**:这是SpringBoot应用的入口,通过`SpringApplication.run()`方法启动应用。 5. **YAML/Properties配置**:...

    Spring Boot教程程序样例

    它支持多种数据库,如MySQL、PostgreSQL、H2等,并提供了ORM(对象关系映射)框架如Hibernate的自动配置。 5. **事务管理**:Spring Boot 提供了声明式事务管理,可以配合Spring Data JPA或MyBatis等库,使得事务...

Global site tag (gtag.js) - Google Analytics