一般我们配置hibernate框架的时候IDE首选为MyEclipse,只是为了更为清晰地认识hibernate工作原理,而且MyEclipse的集成度太高,有点牛刀小试的架势,作为hibernate的初学者,我来说一说在最原始最纯洁的eclipse下面配置hibernate框架的步骤 ,操作系统:ubuntu,这个与OS平台无关,可以通用。
首先下载hibernate的工作包:
hibernate-3.2.5.ga.tar.gz
1.解压后将其中的lib目录中的jar包全部复制,放到一个eclipse使用合适的目录中去,此目录最好固定,以后使用hibernate工程都需要引入lib目录中的这些包,比如eclipse/mylib目录中,然后将压缩包中的hibernate3.jar仍然解压到该目录。
2.打开eclipse,创建工程Mytest,在该工程的JavaBuilderPath中引入刚才我们解压缩的所有包,当然还有一个不开源的包需要手动下载,这是hibernate开源框架无权引入的一个包,名字叫commons-lang-2.3.jar,可以在apache网站下载: http://jakarta.apache.org/commons/lang/
3.配置就到这里,可以编写第一个hibernate程序了,以MYSQL数据库为例,在新建工程项目Mytest的根目录下面创建一个名为:hibernate.cfg.xml的文件,配置信息如下:
将其中的中文改为你需要的字段就可以了,然后配置数据库。
4.配置数据库,进入你的数据库shell,创建一个表User,具体的创建脚本参见:
完成好了以后,我们需要编写该表的POJO类(Plain Ordinary Java Object),具体代码如下:
其中Md5Encrypt是我自己编写的一段加密函数,此处不表,大家可以像其他字段一样setPassword就可以了,可以发现,这个POJO类其实就是一个JavaBean,包含了所有属性的setter和getter函数,并且满足对应数据库中的表中的值。OK,有了POJO,我们还需要编写一个与此对应的xml告诉hibernate这个POJO跟数据库是怎样一个关系。
5.编写POJO的xml文件,如下:
此文件保证于POJO类保存在同一目录,当然这个xml需要命名为:User.hbm.xml。
插一句话,我们的POJO跟User.hbm.xml文件都可以使用专用的工具自动生成,有兴趣的朋友可以参考一下hibernate教程,CSDN的下载频道有。
6.编写User的操作类:
7.OK,万事具备,只欠东风了,编写主函数:
至此,我们的第一个hibernate程序编写完毕,如果跟数据库的连接没问题的话就可以正常插入删除查询了。这只是一个一般步骤,具体的细节还需要大家自己深入。写此文章,用以备注。
首先下载hibernate的工作包:
hibernate-3.2.5.ga.tar.gz
1.解压后将其中的lib目录中的jar包全部复制,放到一个eclipse使用合适的目录中去,此目录最好固定,以后使用hibernate工程都需要引入lib目录中的这些包,比如eclipse/mylib目录中,然后将压缩包中的hibernate3.jar仍然解压到该目录。
2.打开eclipse,创建工程Mytest,在该工程的JavaBuilderPath中引入刚才我们解压缩的所有包,当然还有一个不开源的包需要手动下载,这是hibernate开源框架无权引入的一个包,名字叫commons-lang-2.3.jar,可以在apache网站下载: http://jakarta.apache.org/commons/lang/
3.配置就到这里,可以编写第一个hibernate程序了,以MYSQL数据库为例,在新建工程项目Mytest的根目录下面创建一个名为:hibernate.cfg.xml的文件,配置信息如下:
<?xml version="1.0" encoding="utf-8"?>
<!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.url">
jdbc:mysql://数据库所在主机IP地址/数据库名称
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">
你的数据库登录名
</property>
<property name="hibernate.connection.password">
你的数据库登录密码
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">
false
</property>
<property name="hibernate.connection.pool_size">
2
</property>
<mapping resource="cn/hxex/message/model1/User.hbm.xml"/>
<mapping resource="cn/hxex/message/model1/Message.hbm.xml"/>
</session-factory>
</hibernate-configuration>
<!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.url">
jdbc:mysql://数据库所在主机IP地址/数据库名称
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">
你的数据库登录名
</property>
<property name="hibernate.connection.password">
你的数据库登录密码
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">
false
</property>
<property name="hibernate.connection.pool_size">
2
</property>
<mapping resource="cn/hxex/message/model1/User.hbm.xml"/>
<mapping resource="cn/hxex/message/model1/Message.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.配置数据库,进入你的数据库shell,创建一个表User,具体的创建脚本参见:
create database message;
grant all privileges on message to message@'%' identified by 'message';
use message;
--创建用户表
create table user(
id varchar(32) not null,
name varchar(32) not null,
password varchar(41) not null,
primary key(id)
)engine=innodb;
grant all privileges on message to message@'%' identified by 'message';
use message;
--创建用户表
create table user(
id varchar(32) not null,
name varchar(32) not null,
password varchar(41) not null,
primary key(id)
)engine=innodb;
public class User {
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password=Md5Encrypt.encrypt(password);
}
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password=Md5Encrypt.encrypt(password);
}
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
5.编写POJO的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>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="cn.hxex.message.model1.User"
table="user"
dynamic-update="true"
>
<id
name="id"
type="java.lang.String"
column="id"
>
<generator class="uuid.hex" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
not-null="true"
length="32"
/>
<property
name="password"
type="java.lang.String"
column="password"
not-null="true"
length="41"
/>
<!-- Associations -->
</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="cn.hxex.message.model1.User"
table="user"
dynamic-update="true"
>
<id
name="id"
type="java.lang.String"
column="id"
>
<generator class="uuid.hex" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
not-null="true"
length="32"
/>
<property
name="password"
type="java.lang.String"
column="password"
not-null="true"
length="41"
/>
<!-- Associations -->
</class>
</hibernate-mapping>
插一句话,我们的POJO跟User.hbm.xml文件都可以使用专用的工具自动生成,有兴趣的朋友可以参考一下hibernate教程,CSDN的下载频道有。
6.编写User的操作类:
public class UserOperate {
/**This Class is the tool class for Class User
* @param null
*/
private Session session = null;
public UserOperate() {
File file = new File("hibernate.cfg.xml");
if (file.exists()) {
Configuration config = new Configuration().configure(file);
SessionFactory factory = config.buildSessionFactory();
this.session = factory.openSession();
} else {
System.out.println("error");
System.exit(0);
}
}//构造函数,应该不会错吧
public void insert(User user) {
session.getTransaction().begin();
this.session.save(user);
session.getTransaction().commit();
//session.close(); }//插入User数据函数
@SuppressWarnings("unchecked")
public User queryByName(String name){
User user=null;
String hql="FROM User as p where p.name=?";
Query q=this.session.createQuery(hql);
q.setString(0,name);
List<User> userList=q.list();
Iterator<User> iter=userList.iterator();
if(iter.hasNext()){
user=iter.next();
}
return user;
}//按名字查找数据
public void delete(String name){
String hql="delete User where name=?";
Query q=this.session.createQuery(hql);
q.setString(0, name);
session.getTransaction().begin();
q.executeUpdate();
session.getTransaction().commit();
session.close();
}//删除数据
@SuppressWarnings("unchecked")
public List<User> queryAll(){
List<User> list=null;
String hql="from User";
Query q=this.session.createQuery(hql);
list=q.list();
return list;
}//查找所有
@SuppressWarnings("unchecked")
public List<User> queryNameLike(String content){
List<User> list=null;
String hql="from User where name like ?";
Query q=this.session.createQuery(hql);
q.setString(0, "%"+content+"%");
list=q.list();
return list;
}//模糊查询
public boolean canLogin(String name,String password){
boolean flag=false;
User userGet=this.queryByName(name);
if(userGet!=null){
password=Md5Encrypt.encrypt(Md5Encrypt.encrypt(password));
if(userGet.getPassword().equals(password))
flag=true;
else
System.out.println("密码错误");
}
else{
System.out.println("没有该用户存在");
}
return flag;
}//自己写的判断能否登录的函数,其中两次对password加密,可以判断提取出来的密码跟输入的password的一致性
}
/**This Class is the tool class for Class User
* @param null
*/
private Session session = null;
public UserOperate() {
File file = new File("hibernate.cfg.xml");
if (file.exists()) {
Configuration config = new Configuration().configure(file);
SessionFactory factory = config.buildSessionFactory();
this.session = factory.openSession();
} else {
System.out.println("error");
System.exit(0);
}
}//构造函数,应该不会错吧
public void insert(User user) {
session.getTransaction().begin();
this.session.save(user);
session.getTransaction().commit();
//session.close(); }//插入User数据函数
@SuppressWarnings("unchecked")
public User queryByName(String name){
User user=null;
String hql="FROM User as p where p.name=?";
Query q=this.session.createQuery(hql);
q.setString(0,name);
List<User> userList=q.list();
Iterator<User> iter=userList.iterator();
if(iter.hasNext()){
user=iter.next();
}
return user;
}//按名字查找数据
public void delete(String name){
String hql="delete User where name=?";
Query q=this.session.createQuery(hql);
q.setString(0, name);
session.getTransaction().begin();
q.executeUpdate();
session.getTransaction().commit();
session.close();
}//删除数据
@SuppressWarnings("unchecked")
public List<User> queryAll(){
List<User> list=null;
String hql="from User";
Query q=this.session.createQuery(hql);
list=q.list();
return list;
}//查找所有
@SuppressWarnings("unchecked")
public List<User> queryNameLike(String content){
List<User> list=null;
String hql="from User where name like ?";
Query q=this.session.createQuery(hql);
q.setString(0, "%"+content+"%");
list=q.list();
return list;
}//模糊查询
public boolean canLogin(String name,String password){
boolean flag=false;
User userGet=this.queryByName(name);
if(userGet!=null){
password=Md5Encrypt.encrypt(Md5Encrypt.encrypt(password));
if(userGet.getPassword().equals(password))
flag=true;
else
System.out.println("密码错误");
}
else{
System.out.println("没有该用户存在");
}
return flag;
}//自己写的判断能否登录的函数,其中两次对password加密,可以判断提取出来的密码跟输入的password的一致性
}
public class Object {
public static void main(String[] args) {
User user=new User();
UserOperate userop=new UserOperate();
user.setName("Newflypig");
user.setPassword("8215085");
userop.insert(user);
User[] userArray=new User[10];
for(int i=0;i<10;i++){
userArray[i]=new User();
userArray[i].setName("dingding"+String.valueOf(i));
userArray[i].setPassword("newflypig");
userop.insert(userArray[i]);
}
List<User> list=userop.queryAll();
Iterator<User> iter=list.iterator();
while(iter.hasNext()){
System.out.println(iter.next().getName());
}
System.out.println(userop.canLogin("dingding0", "newflypig"));
}
}
public static void main(String[] args) {
User user=new User();
UserOperate userop=new UserOperate();
user.setName("Newflypig");
user.setPassword("8215085");
userop.insert(user);
User[] userArray=new User[10];
for(int i=0;i<10;i++){
userArray[i]=new User();
userArray[i].setName("dingding"+String.valueOf(i));
userArray[i].setPassword("newflypig");
userop.insert(userArray[i]);
}
List<User> list=userop.queryAll();
Iterator<User> iter=list.iterator();
while(iter.hasNext()){
System.out.println(iter.next().getName());
}
System.out.println(userop.canLogin("dingding0", "newflypig"));
}
}