hibernate入门
来源:互联网 发布:淘宝在哪里评价 编辑:程序博客网 时间:2024/06/08 05:37
坚持每天写博文,积累下开发中的点点滴滴
使用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.当我驱动写错时
阅读全文
0 0
- Hibernate 入门
- Hibernate 入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate 入门
- Hibernate入门
- Hibernate入门
- Hibernate 入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- hibernate 入门
- Hibernate入门
- hibernate入门
- python用pandas工具包来处理.csv文件,包括读写和切片。
- MFC,组合框使用
- 例005java抽签器
- 程序纹理小结
- NGUI-1
- hibernate入门
- get和post的区别
- 谁将会杀死Java?
- thinkphp+ajax 实现点击加载更多数据
- Java注释@interface的用法
- Spring初步理解
- Spark购物篮分析:关联规则挖掘
- 创建本地SVN Repository用于文件版本管理
- 问:Java为什么要分层开发?