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(测试)
3 . 映射文件
比如我有一个User对象,需要存到数据库的User表中,那么先创建一个xml文件:我这里以User.hbm.xml为例子,然后要在hibernate-cfg.xml中配置
注意:区分大小写
紧接着创建User.hbm.xml文件:
现在已经将domain对象和数据库表一一对应了起来,现在进行操作。我写了一个测试类CRUDText.java:
此时运行以后不报错,打印出来sql语句了但是数据库并没有新增数据
原因是JDBC中事务默认是提交的,hibernate中事务默认不提交,所以我们必须在save()方法之前开启事务,在之后提交事务
此过程中可能出现的异常:
当我使用save()方法时,参数可以放入任何对象且编译没问题但会报错
2. 当我没有在配置文件中加载映射文件也会出现同样的问题
3.当我在配置文件中
4.当我驱动写错时
使用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 入门学习 Demo
- Hibernate入门教程(纯Eclipse版)
- Hibernate---helloworld入门程序
- hibernate搭建入门(新手必看)
- Hibernate入门教程
- Hibernate入门BLOG [四、Hibernate的CRUD简单总结]
- java 从零开始,学习笔记之基础入门<Hibernate_实战演练>(三十七)
- 主题:Hibernate入门 - Transaction
- Hibernate入门BLOG[七、Hibernate对象关系一对一映射]
- Hibernate入门BLOG[十二、Hibernate的一对多的inverse放弃维护关系,提升效率]
- Hibernate入门17 - 实作equals和hashCode
- hibernate 入门
- JavaEE-Hibernate入门笔记
- Hibernate 的原理与配置快速入门
- Hibernate入门 刘正仁
- Hibernate入门
- 史上最简单的Hibernate入门简介
- Hibernate入门 - 基础配置
- shiro SpringMvc Hibernate 入门
- 【皇甫】☀Hibernate入门