首先修改hibernate配置文件
<hibernate-configuration>
<session-factory>
<!-- 连接数据库基本配置 地址 用户名 密码 账户 -->
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">123</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
//加载驱动,jdbc的步骤
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
//jdbc:oracle----表示用jdbc连接Oracle数据库;
//thin------表示用java代码连接数据库;
//@127.0.0.1-----本机服务器默认地址; //或者localhost,都可用
//1521-----Oracle默认端口号; //用什么数据库就写什么端口号
//orcl-----数据库名字;
//user 123 -----自己数据库的账号密码
<!-- 显示SQL语句 -->
<property name="show_sql">true</property>
//true:sql语句控制台可见;false:sql语句控制台不可见
<!-- 格式化输出SQL语句 -->
<property name="format_sql">true</property>
//true:按照标准模式输出sql语句
//false:在一行里输出sql语句
<!-- 数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<!-- hbm2ddl.auto: 生成表结构的策略配置
update(最常用的取值): 如果当前数据库中不存在表结构,那么自动创建表结构.
如果存在表结构,并且表结构与实体一致,那么不做修改
如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列.
create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失)
create-drop(极少): 无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构.
validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构. 如果表结构不一致将会抛出异常.
-->
<property name="hbm2ddl.auto">update</property>
<!-- 对应映射的文件 -->
<mapping resource="com/jk/model/Car.hbm.xml" />
//自己实体类配置文件的路径,通常是在model或者pojo包,等下会有配置文件详解
</session-factory>
</hibernate-configuration>
写一个实体类
public class Car{
private Integer cid;
private String cname;
private Integer cprice;
//进行封装
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Integer getCprice() {
return cprice;
}
public void setCprice(Integer cprice) {
this.cprice = cprice;
}
}
然后修改配置文件,配置文件前面的名字要和实体类一致,例如实体类写的是Car,所以配置文件应是:Car.hbm.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>
<hibernate-mapping>
<!-- 完成类和表对应
name: 实体类全路径
table: 数据库表名称
-->
<class name="com.jk.model.Car" table="t_car">
//前面是实体类是名,后面是想要连接的表名
<!-- 完成类里面属性和表里面字段对应 -->
<!-- 配置实体类属性和表主键对应使用id标签
name: 类里面属性名称
column:表字段名称
-->
<id name="cid" column="id">
//前面是实体类里属性名,后面是数据库表的字段名
<!--由Hibernate从数据库中取出主键的最大值(每个session只取1次),
以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库-->
<generator class="increment"></generator>
</id>
<!-- 其他属性和字段对应
name: 类里面属性名称
column:表字段名称
-->
<property name="cname" column="name"></property>
<property name="cprice" column="price"></property>
//实体类有几个就写几个,后面是分别对应的数据库里表的字段名
</class>
<!-- 配置细节问题
(1)name属性里面写实体类相关的部分
(2)column属性里面写表字段名称
(3)column属性可以省略,属性值和name属性值一样的
(4)length属性设置表字段长度,省略有默认值
(5)type属性设置字段类型
(6)双引号里面不能添加空格
type 的属性值
列如: 数据库是整数,那么type 的属性就是 byte,short,integer,long 中的一个
1)整数
byte,short,integer,long
2)小数
float,double
3)字符串
string
4)日期(年月日)
date,可以将数据库中的日期类型转换为
java.sql.Date
5)时间(时分秒)
time,可以将数据库中的日期类型转换为java.sql.Time
6)时间戳(年月日时分秒)
timestamp,可以将数据库中的日期类型转换为
java.sql.Timestamp
普通属性映射
普通属性就是除主键外,java基本数据类型的属性,
比如Integer(int),String,Date等,注意Integer默认为null,int默认为0.
xml中使用<property />标签配置普通属性.type指定列类型,
日期属性配置,与普通属性配置相同,只是type中指定的是日期类型即可,取值可以有date,time,timestamp(简写方式)-->
</hibernate-mapping>
结束之后就可以写dao层的主要内容了
public static void main(String[] args) {
Configuration con=new Configuration();
con.configure(); //加载配置文件
//获取sessionfactory工厂
SessionFactory sf = con.buildSessionFactory();
//获取session
Session session = sf.openSession();
//开启事务,获取事务对象
Transaction ts = session.beginTransaction();
//执行操作
//这是新增
Car car=new Car();
car.setCname("奔驰");
car.setCprice(500000);
session.save(car);
//删除
car.setCid(1); //删除id为1的
session.delete(car);
//修改
car.setCid(2);
car.setCname("宝马");
car.setCprice(50);
session.saveOrUpdate(car);
//saveOrUpdate方法,有id时是修改,没有id时是新增
//提交事务
ts.commit();
//关闭
session.close();
sf.close();
}