SSH 整合- 3 - add - hibernate

来源:互联网 发布:隐写术算法 编辑:程序博客网 时间:2024/06/11 05:31

1. 流程图

 

SSH <wbr>整合- <wbr>3 <wbr>- <wbr>add <wbr>- <wbr>hibernate

 

2. 主要文件

 

SSH <wbr>整合- <wbr>3 <wbr>- <wbr>add <wbr>- <wbr>hibernate
    

       你可以直接用Myeclipse把hibernate的jar添加进来(右键工程名—》MyEclipse —》Add HibernateCapabilities,之后按照向导选择需要的jar就可以了),也可以自己手动添加。在章节里没有提及的文件都是不用修改的,你可以在前面的文章里看到它们的内容。

 

3. User.java

package com.edu.ssh.model;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

 

@Entity

@Table(name="tb_user") //当实体和数据库的表名不一致时要注明

public class User {

private int id;

private String username;

private String password;

 

 

@Id

@GeneratedValue

public int getId() {

return id;

}

 

 

public void setId(int 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;

}

}

 

 

4. hibernate.cfg.xml

<?xml version='1.0'encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

       "-//Hibernate/Hibernate Configuration DTD3.0//EN"

       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<hibernate-configuration>

 

   <session-factory>

   <!-- 

   当spring也整合进来后这些文件都可放在spring的配置文件里。

   hibernate.cfg.xml整个文件都不需要了,到时就可以删除了。

   hibernate全部的配置都可交给spring管理。

   -->

       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

       <property name="connection.url">jdbc:mysql://localhost:3306/ssh</property>

       <property name="connection.username">root</property>

       <property name="connection.password">mysql123</property>

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

 

       <!-- JDBC connection pool(use the built-in) -->

       <property name="connection.pool_size">1</property>

 

       <!-- Enable Hibernate'sautomatic session context management -->

       <property name="current_session_context_class">thread</property>

 

       <!-- Disable thesecond-level cache -->

       <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

 

       <!-- Echo all executed SQLto stdout -->

       <property name="show_sql">true</property>

       <property name="format_sql">true</property>

 

       <!-- Drop and re-create thedatabase schema on startup

       <property name="hbm2ddl.auto">update</property>

-->

 

       <mappingclass="com.edu.ssh.model.User"/>

 

   </session-factory>

 

</hibernate-configuration>

 

5. HibernateUtil

package com.edu.ssh.util;

 

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

 

 

public class HibernateUtil {

private static SessionFactory sf;

static {

       // 用到了hibernate的注解,所有要用这个类AnnotationConfiguration

sf = new AnnotationConfiguration().configure().buildSessionFactory();

}

 

public static SessionFactory getSessionFactory() {

return sf;

}

}

 

6. UserManager.java

package com.edu.ssh.service;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

 

import com.edu.ssh.model.User;

import com.edu.ssh.util.HibernateUtil;


public class UserManager {

 

public boolean exists(User user) {

SessionFactory sf = HibernateUtil.getSessionFactory();

Session session = sf.getCurrentSession();

session.beginTransaction();

long count = (Long) session.createQuery(

"select count(*) from User u where u.username =:username")

.setString("username",user.getUsername()).uniqueResult();

 

session.beginTransaction().commit();

 

if (count > 0)

return true;

return false;

}

 

public void insertOneUser(User user) {

// save in database

SessionFactory sf = HibernateUtil.getSessionFactory();

Session session = sf.getCurrentSession();

session.beginTransaction();

session.save(user);

session.beginTransaction().commit();

}

}

 

 

7. UserManagerTest.java

package com.edu.ssh.service;

 

import static org.junit.Assert.*;

 

import org.junit.Before;

import org.junit.Test;

 

import com.edu.ssh.model.User;

 

public class UserManagerTest {

 

private UserManager userManager = null;

 

@Before

public void setUp() {

userManager = new UserManager();

}

 

 

@Test

public void testExists() {

User user = new User();

user.setUsername("ee");

assertTrue("userManager.exists(user) 失败了!!",userManager.exists(user));

}

 

 

@Test

public void testInsertOneUser() {

User user = new User();

user.setUsername("username");

user.setPassword("password");

userManager.insertOneUser(user);

}

 

}

 

8. 结果

 

SSH <wbr>整合- <wbr>3 <wbr>- <wbr>add <wbr>- <wbr>hibernate

 

 

SSH <wbr>整合- <wbr>3 <wbr>- <wbr>add <wbr>- <wbr>hibernate

9. 简单分析

在工程的dao层用hibernate实现,hibernate比起直接使用jdbc简化了很多,要写的代码比起jdbc少了很多很多,如果用jdbc实现,我们必须写很多重复的代码。当然使用jdbc性能比hibernate好很多。hibernate把jdbc封装了。我们只需对对象操作就可以了,不像使用jdbc直接对表结构操作。更接近人的思维。也是ssh整合进来的第一个框架。

更多关于Hibernate教程看看这里:
www.iteye.com/blogs/tag/Hibernate

0 0
原创粉丝点击