这次实验大部分都是依照http://edu.51cto.com/lesson/id-19282.html里的视频讲解来做的,感觉这位老师讲得很详细,声音也挺好听的哈,我很喜欢呢
实验环境:
Hibernate库导入
工程自动添加
手动添加
MySQL 库导入
News.java类的编写
package hibernate;
import java.sql.Date;
public class News {
private int id;
private String title;
private String author;
private Date date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public News(String author, String title, Date date) {
super();
this.author = author;
this.date = date;
this.title = title;
}
public News(){
}
public String toString(){
return "News [id = " + id + ", title = " + title + "author = " + author + "date = "+ date + "]";
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Hibernate.cfg.xml配置数据库
<hibernate-configuration>
<session-factory>
<!-- 配置连接数据库的基本信息 -->
<property name="connection.url">jdbc:mysql://localhost:3306/mysql</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 配置Hibernate的基本信息 -->
<!-- 数据库使用的方言-->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- 执行操作时是否在控制台Console打印SQL语句-->
<property name="show_sql">true</property>
<!-- 是否对SQL进行格式化 -->
<property name="format_sql">true</property>
<!-- 自动生成数据表的策略,update可以自动创建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 类与表的映射文件的注册,类为News类,表在包hibernate中的News.hdb.xml进行详细设置 -->
<mapping resource = "hibernate/News.hdb.xml"/>
</session-factory>
</hibernate-configuration>
关于上面的信息与它们的值可以在如下目录中的hibernate.properties里边选择相关的数据库进行查看。
对象关系映射文件hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.yjj">
<class name = "hibernate.News" table = "NEWS">
<!-- 指定主键,name表示News类中的属性名,column则是数据库中的名字 -->
<!-- type可以使用Java中的java.lang.Integer,也可以直接使用hibernate中的int或Integer,hibernate可以实现自动转换 -->
<id name = "id" column = "ID" type = "java.lang.Integer">
<!-- 指定主键的生成方式,native表示使用数据库本地方法创建-->
<!-- assign则表示由用户设定-->
<generator class = "native"></generator>
</id>
<property name = "title" type = "java.lang.String">
<column name = "TITLE"></column>
</property>
<property name = "author" type = "java.lang.String">
<column name = "AUTHOR"></column>
</property>
<property name = "date" type = "java.sql.Date">
<column name = "DATE"></column>
</property>
</class>
</hibernate-mapping>
import java.sql.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class Test {
/**
* @param args
*/
private SessionFactory sessionFactory;
private Configuration configuration;
private ServiceRegistry serviceRegistry;
private Transaction transaction;
private Session session;
public Test(){
//1.创建一个SessionFactory
sessionFactory = null;
//1).创建一个Configuration,对应hibernate配置文件和对象关系映射信息
configuration = new Configuration().configure();
//2).创建一个ServiceRegistry对象,hibernate4.x新加的
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
//3).
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2.创建一个session对象
session = sessionFactory.openSession();
//3.创建事物对象
transaction = session.beginTransaction();
}
public void destroy(){
transaction.commit();
session.close();
sessionFactory.close();
}
public void test(){
News news = new News();
news.setAuthor("yjj");
news.setDate(new Date(new java.util.Date().getTime()));
news.setTitle("Title");
session.save(news);
}
public void get(){
News news = (News)session.get(News.class, 0);
System.out.println("result" + news.toString());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
t.test();
t.get();
t.destroy();
}
}
执行结果:
接着切换到数据库工作空间看看
可以看到我的MySQL数据库中已经多了一个news表啦!
右键这个表名,点击generate->Select Statement,会出现SQL语句界面,然后执行它,就可以在下面看到结果啦,看,不仅表出现了,还已经有一个数据添加在里边了吧!
JDK版本差异错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
解决办法可见下面链接:
造成这种过错是ni的支撑Tomcat运行的JDK版本与支撑application运行的JDK版本不一致导致的. 把它们的JDK版本改成一致步骤如下: 1.Window --> Preferences -->Java --> compiler中的compiler compliance level对应的下拉菜单中选择JDK版本. 2.Window --> Preferences -->MyEclipse --> Servers -->Tomcat --> Tomcat n.x -->JDK中的Tomcat JDK name下的下拉菜单中选择自身电脑上安装的JDK版本(必需与步骤1中的JDK版本一致).
如果要在MyEclipse中添加jdk,则是 Window --> Preferences -->Java -->Installed JREs->add
JDK安装在哪里
可是我已经忘记JDK在哪里了,我的JDK安装在哪里呢?如下,在控制面板里边有哦
tomcat的JDK设置
提示添加JRE不行,需要添加JDK原来我没装JDK呀!
没有加DTD导致的XML问题
ERROR: HHH000196: Error parsing XML (2) : cvc-elt.1: Cannot find the declaration of element 'hibernate-mapping'
解决办法可见http://blog.csdn.net/ouvidia/article/details/7426872
加上这一句<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
就好了