package cn.edu.hpu.user.model; public class User { private int id; private String username; private String password; private String nickname; 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; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } }
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.1.10.Final</version> </dependency>
package cn.edu.hpu.user.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="t_user") public class User { private int id; private String username; private String password; private String nickname; public User() { super(); } public User(String username, String password, String nickname) { super(); this.username = username; this.password = password; this.nickname = nickname; } public User(int id, String username, String password, String nickname){ super(); this.id = id; this.username = username; this.password = password; this.nickname = nickname; } @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; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } }
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.24</version> </dependency>
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
<?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.username">root</property> <property name="hibernate.connection.password">1234</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/maven_user</property> <!-- 控制事务自动提交 --> <property name="hibernate.connection.autocommit">true</property> <!-- 配置方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 数据库定义语言(none,update,create) --> <!-- 选update的原因是如果没有表,给我创建,有表直接追加数据,字段发生变化就更新表的结构 --> <!-- create只能创建表,每次都是新表。none如果没有表不能创建,会抛出异常 --> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.show_sql">true</property> <property name="format_sql">true</property> <!-- 加入实体类的映射文件 --> <mapping class="cn.edu.hpu.user.model.User"/> </session-factory> </hibernate-configuration>
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n log4j.rootLogger=warn, stdout, R log4j.logger.cn.edu.hpu=debug log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=F:/tax/UserSys.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%t] %5p %c - %m%n
package cn.edu.hpu.user.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; public class HibernateUtil { private final static SessionFactory FACTORY = buildSessionFactory(); private static SessionFactory buildSessionFactory() { Configuration cfg=new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory factory=cfg.buildSessionFactory(serviceRegistry); return factory; } public static SessionFactory getFactory() { return FACTORY; } public static Session openSession(){ return FACTORY.openSession(); } public static void close(Session session){ if(session!=null) session.close(); } }
package cn.edu.hpu.user.dao; import cn.edu.hpu.user.model.User; public interface IUserDao { public void add(User user); public User loadUsername(String username); }
package cn.edu.hpu.user.dao; import org.hibernate.Session; import cn.edu.hpu.user.model.User; import cn.edu.hpu.user.util.HibernateUtil; public class UserDao implements IUserDao { public void add(User user) { Session session = null; try { session=HibernateUtil.openSession(); session.beginTransaction(); session.save(user); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); }finally{ HibernateUtil.close(session); } } public User loadUsername(String username) { Session session = null; User user=null; try { session=HibernateUtil.openSession(); user=(User) session.createQuery("from User where username=?") .setParameter(0, username).uniqueResult(); } catch (Exception e) { e.printStackTrace(); }finally{ HibernateUtil.close(session); } return user; } }
<dependency> <groupId>dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.2</version> </dependency>
package cn.edu.hpu.user.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DbUtil { // 定义MySQL的数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; //定义mysql的数据库连接地址: public static final String DBDURL = "jdbc:mysql://localhost:3306/maven_user" ; //mysql数据库的连接用户名 public static final String DBUSER = "root" ; //mysql数据库的连接密码 public static final String DBPASS = "1234" ; static{ try { Class.forName(DBDRIVER); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection(){ Connection conn=null; try { conn=DriverManager.getConnection(DBDURL,DBUSER,DBPASS); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static void close(ResultSet rs,Statement st,Connection conn){ try { if(rs!=null){ rs.close(); } if(st!=null){ st.close(); } if(conn!=null){ conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void close(Statement st,Connection conn){ close(null,st,conn); } }
package cn.edu.hpu.user.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.sql.SQLException; import org.dbunit.DatabaseUnitException; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.database.QueryDataSet; import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.operation.DatabaseOperation; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; public class AbstractDbUnitTestCase { public static IDatabaseConnection dbunitCon; private File tempFile; @BeforeClass public static void init() throws Exception{ dbunitCon = new DatabaseConnection(DbUtil.getConnection()); } protected IDataSet createDataSet(String tname)throws DataSetException,IOException{ InputStream is=AbstractDbUnitTestCase .class .getClassLoader().getResourceAsStream("dbunit_xml/"+tname+"xml"); Assert.assertNotNull("dbunit的基本数据文件不存在!", is); return new FlatXmlDataSet(is); } protected void backupAllTable() throws SQLException,IOException,DataSetException{ IDataSet ds=dbunitCon.createDataSet(); writeBackupFile(ds); } private void writeBackupFile(IDataSet ds) throws IOException, DataSetException { tempFile=File.createTempFile("back","xml"); FlatXmlDataSet.write(ds, new FileWriter(tempFile)); } protected void backupCustomTable(String [] tname)throws DataSetException, SQLException, IOException{ QueryDataSet ds=new QueryDataSet(dbunitCon); for(String str:tname){ ds.addTable(str); } writeBackupFile(ds); } protected void backupOneTable(String tname)throws DataSetException, SQLException, IOException{ backupCustomTable(new String[]{tname}); } protected void resumeTable() throws IOException, DatabaseUnitException, SQLException{ IDataSet ds=new FlatXmlDataSet(tempFile); DatabaseOperation.CLEAN_INSERT.execute(dbunitCon,ds); } @AfterClass public static void destory(){ try { if(dbunitCon!=null) dbunitCon.close(); } catch (SQLException e) { e.printStackTrace(); } } }
package cn.edu.hpu.user.util; import org.junit.Assert; import cn.edu.hpu.user.model.User; public class EntitiesHelper { private static User baseUser=new User(1,"admin","123","管理员"); public static void assertUser(User expected,User actual){ Assert.assertNotNull(expected); Assert.assertEquals(expected.getId(), actual.getId()); Assert.assertEquals(expected.getUsername(), actual.getUsername()); Assert.assertEquals(expected.getPassword(), actual.getPassword()); Assert.assertEquals(expected.getNickname(), actual.getNickname()); } public static void assertUser(User expected){ assertUser(expected,baseUser); } }
<?xml version="1.0" encoding="UTF-8"?> <dataset> <t_user id="1" username="admin" password="123" nickname="管理员"/> </dataset>
package cn.edu.hpu.user.dao; import java.io.IOException; import java.sql.SQLException; import org.dbunit.DatabaseUnitException; import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.IDataSet; import org.dbunit.operation.DatabaseOperation; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import cn.edu.hpu.user.model.User; import cn.edu.hpu.user.util.AbstractDbUnitTestCase; import cn.edu.hpu.user.util.EntitiesHelper; public class TestUserDao extends AbstractDbUnitTestCase{ private IUserDao userDao; @Before public void setUp() throws DataSetException, SQLException, IOException{ userDao =new UserDao(); backupOneTable("t_user"); } @Test public void testLoad() throws IOException, DatabaseUnitException, SQLException{ IDataSet ds=createDataSet("t_user"); DatabaseOperation.TRUNCATE_TABLE.execute(dbunitCon, ds); User tu=userDao.loadUsername("admin"); EntitiesHelper.assertUser(tu); } @Test public void testAdd() throws IOException, DatabaseUnitException, SQLException{ IDataSet ds=createDataSet("t_user"); DatabaseOperation.TRUNCATE_TABLE.execute(dbunitCon, ds); User user=new User("admin","123","管理员"); userDao.add(user); Assert.assertTrue(user.getId()>0); User tu=userDao.loadUsername("admin"); EntitiesHelper.assertUser(tu,user); } @After public void tearDown() throws IOException, DatabaseUnitException, SQLException{ resumeTable(); } }
我们算是完成了项目中一部分模块了,下一次我们将写下一个模块,日志模块。
转载请注明出处:http://blog.csdn.net/acmman/article/details/50620095