使用Maven配置Hibernate5

软件怎么可能不操作数据库呢,所以学习如何对数据库操作是必须的,于是乎我开始看看怎么使用Hibernate。由于我是个懒人,还是继续在上篇文章的代码下添加数据库操作。

添加Hibernate5引用

pom.xml添加Hibernate5依赖

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.1.Final</version>
<exclusions>
<exclusion>
<artifactId>el-api</artifactId>
<groupId>javax.el</groupId>
</exclusion>
</exclusions>
</dependency>

但是添加依赖的节点似乎和之前的不太一样,多了exclusion节点。呵呵,这是因为我在调试的时候发现el-api.jar跟web服务器自带的jar包重复了,那只能排除Maven自动加载的包。网上一查,果然有这个排除的语法,而且so easy哈,只要选择这个jar右键->Maven->Exclude Maven Artifact.

添加Hibernate tools

在Eclipse Marketplace下载即可,本人表示没工具不会写代码啊。有了工具配置起来相当容易哈。

添加数据库驱动Jar包

数据库是sqlserver2008,去微软的网站下载相应的数据库驱动回来即可,我用的是sqljdbc42.jar。

创建数据库表person


CREATE TABLE [dbo].[person](
[my_age] [int] NULL,
[my_name] [varchar](50) NULL
) ON [PRIMARY]

大家忽略数据库基本规则,我只想存数据而已,什么主键外键先一边玩去。

添加Hibernate配置文件

这里就要用到hibernate工具了,添加工具后创建文件的时候就可以选择创建cfg.xml文件。如下图:
这里写图片描述
next
这里写图片描述
next
这里写图片描述
点击”get values from connection”
这里写图片描述
这里有些人的下拉框是空滴,点击”New”添加新的数据库驱动就行,不详细截图了。选中一个数据库连接配置之后的,如下图:
这里写图片描述
至此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 name="sqlserver">
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.password">123123</property>
<property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=test</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
</session-factory>
</hibernate-configuration>

在开发环境中使用这个配置打开数据库瞧瞧,Window->Show View->Other->Hibernate->Hibernate Configurations,好家伙,有东西哈。
这里写图片描述
说明数据库链接的配置基本上对的了。

生成Person类映射

Person类在之前的代码就有了,创建Person.hbm.xml用于数据库跟类字段的对应关系。过程也是New->other->Hibernate->hbm.xml文件,一路next就创建完成。创建完成的xml文件跟数据库字段有出入,改改呗。改完之后就长成:

<hibernate-mapping>
<class name="com.hurricane.entity.Person" table="PERSON">
<id name="Age" type="int">
<column name="my_age" />
<generator class="assigned" />
</id>
<property name="Name" type="java.lang.String">
<column name="my_name" />
</property>
</class>
</hibernate-mapping>

文件的位置紧跟着Person类,个人习惯放到resources文件夹下,好像也没啥影响。
映射文件有了,可是hibernate不知道文件在哪,于是需要在cfg.xml文件中告诉它:

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

当然是hibernate tools帮我设置的,小白不会手写,伤不起。

保存Person对象

唠唠叨叨终于到了保存数据到数据库的步骤了。我要求很低,就是能保存到数据库就行了,其他复杂的有时间再慢慢学习吧。

public class LoginAction extends ActionSupport {
public String Name;
public int Age;
public Person PersonShana;
static SessionFactory sessionFactory;
public String getResult() {
return Result;
}
public Person getPersonShana() {
return PersonShana;
}
public void setPersonShana(Person personShana) {
PersonShana = personShana;
}
public void setResult(String result) {
Result = result;
}
public String Result;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
@Override
public String execute() throws Exception {
Session ss = getSession();
ss.beginTransaction();
ss.save(PersonShana);
ss.getTransaction().commit();
ss.close();
return "success";
}
static Session getSession() {
if (sessionFactory == null) {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
}
return sessionFactory.openSession();
}
}

又把代码贴上了,真不是为了凑数啊。跟之前的代码相比就是多了个创建SessionFactory 和使用SessionFactory 保存数据。由于我很懒,直接将Spring初始化的PersonShana对象保存到数据库中。

运行查看效果

打开http://localhost:8080/webtest/login
忽略界面内容,查看数据库,有没有数据,真的好激动啊。

这里写图片描述

真的有数据。可不是我提前插入的。

碰到问题及注意事项

1.jar包冲突问题loader constraint violation: when resolving interface method

上面有提到,在pom.xml文件中排除就行

2.could not load requested class : com.microsoft.sqlserver.jdbc. SQLServerDriver

检查下你的Deploym Assembly是否有发布数据库驱动的jar包,看我的:
这里写图片描述

3.创建SessionFactory 用之前版本的代码可能会报错:Unknown entity: com.hurricane.entity.Person,org/hibernate/metamodel/internal/MetamodelImpl.java

我到hibernate网站上找了新的创建方式就不会报错了,看我贴出来的代码中有。

下载

demo


版权声明:本文为shuiguolan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。