1. 工程结构
|
工程文件的命名不是很规范,在这暂时不是最重要的,望见谅。呵呵。。。
2. 流程图
|
在这一步中我们没有添加其他复杂的配置,其他的内容,只是把service和dao层分解了以下,把它们分为实现和接口。在使用的时候我们只要调用它们的接口,而具体的功能放在了实现里。为什么要面向接口编程,http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599700.html
3. UserManager.java
package com.edu.ssh.service;
import com.edu.ssh.model.User;
public interface UserManager {
public abstract boolean exists(User user);
public abstract void insertOneUser(User user);
} |
4. UserManagerImpl.java
package com.edu.ssh.service.impl;
import com.edu.ssh.dao.UserDAO; import com.edu.ssh.dao.impl.UserDAOImpl; import com.edu.ssh.model.User; import com.edu.ssh.service.UserManager;
public class UserManagerImpl implements UserManager {
private UserDAO userDAO = new UserDAOImpl();
public UserDAO getUserDAO() { return userDAO; }
public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; }
public boolean exists(User user) { return userDAO.checkUserExistsWithName(user.getUsername()); }
public void insertOneUser(User user) { userDAO.save(user); } }
|
5. UserDAO.java
package com.edu.ssh.dao;
import com.edu.ssh.model.User;
public interface UserDAO { public void save(User user); public boolean checkUserExistsWithName(String username); }
|
6. UserDAOImpl.java
package com.edu.ssh.dao.impl;
import org.hibernate.Session; import org.hibernate.SessionFactory;
import com.edu.ssh.dao.UserDAO; import com.edu.ssh.model.User; import com.edu.ssh.util.HibernateUtil; public class UserDAOImpl implements UserDAO {
@Override public void save(User user) { // save in database SessionFactory sf = HibernateUtil.getSessionFactory(); Session session = sf.getCurrentSession(); session.beginTransaction(); session.save(user); session.beginTransaction().commit(); }
@Override public boolean checkUserExistsWithName(String username) { 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", username).uniqueResult();
session.beginTransaction().commit();
if (count > 0) return true; return false; }
}
|
7. UserManagerTest
package com.edu.ssh.service;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail;
import org.junit.Before; import org.junit.Test;
import com.edu.ssh.model.User; import com.edu.ssh.service.impl.UserManagerImpl;
public class UserManagerTest {
private UserManager userManager = null;
@Before public void setUp() { userManager = new UserManagerImpl(); }
@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("username1"); user.setPassword("password1"); if (userManager.exists(user)) { fail("要添加的用户已经存在!!"); } else { userManager.insertOneUser(user); assertTrue(userManager.exists(user)); } }
}
|
8. 结果
|
|
添加相同的用户是要报错!!
|
9. 分析
为什么要面向接口编程:http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599700.html
版权声明:本文为博主原创文章,未经博主允许不得转载。