关于的Hibernate的开始

学习java得学习一个java数据库存持久层,这样对于操作数据库会有非常一效率的提升。选一个大家熟知的Hibernate吧。精通hibernate3.0那个书,指导我开始了一个Hibernate的程序的实验。

1. 环境:

jdk1.6,  myeclipse, mysql, hibernate3.0及相关的包。

2. 建表:

CREATE TABLE `login` (
                          `id` int(11) NOT NULL auto_increment,
                                `name` varchar(100) default '',
                                `password` varchar(100) default '',
                                PRIMARY KEY  (`id`)
) TYPE=MyISAM;

 3. 文件结构

4. 导入包

5.开始的数据库
 

6. UserInfo类

package com.lr;
public class UserInfo {
	private Integer id ;
	private String userName ;
	private String password ;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 7.UserInfo.hbm.xml文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!--类和表之间的关联-->
	<class name="com.lr.UserInfo" table="login">
		<!--类对象的主键和表的主键的关联-->
		<id name="id" type="integer">
			<column name="id" />
			<!--指明主键的自增长类型-->
			<generator class="identity" />
		</id>
		<!--以下为普通字段的关联-->
		<property name="userName" type="string">
			<column name="name" length="100" />
		</property>
		<property name="password" type="string">
			<column name="password" length="100" />
		</property>
	</class>
</hibernate-mapping>

 8.hibernate.cfg.xml文件

<?xml version='1.0' encoding='gb2312'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<!--配置数据库驱动-->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<!--配置数据库网络连接的url-->
	<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property>
	<!--配置数据库网络连接的用户名,默认一般为root-->
	<property name="hibernate.connection.username">root</property>
	<!--配置数据库网络连接的密码-->
	<property name="hibernate.connection.password"></property>
	<!--配置数据库网络连接池的大小-->
	<property name="hibernate.connection.pool.size">20</property>
	<!--后台是否显示sql,开发时为true,运行时为false-->
	<property name="hibernate.show_sql">true</property>
	<!-- 设置JDBC的隔离级别-->
	<property name="hibernate.connection.isolation">2</property>
	<property name="hibernate.format_sql">true</property>
	<property name="jdbc.fetch_size">50</property>
	<property name="jdbc.batch_size">25</property>
	<property name="jdbc.use_scrollable_resultset">false</property>
	<property name="connection.useUnicode">true</property>
	<!--编码方式-->
	<property name="connection.characterEncoding">gbk</property>
	<!--数据库方言,每个数据库都有方言,hibernate已经为大多数数据库指明了方言-->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
	<mapping resource="com/lr/UserInfo.hbm.xml" />
	<!-- mapping resource="com.lr.UserInfo.java" -->
</session-factory>
</hibernate-configuration>

 9.HibernateTest.java

package com.lr;
import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateTest {
	public static void main(String[] args) {
		Configuration conf = new Configuration().configure() ;
		SessionFactory sessions = conf.buildSessionFactory();
		Session session = sessions.openSession();
		Transaction tx = null;
		try {
			// 开始事务
			tx = session.beginTransaction();
			// //给对象设定值
			UserInfo u = new UserInfo();
			u.setUserName("李四");
			u.setPassword("123456");
			System.out.println("start...");
		    //保存数据到数据库
			session.save(u);
			// 从持久化类UserInfo中读取数据

			UserInfo user = (UserInfo) session.get(UserInfo.class, new Integer(1)) ;
			System.out.println("UserName:"+user.getUserName());
			//load前提是存在指定的数据,用get数据库中可没有指定的记录
			
			//删除记录
			String hqld = "delete UserInfo where id=9" ;
			Query queryd = session.createQuery(hqld) ;
			queryd.executeUpdate() ;
			
			//使用hql语句
			String hqls = "from UserInfo userInfo where userInfo.userName like ?";
			Query querys = session.createQuery(hqls);
			querys.setParameter(0, "l%");
			List list = querys.list();
			
			// 结束事务
			tx.commit();
			
			Iterator<?> it = list.iterator();
			while (it.hasNext()) {
				UserInfo userInfo = (UserInfo) it.next();
				System.out.println(userInfo.getUserName());
			}
			System.out.println("it is successful!");
		} catch (HibernateException e) {
			System.out.println(e.getMessage());
			//e.printStackTrace();
			if (tx != null) {
				tx.rollback();
			}
		} finally {
			session.close();
		}

	}
}

10.结果显示

 11.操作后的数库

12.可能会遇到的问题

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

log4j:WARN Please initialize the log4j system properly.

start...

Exception in thread "main" java.lang.NoClassDefFoundError: antlr/ANTLRException

    at org.hibernate.hql.ast.ASTQueryTranslatorFactory.createQueryTranslator(ASTQueryTranslatorFactory.java:27)

    at org.hibernate.impl.SessionFactoryImpl.createQueryTranslators(SessionFactoryImpl.java:357)

    at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:423)

    at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)

    at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:865)

    at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:89)

    at com.lr.HibernateTest.main(HibernateTest.java:41)

Caused by: java.lang.ClassNotFoundException: antlr.ANTLRException

    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)

    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

    ... 7 more
解决:对于包的引入问题,报错什么就引入什么。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值