您的位置:首页 > 其它

hibernate入门

2017-11-15 22:00 267 查看
坚持每天写博文,积累下开发中的点点滴滴

使用hibernate的前提:

1. 导包

2. 配置文件

hibernate有一个默认的配置文件:hibernate-cfg.xml,它表示是一个hibernate的配置文件 name不可以乱写 key可以从hibernate.properties中查询

在hibernate.cfg.xml中可以省略hibernate.这个前缀

hibernate.properties内容

hibernate-cfg.xml(测试)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--  表示是一个hibernate的配置文件    name不可以乱写 key可以从hibernate.properties中查询
在hibernate.cfg.xml中可以省略hibernate.这个前缀
-->
<hibernate-configuration>
<!-- 会话工厂org.hibernate.SessionFactory,用来创建会话:org.hibernate.Session
把SessionFactory理解为数据源(DataSource)
Session理解成:java.sql.Connection
-->
<session-factory name="hibernateLearn">
<!--配置若干配置信息
配置顺序:property*, mapping*, (class-cache | collection-cache)*, event*, listener*
-->
<!-- 是否显示sql语句  name值中间注意不能有空格-->
<property name="show_sql">true</property>
<!-- 驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- url -->
<property name="connection.url">jdbc:mysql://localhost:3306/shtext</property>
<!-- 账号 -->
<property name="connection.username">root</property>
<!-- 密码 -->
<property name="connection.password">314159</property>
<!-- 方言 (必须配) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 加载映射文件 映射文件是java对象和关系模型的转换规则
1.路径前不要/;2.这里加载的路径是文件路径而不是类的路径
-->
<mapping resource="text/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>


3 . 映射文件

比如我有一个User对象,需要存到数据库的User表中,那么先创建一个xml文件:我这里以User.hbm.xml为例子,然后要在hibernate-cfg.xml中配置
<mapping resource="text/User.hbm.xml"/>


注意:区分大小写

紧接着创建User.hbm.xml文件:

<!--User映射文件 -->
<hibernate-mapping>
<!-- class 表示由hibernate管理的domain类
name全类名  table表示对应数据库的表名
id表示对应数据库的主键
除了class标签的name属性表示全类名,其他标签的name属性全是表示java的属性
column表示数据库里面的字段名
type表示数据库表里字段类型  type中的long表示hibernate的类型,还有一种写法
java.lang.Long 表示java类型 两种写法结果一样,其实hibernate可以通过反射获取类型,可以不写
-->
<class name="text.User" table="user">
<id name="user_id" type="long" column="user_id">
<!-- id生成方式   native表示使用数据库本地方式-->
<generator class="native"></generator>
</id>
<!-- property 配置非主键的简单属性 并非domain对象属性
column属性不配的时候默认使用java中的属性名
-->
<property name="user_name" column="user_name"></property>
<property name="user_passWord" column="user_passWord"></property>
</class>
</hibernate-mapping>


现在已经将domain对象和数据库表一一对应了起来,现在进行操作。我写了一个测试类CRUDText.java:

package text;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
*
* @ClassName: CRUDText
* @Description: TODO(
hibernate增删改查的测试
)
* @author Ash
* @date 2017年11月17日 下午7:51:33
*
*/
public class CRUDText {

public static void main(String[] args) {
CRUDText text = new CRUDText();
text.doSave();
}
private void doSave(){
//实例化对象
User user = new User();

user.setUser_name("user_name");
user.setUser_passWord("user_passWord");
//实例化配置对象
Configuration concfg = new Configuration();
//解析配置文件
concfg.configure();//加载默认的hibernate-cfg.xml
/**
* 此方法用于改变默认配置文件
*//*
concfg.configure("改变配置文件名称");*/

//获取sessionFactory对象    过时的方法buildSessionFactory()也可以用
//新的方法从bibernate4.1开始需要传进去一个参数
SessionFactory sessionFactory = concfg.buildSessionFactory();
//获取session对象 两个方法:getCurrentSession()和openSession() 测试都有open
Session session = sessionFactory.openSession();
//保存
session.save(user);
//关闭资源
session.close();
sessionFactory.close();
}
}


此时运行以后不报错,打印出来sql语句了但是数据库并没有新增数据

原因是JDBC中事务默认是提交的,hibernate中事务默认不提交,所以我们必须在save()方法之前开启事务,在之后提交事务

//开启事务
Transaction transaction = session.beginTransaction();
//保存
session.save(user);
//提交事务
transaction.commit();


此过程中可能出现的异常:

当我使用save()方法时,参数可以放入任何对象且编译没问题但会报错



2. 当我没有在配置文件中加载映射文件也会出现同样的问题



3.当我在配置文件中
<property name="connection.url">
多一个空格



4.当我驱动写错时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate