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

来源:互联网 发布:安卓游戏 知乎 编辑:程序博客网 时间:2024/04/30 01:02
一般我们配置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(32not null,
    name 
varchar(32not null,
    password 
varchar(41not 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程序编写完毕,如果跟数据库的连接没问题的话就可以正常插入删除查询了。这只是一个一般步骤,具体的细节还需要大家自己深入。写此文章,用以备注。
0 0
原创粉丝点击