您的位置:首页 > 编程语言 > Java开发

eclipse 下配置hibernate以及第一个hibernate小程序

2014-07-23 11:19 295 查看
http://blog.csdn.net/newflypig/article/details/2072059

一般我们配置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的文件,配置信息如下:


<?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>

将其中的中文改为你需要的字段就可以了,然后配置数据库。

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;

完成好了以后,我们需要编写该表的POJO类(Plain Ordinary Java Object),具体代码如下:


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);


}




}

其中Md5Encrypt是我自己编写的一段加密函数,此处不表,大家可以像其他字段一样setPassword就可以了,可以发现,这个POJO类其实就是一个JavaBean,包含了所有属性的setter和getter函数,并且满足对应数据库中的表中的值。OK,有了POJO,我们还需要编写一个与此对应的xml告诉hibernate这个POJO跟数据库是怎样一个关系。

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>



此文件保证于POJO类保存在同一目录,当然这个xml需要命名为:User.hbm.xml。

插一句话,我们的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的一致性


}

7.OK,万事具备,只欠东风了,编写主函数:


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"));




}


}

至此,我们的第一个hibernate程序编写完毕,如果跟数据库的连接没问题的话就可以正常插入删除查询了。这只是一个一般步骤,具体的细节还需要大家自己深入。写此文章,用以备注。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: