hibernate环境搭建
我的环境是:eclipse、mysql数据库。
一:先创建一个普通的java项目。
步骤:File→new→Project。如果直接看不到Project就选择Other→General→Project
在projectname处输入项目名字。其他选项根据需要填写。
二:导入hibernate需要的包。
所需要的包:<!--StartFragment-->
<!--StartFragment-->
hibernate3.jar
ejb3-persistence.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
slf4j-api-1.6.1.jar
步骤:点击项目名称右键→Propertise(最后一个属性)→JavaBuildPath→Libraries→AddExternalJARs...
找到你的包就可以了。
三:导入数据库驱动。
根据你使用的什么数据库导入什么样的驱动。我这里所用的是mysql
步骤同导入hibernate包一样。
四:hibernate的配置文件。
hibernate.cfg.xml
Hibernate.cfg.xml代码 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- sessionFactory --> <session-factory> <!--配置数据库驱动类 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!--数据库连接的url ,最后要跟数据库的名称--> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/school</property> <!--数据库账号 --> <property name="hibernate.connection.username">root</property> <!--数据库密码 --> <property name="hibernate.connection.password">root</property> <!--数据库方言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--<property name="hibernate.hbm2ddl.auto">create</property>--> <property name="hibernate.show_sql">true</property> <!-- 映射实体类配置文件 --> <mapping resource="com/coney/school/model/Teacher.hbm.xml"/> </session-factory> </hibernate-configuration>
在这里的时候遇到一个问题:
在我搭建好环境后。测试时,往数据库里面添加数据。每次添加一条都会覆盖原来的数据。。
并且,本来设置好的自动增长列也会自动给取消。刚开始还以为是我每次都添加的一条记录标识列没有自动添加上去。
现在找到根本原因了。。
原因就是在这个配置文件里面
<!--<propertyname="hibernate.hbm2ddl.auto">create</property>-->
这句。现在注释掉就可以正常添加了。不会覆盖原来的数据。
这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构
详细介绍请看这:
五:创建实体类并封装好。
实体类代码
publicclassTeacher{
privateLongtid;
privateStringtname;
privateStringtpwd;
privateStringtclass;
privateStringtschool;
//此处省略掉get...set...方法
}
在建这个实体类的时候也出过一个问题,就是命名不对。
刚开始的时候我的属性名是叫‘tId,tName.....’然后自动生成get。set方法出来。
getTId,setTId。。在启动服务器的时候报错说找不到Teacher类的tId这个属性。
看着命名有点怪怪的就怀疑会不会是命名的问题。然后就把tId该成了tid再生成get。set方法。
然后就没报错了。。问题是解决了。。可就是不知道原因是什么。。汗。。。
六:创建实体类的配置文件。(在这里使用的是配置文件来映射实体类。同样也可以用注解来影射)
Teacher.hbm.xml
建好后在hibernate.cfg.xml文件里面配置。上面代码有写。但要注意文件的路径。
实体类映射文件代码
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.coney.school.model"> <!-- 实体类包 --> <class name="Teacher" table="teacher"> <!-- name对应实体类名称, table 对应数据库表名 --> <!-- ID name 对应实体类字段,column 数据库表字段--> <id name="tid" type="java.lang.Long" ><!--type :java类型--> <column name="tid" ><!--column 数据库表字段 not-null:不为空 ,length:长度,default:默认值--> <comment>表ID</comment><!-- 注释 --> </column> <generator class="increment"/> <!--序列生成器, 字段增长 --> </id> <!--其他字段基本上一样,name 实体类字段,column 数据库表字段,length 长度,not-null 不为空 --> <property name="tname" column="tName" length="20" not-null="true"></property> <property name="tpwd" column="tPwd" length="20" not-null="true"></property> <property name="tclass" column="tClass" length="20" not-null="true"></property> <property name="tschool" column="tSchool" length="20" not-null="true"></property> </class> </hibernate-mapping>
七:测试
建一个测试类。测试连接数据库。并往表里面添加数据。
测试类代码
package com.coney.school.test; import org.hibernate.*; import org.hibernate.cfg.Configuration; import com.coney.school.model.Teacher; public class TestConn { public static void main(String[] args){ Configuration config = new Configuration().configure("hibernate.cfg.xml"); //调用hibernate配置文件,读取配置文件信息。 SessionFactory sf = config.buildSessionFactory(); //读完之后,再用这个对象来生成一个SessionFactory Session session = sf.openSession(); Transaction tx = session.beginTransaction(); tx.begin(); //有了SessionFactory就可以开Session了,可以用事务提交了. Teacher m = new Teacher(); m.setTname("小小"); m.setTpwd("xx"); m.setTclass("小班"); m.setTschool("翠花幼儿园"); session.save(m); tx.commit(); //提交 } }
然后去数据里看是否添加成功哦。
大概就这样了。。当做笔记。。下次不清楚的时候可以来回忆回忆。。嘿嘿。。
额。把需要的包。。放在附件里面吧。
在驱动包里面顺便把sqlserver的驱动包也放进去了。