利用maven进行Hibernate单表操作

通过maven我们无需手动下载一些Hibernate相关的包,直接在pom.xml中添加相应的依赖就行。

添加Hibernate依赖

<dependency>  

    <groupId>org.hibernate</groupId>  

    <artifactId>hibernate-core</artifactId>  

    <version>4.2.4.Final</version>  

</dependency>

可以设置不同的hibernate的版本号,不同的版本号在session对象的创建上可能会有不同,请谨慎考虑。

添加数据库依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

在这里我使用的是mysql数据库。

到此hibernate的依赖就可以了,相比手动添加十几个jar包还是方便点的。在添加依赖后,系统可能会加载一段时间来进行文件的下载。

创建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="connection.username">root</property>
    	<property name="connection.password"></property>
    	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property name="connection.url">jdbc:mysql://127.0.0.1:3306/bookstore?serverTimezone=UTC</property>
    	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
    	
    	<property name="show_sql">true</property>
    	<property name="format_sql">true</property>
    	<property name="hbm2ddl.auto">create</property>   
    </session-factory>
</hibernate-configuration>

这是对数据库连接和操作的一些基本配置。

参数说明:

  •       dialect:发言,是告诉系统需要转换为哪种类型的sql语句。
  •       show_sql:表示在控制台中是否会显示使用的sql语句。
  •       format_sql:表示是否对生成的sql语句就行格式化。
  •       hbm2ddl.auto:有四个可选择的值:

                   1.create:表示如果在数据库中已经存在相应的表会先删除原表,再创建一个新表,若不存在,则直接创建一个新表。

                   2.update:会对数据库中的表进行更新操作。

                   3.create-drop:该值也会创建一个表,不过在结束的时候会把创建的表给删除。

                   4.validate:会通过shema与hibernate的配置进行比较,如果不一致会抛出异常,可以用来插入数据,不能创建表。

  •        hibernate.default_schema:设置表的默认前缀。        

在写hibernate参数的属性名是可以省略前面的hibernate,直接写“.”后面的名称即可。

下面通过Book类例子来讲述单表操纵。。

创建Book类:

public class Book {

	private int bid;
	private String bname;
	private float price;
	private String author;
	private int bnum;
	public Book() {
		
	}
	public Book(int bid, String bname, float price, String author, int bnum) {
		super();
		this.bid = bid;
		this.bname = bname;
		this.price = price;
		this.author = author;
		this.bnum = bnum;
	}
	public int getBid() {
		return bid;
	}
	public void setBid(int bid) {
		this.bid = bid;
	}
	public String getBname() {
		return bname;
	}
	public void setBname(String bname) {
		this.bname = bname;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public int getBnum() {
		return bnum;
	}
	public void setBnum(int bnum) {
		this.bnum = bnum;
	}
	@Override
	public String toString() {
		return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + ", author=" + author + ", bnum=" + bnum
				+ "]";
	}
	
}

创建类需要满足要有一个无参的构造函数和变量对应的get,set方法。

创建Book.hbm.xml:

我们可以直接新建一个Hibernate XML Mapping file,系统会自动为我们配置好一些相应的设置。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-11-4 17:12:42 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.testHibernate.hibernateTest.Book" table="BOOK">
        <id name="bid" type="int">
            <column name="BID" />
            <generator class="assigned" />
        </id>
        <property name="bname" type="java.lang.String">
            <column name="BNAME" />
        </property>
        <property name="price" type="float">
            <column name="PRICE" />
        </property>
        <property name="author" type="java.lang.String">
            <column name="AUTHOR" />
        </property>
        <property name="bnum" type="int">
            <column name="BNUM" />
        </property>
    </class>
</hibernate-mapping>

然后,我们要把配置好的Book.hbm.xml文件映射到hibernate.cfg.xml文件中。

<mapping resource="Book.hbm.xml"/>

在基本配置都完成后,我们就可以对数据库进行测试操作了。

这里,我使用的是Junit的环境。

需要在测试类中首先添加三个变量:
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

	@Before
	public void init() {
		//创建配置对象
		Configuration config=new Configuration().configure();
		//创建服务注册对象
		ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
		//创建会话工厂对象
		sessionFactory=config.buildSessionFactory(serviceRegistry);
		//会话对象
		session=sessionFactory.openSession();
		//开启事务(不然无法将数据保存到数据库中)
		transaction=session.beginTransaction();
	}

该方法是对变量的初始化操作,包括创建Session对象和打开事务。

Session简介

session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。

获得Session的方法有两个:1)openSession()    2)getCurrentSession()

openSession与getCurrentSession的区别

1.getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要你手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。

2.openSession每次创建新的session对象,getCurrentSession使用现有的session对象。

	@After
	public void destory() throws SecurityException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException {
		transaction.commit(); //提交事务
		session.clear();//关闭会话
		sessionFactory.close(); //关闭会话工厂
	}

在操作完事务后,要及时关闭资源。

	@Test
	public void testSaveBooks() {
		//生成学生对象
		Book b=new Book(100,"sd",100,"d",100);
		session.save(b);   //保存对象进入数据库
	}

在测试方法中,直接声明一个Book对象,然后调用session的save方法就可以把数据保存到数据库中。

拓展:

我们也可以通过session对象来设置成和jdbc一样来进行操作。

//    设置session和jdbc一样自动连接
        session.doWork(new Work() {

            @Override
            public void execute(Connection arg0) throws SQLException {
                arg0.setAutoCommit(true);
                
            }
            
        });

最后一定要进行flush()操作。

session.flush();

一般并不推荐修改成jdbc的使用。

猜你喜欢

转载自blog.csdn.net/ljcgit/article/details/83787362