Hibernate入门

首先修改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();
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘水水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值