右键项目名——Properties——Java Build Path——Libraries——Add Library——User Library——User Libraryies——New,接下来就添加jar,然后起个名字,之后将导入到你的项目就可以了。
效果图:
1.2.2、新建配置文件
这里需要注意一点就是:在Hibernate中,默认配置文件的命名为hibernate.cfg.xml,所以我们配置文件命名一般就是这个,如果说你想要重新命名的话,那么在读取配置文件的时候就要指定相对路径。
在src下新建hibernate.cfg.xml
内容有连接数据库,指定读取实体类的配置信息,还有在控制台输出SQL语句等数据;配置文件中的dtd文件,在hibernate-core-4.2.4.Final.jar中的org.hibernate中的最后就能看到hibernate-configuration-3.0.dtd,打开该文件,然后将下面的dtd文件限制加到xml配置文件中即可。
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
新建实体类:Student.java
新建配置文件:Student.hbn.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- name:表示的是该类的相对路径
table:表示的是数据库的表名-->
<class name="com.hibernate.hellos.Student" table="Student">
<!--
type:表示该属性是int类型
column:映射的是数据库中的列名
native:根据底层数据库的能力选择identity, sequence 或者hilo中的一个,就是根据数据库生成
-->
<id name="sid" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME" />
</property>
<property name="sage" type="int">
<column name="SAGE" />
</property>
</class></hibernate-mapping>
注意:
其中generator的class有:
increment(递增)
用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。
identity (标识)
对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。
sequence (序列)
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的
uuid用一个128位的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
native(本地)
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
新建配置文件:hiberate.cfg.xml,该文件放在src下
<?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="show_sql">true</property> <!-- 显示sql语句 -->
<property name="format_sql">true</property> <!-- 格式化sql语句 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">
<![CDATA[jdbc:mysql://localhost:3306/myhibernate?useUnicode=true&characterEncoding=utf8]]>
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 创建表 使用create,查询或者更新的时候使用update-->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- hibernate的第一个测试例子 -->
<mapping resource="com/hibernate/hellos/Student.hbm.xml" />
</session-factory></hibernate-configuration>
注意:使用hibernate.hbm2ddl.auto的时候,当为create的时候,表示如果你数据库中没创建表也没关系,hibernate会自动帮你创建,当使用update的时候,表示在表的基础上使用
接下来新建一个测试类:Test.java
package com.hibernate.hellos;
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 {
private static SessionFactory sessionfactory;
private static Session session;
public static void main(String[] args){
//读取默认配置文件名 hibernate.cfg.xml
//如果要指定文件名,只需要在new Configuration().configure("指定文件的路径");
Configuration config = new Configuration().configure();
//注册服务
ServiceRegistry service = new ServiceRegistryBuilder().applySettings(config.getProperties())
.buildServiceRegistry();
//实例化一个session工厂
SessionFactory sessionfactory = config.buildSessionFactory(service);
//打开hibernate的session,执行操作
session = sessionfactory.openSession();
//添加 add();
//查询 sel();
//修改 update();
//删除 delete();
}
//添加
public static void add(){
Transaction transaction = session.beginTransaction();
Student s = new Student();
s.setSname("张三");
s.setSage(20);
session.save(s);
transaction.commit();
//注意:如果session关闭的话,需要指定打开 }
//查询
public static void sel(){
Student s = (Student) session.get(Student.class, 1);
System.out.println(s.getSname());
}
//修改数据
public static void update(){
Student s = new Student();
s.setSname("李四");
s.setSage(30);
Transaction transaction = session.beginTransaction();
//获取数据库中的表
Student s1 = (Student) session.get(Student.class,1);
transaction.commit();
s1.setSname("李思思");
transaction = session.beginTransaction();
session.update(s1);
transaction.commit();
}
public static void delete(){
Transaction transaction = session.beginTransaction();
Student s = (Student) session.get(Student.class, 1);
session.delete(s);
transaction.commit();
}
}
如果你直接复制我代码的话,你就会看到数据库中除了一张表数据什么都没有,把delete()方法注释掉。恩,别犯傻。
当我们使用格式化的时候,就可以看到
添加和修改的效果图:
数据库中的表的数据:
总结:
1、新建实体类的时候,记得要写映射文件,当然可以使用注解的方式,后期笔者会慢慢记录
2、table表名不可以是mysql中的关键字
3、hibernate.hbm2ddl.auto的使用需要注意