第一步:数据库设计

  • MailServer物理模型图

  • 表键的清单

名称

代码

用户昵称

nick_name

邮箱地址

mail_address

用户密码

user_password

我的邮箱

mail_address

好友邮箱

friend_address

好友备注

remark_name

邮件编号

mail_id

接收邮箱

mail_receive

发送时间

send_time

邮件主题

mail_subject

邮件正文

mail_content

发送状态

state_send

读取状态

state_read

正文编码

content_encoding

协议版本

protocol_version

定时发送

timing

邮件编号

mail_id

附件编号

adjunct_id

附件格式

adjunct_type

附件大小

adjunct_size

附件路径

adjunct_url

帐号

account

密码

password

  • 数据库脚本(先创建数据库再运行脚本)
/*
Navicat MySQL Data TransferSource Server         : localhost_3306
Source Server Version : 50720
Source Host           : localhost:3306
Source Database       : mail_serverTarget Server Type    : MYSQL
Target Server Version : 50720
File Encoding         : 65001Date: 2018-03-31 13:39:54
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for address_book
-- ----------------------------
DROP TABLE IF EXISTS `address_book`;
CREATE TABLE `address_book` (`mail_address` varchar(25) NOT NULL COMMENT '我的邮件地址',`friend_address` varchar(25) NOT NULL COMMENT '好友邮件地址',`remark_name` varchar(25) DEFAULT NULL COMMENT '好友备注',PRIMARY KEY (`mail_address`,`friend_address`),CONSTRAINT `FK_Reference_1` FOREIGN KEY (`mail_address`) REFERENCES `user_entity` (`mail_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='通讯录';-- ----------------------------
-- Records of address_book
-- ------------------------------ ----------------------------
-- Table structure for adjunct
-- ----------------------------
DROP TABLE IF EXISTS `adjunct`;
CREATE TABLE `adjunct` (`mail_id` varchar(25) NOT NULL COMMENT '邮件ID',`adjunct_id` varchar(25) NOT NULL COMMENT '附件ID',`adjunct_type` varchar(5) DEFAULT NULL COMMENT '附件格式',`adjunct_size` double NOT NULL COMMENT '附件大小',`adjunct_url` varchar(100) NOT NULL COMMENT '附件地址',PRIMARY KEY (`adjunct_id`),KEY `FK_Reference_3` (`mail_id`),CONSTRAINT `FK_Reference_3` FOREIGN KEY (`mail_id`) REFERENCES `mail_entity` (`mail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='附件表';-- ----------------------------
-- Records of adjunct
-- ------------------------------ ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (`account` varchar(25) NOT NULL COMMENT '管理员帐号',`password` varchar(25) NOT NULL COMMENT '管理员密码',PRIMARY KEY (`account`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理员';-- ----------------------------
-- Records of admin
-- ------------------------------ ----------------------------
-- Table structure for mail_entity
-- ----------------------------
DROP TABLE IF EXISTS `mail_entity`;
CREATE TABLE `mail_entity` (`mail_id` varchar(25) NOT NULL COMMENT '邮件编号',`mail_address` varchar(25) NOT NULL COMMENT '发送方邮箱',`mail_receive` varchar(25) NOT NULL COMMENT '接收方邮箱',`send_time` datetime NOT NULL COMMENT '发送时间',`mail_subject` varchar(50) NOT NULL COMMENT '邮件主题',`mail_content` varchar(2048) NOT NULL COMMENT '邮件正文',`state_send` varchar(4) NOT NULL COMMENT '发送方邮件状态',`state_read` varchar(2) DEFAULT NULL COMMENT '接收方邮件状态',`content_encoding` varchar(10) DEFAULT NULL COMMENT '邮件正文编码',`protocol_version` varchar(10) DEFAULT NULL COMMENT '邮件协议版本',`timing` datetime DEFAULT NULL COMMENT '定时发送时间',PRIMARY KEY (`mail_id`),KEY `FK_Reference_2` (`mail_address`),CONSTRAINT `FK_Reference_2` FOREIGN KEY (`mail_address`) REFERENCES `user_entity` (`mail_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='邮件';-- ----------------------------
-- Records of mail_entity
-- ------------------------------ ----------------------------
-- Table structure for user_entity
-- ----------------------------
DROP TABLE IF EXISTS `user_entity`;
CREATE TABLE `user_entity` (`nick_name` varchar(25) NOT NULL COMMENT '用户昵称',`mail_address` varchar(25) NOT NULL COMMENT '邮箱地址',`user_password` varchar(15) NOT NULL COMMENT '用户密码',PRIMARY KEY (`mail_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户';-- ----------------------------
-- Records of user_entity
-- ----------------------------
INSERT INTO `user_entity` VALUES ('佚阳', '155146872@belief', '1557644');
INSERT INTO `user_entity` VALUES ('佚阳', '155146882@belief', '1557644');
INSERT INTO `user_entity` VALUES ('佚阳', '296293760@belief', '123456');
INSERT INTO `user_entity` VALUES ('信仰', '795138462@belief', '123456');

第二步:在Eclipse新建Java工程并搭建Hibernate开发环境


-下载Hibernate依赖包以及最新版MySQL的JDBC驱动

http://hibernate.org/orm/

https://dev.mysql.com/downloads/file/?id=476198

-解压hibernate-release-5.2.16.Final以及mysql-connector-java-5.1.46

-在项目下新建文件夹(lib)

-复制hibernate-release-5.2.16.Final\lib\required下的所有包以及

hibernate-release-5.2.16.Final\lib\jpa-metamodel-generator下的包以及

mysql-connector-java-5.1.46\mysql-connector-java-5.1.46-bin.jar

粘贴至lib目录,选中导入的所有包,右键BulidPath


-至此,Hibernate开发环境就搭建好啦

第三步:配置Hibernate数据库连接和表映射并编写业务实现类

-在src目录下右键新建File,命名为hibernate.cfg.xml,这是Hibernate的数据库连接配置文件,在文件里写入如下代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- ~ Hibernate, Relational Persistence for Idiomatic Java ~ ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later. ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. -->
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mail_server</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">****</property><!-- 请自行配置数据库连接--><!-- connection.pool_size:配置JDBC连接池 --><property name="connection.pool_size">20</property><!-- dialect:配置数据库方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- show_sql:操作数据库时,会向控制台打印sql语句 --><property name="show_sql">true</property><!-- format_sql:打印sql语句前,会将sql先格式化 --><!-- <property name="format_sql">true</property> --><!-- hbm2ddl.auto:是否自动生成表结构 --><!-- <property name="hbm2ddl.auto">update</property> --><!-- 列出所有映射文件 --><mapping resource="com/belief/model/User.hbm.xml" /><mapping resource="com/belief/model/Mail.hbm.xml" /><mapping resource="com/belief/model/Admin.hbm.xml" /><mapping resource="com/belief/model/Adjunct.hbm.xml" /><mapping resource="com/belief/model/Address.hbm.xml" /></session-factory>
</hibernate-configuration>

-在src下新建五个包:分别为

com.belief.dao----//持久层抽象接口

com.belief.Impl----//持久层(DAO层)的实现类,继承了持久层公共父类,并实现了持久层抽象接口

com.belief.model----//实体类

com.belief.util----//Hibernate静态工具类

com.belief.test----//仅供测试



首先编写com.belief.util下的Hibernate静态工具类----HibernateUtil

package com.belief.util;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class HibernateUtil {private static SessionFactory sessionFactory;private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();// 使用静态代码块初始化Hibernatestatic {try {// 1 读取配置文件Configuration cfg = new Configuration().configure();// 2 根据配置 创建FactorysessionFactory = cfg.buildSessionFactory();cfg = null;} catch (Exception ex) {ex.printStackTrace();}}// 获得SessionFactory实例public static SessionFactory getSessionFactory() {return sessionFactory;}// 获得ThreadLocal对象管理的Session实例public static Session getSession() throws HibernateException {Session session = (Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {rebuildSessionFactory();}// 3 通过sessionFactory获得操作数据库的session对象session = (sessionFactory != null) ? sessionFactory.openSession() : null;threadLocal.set(session);}return session;}public static void closeSession() throws HibernateException {// 从线程局部变量threadLocal中获取之前存入的Session实例Session session = (Session) threadLocal.get();threadLocal.set(null);if (session != null) {session.close();}}// 重建SessionFactorypublic static void rebuildSessionFactory() {try {Configuration cfg = new Configuration().configure();sessionFactory = cfg.buildSessionFactory();cfg = null;} catch (Exception ex) {System.out.println("Error Creating SessionFactory");ex.printStackTrace();}}public static void shutDown() {getSessionFactory().close();}}

再编写实体层以及Hibernate映射文件

package com.belief.model;import java.io.Serializable;//联合主键实体类必须实现序列化接口
public class Address implements Serializable{private static final long serialVersionUID = 1L;private String mail_address;private String friend_address;private String remark_name;public String getMail_address() {return mail_address;}public void setMail_address(String mail_address) {this.mail_address = mail_address;}public String getFriend_address() {return friend_address;}public void setFriend_address(String friend_address) {this.friend_address = friend_address;}public String getRemark_name() {return remark_name;}public void setRemark_name(String remark_name) {this.remark_name = remark_name;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((friend_address == null) ? 0 : friend_address.hashCode());result = prime * result + ((mail_address == null) ? 0 : mail_address.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Address other = (Address) obj;if (friend_address == null) {if (other.friend_address != null)return false;} else if (!friend_address.equals(other.friend_address))return false;if (mail_address == null) {if (other.mail_address != null)return false;} else if (!mail_address.equals(other.mail_address))return false;return true;}@Overridepublic String toString() {return "Address [mail_address=" + mail_address + ", friend_address=" + friend_address + ", remark_name="+ remark_name + "]";}}
package com.belief.model;//实体类
public class Adjunct {private String mail_id;private String adjunct_id;private String adjunct_type;private double adjunct_size;private String adjunct_url;public String getMail_id() {return mail_id;}public void setMail_id(String mail_id) {this.mail_id = mail_id;}public String getAdjunct_id() {return adjunct_id;}public void setAdjunct_id(String adjunct_id) {this.adjunct_id = adjunct_id;}public String getAdjunct_type() {return adjunct_type;}public void setAdjunct_type(String adjunct_type) {this.adjunct_type = adjunct_type;}public double getAdjunct_size() {return adjunct_size;}public void setAdjunct_size(double adjunct_size) {this.adjunct_size = adjunct_size;}public String getAdjunct_url() {return adjunct_url;}public void setAdjunct_url(String adjunct_url) {this.adjunct_url = adjunct_url;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((adjunct_id == null) ? 0 : adjunct_id.hashCode());result = prime * result + ((adjunct_type == null) ? 0 : adjunct_type.hashCode());result = prime * result + ((adjunct_url == null) ? 0 : adjunct_url.hashCode());result = prime * result + ((mail_id == null) ? 0 : mail_id.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Adjunct other = (Adjunct) obj;if (adjunct_id == null) {if (other.adjunct_id != null)return false;} else if (!adjunct_id.equals(other.adjunct_id))return false;if (adjunct_type == null) {if (other.adjunct_type != null)return false;} else if (!adjunct_type.equals(other.adjunct_type))return false;if (adjunct_url == null) {if (other.adjunct_url != null)return false;} else if (!adjunct_url.equals(other.adjunct_url))return false;if (mail_id == null) {if (other.mail_id != null)return false;} else if (!mail_id.equals(other.mail_id))return false;return true;}@Overridepublic String toString() {return "Adjunct [mail_id=" + mail_id + ", adjunct_id=" + adjunct_id + ", adjunct_type=" + adjunct_type+ ", adjunct_size=" + adjunct_size + ", adjunct_url=" + adjunct_url + "]";}}
package com.belief.model;//实体类
public class Admin {private String account;private String password;public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((account == null) ? 0 : account.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Admin other = (Admin) obj;if (account == null) {if (other.account != null)return false;} else if (!account.equals(other.account))return false;return true;}@Overridepublic String toString() {return "Admin [account=" + account + ", password=" + password + "]";}}
package com.belief.model;import java.util.Date;//实体类
public class Mail {private String mail_id;private String mail_address;private String mail_receive;private Date send_time;private String mail_subject;private String mail_content;private String state_send;private String state_read;private String content_encoding;private String protocol_version;private Date timing;public String getMail_id() {return mail_id;}public void setMail_id(String mail_id) {this.mail_id = mail_id;}public String getMail_address() {return mail_address;}public void setMail_address(String mail_address) {this.mail_address = mail_address;}public String getMail_receive() {return mail_receive;}public void setMail_receive(String mail_receive) {this.mail_receive = mail_receive;}public Date getSend_time() {return send_time;}public void setSend_time(Date send_time) {this.send_time = send_time;}public String getMail_subject() {return mail_subject;}public void setMail_subject(String mail_subject) {this.mail_subject = mail_subject;}public String getMail_content() {return mail_content;}public void setMail_content(String mail_content) {this.mail_content = mail_content;}public String getState_send() {return state_send;}public void setState_send(String state_send) {this.state_send = state_send;}public String getState_read() {return state_read;}public void setState_read(String state_read) {this.state_read = state_read;}public String getContent_encoding() {return content_encoding;}public void setContent_encoding(String content_encoding) {this.content_encoding = content_encoding;}public String getProtocol_version() {return protocol_version;}public void setProtocol_version(String protocol_version) {this.protocol_version = protocol_version;}public Date getTiming() {return timing;}public void setTiming(Date timing) {this.timing = timing;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((mail_address == null) ? 0 : mail_address.hashCode());result = prime * result + ((mail_id == null) ? 0 : mail_id.hashCode());result = prime * result + ((mail_receive == null) ? 0 : mail_receive.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Mail other = (Mail) obj;if (mail_address == null) {if (other.mail_address != null)return false;} else if (!mail_address.equals(other.mail_address))return false;if (mail_id == null) {if (other.mail_id != null)return false;} else if (!mail_id.equals(other.mail_id))return false;if (mail_receive == null) {if (other.mail_receive != null)return false;} else if (!mail_receive.equals(other.mail_receive))return false;return true;}@Overridepublic String toString() {return "Mail [mail_id=" + mail_id + ", mail_address=" + mail_address + ", mail_receive=" + mail_receive+ ", send_time=" + send_time + ", mail_subject=" + mail_subject + ", mail_content=" + mail_content+ ", state_send=" + state_send + ", state_read=" + state_read + ", content_encoding=" + content_encoding+ ", protocol_version=" + protocol_version + ", timing=" + timing + "]";}}
package com.belief.model;//实体类
public class User {private String nick_name;private String mail_address;private String user_password;public String getNick_name() {return nick_name;}public void setNick_name(String nick_name) {this.nick_name = nick_name;}public String getMail_address() {return mail_address;}public void setMail_address(String mail_address) {this.mail_address = mail_address;}public String getUser_password() {return user_password;}public void setUser_password(String user_password) {this.user_password = user_password;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((mail_address == null) ? 0 : mail_address.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;User other = (User) obj;if (mail_address == null) {if (other.mail_address != null)return false;} else if (!mail_address.equals(other.mail_address))return false;return true;}@Overridepublic String toString() {return "User [nick_name=" + nick_name + ", mail_address=" + mail_address + ", user_password=" + user_password+ "]";}}

Address.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.belief.model.Address" table="address_book"><!-- 联合主键关联 --><composite-id><key-property name="mail_address" column="mail_address"></key-property><key-property name="friend_address" column="friend_address"></key-property></composite-id><!-- 属性关联--><property name="remark_name" column="remark_name"></property></class>
</hibernate-mapping>

Adjunct.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.belief.model.Adjunct" table="adjunct"><!-- 主键关联 --><id name="adjunct_id" column="adjunct_id"></id><!-- 属性关联 --><property name="mail_id" column="mail_id"></property><property name="adjunct_type" column="adjunct_type"></property><property name="adjunct_size" column="adjunct_size"></property><property name="adjunct_url" column="adjunct_url"></property></class>
</hibernate-mapping>

Admin.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.belief.model.Admin" table="admin"><id name="account" column="account"></id><property name="password" column="password"></property></class>
</hibernate-mapping>

Mail.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.belief.model.Mail" table="mail_entity"><id name="mail_id" column="mail_id"></id><property name="mail_address" column="mail_address"></property><property name="mail_receive" column="mail_receive"></property><property name="send_time" column="send_time"></property><property name="mail_subject" column="mail_subject"></property><property name="mail_content" column="mail_content"></property><property name="state_send" column="state_send"></property><property name="state_read" column="state_read"></property><property name="content_encoding" column="content_encoding"></property><property name="protocol_version" column="protocol_version"></property><property name="timing" column="timing"></property></class>
</hibernate-mapping>

User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.belief.model.User" table="user_entity"><id name="mail_address" column="mail_address"></id><property name="nick_name" column="nick_name"></property><property name="user_password" column="user_password"></property></class>
</hibernate-mapping>

-然后是五个DAO层抽象接口

package com.belief.dao;import java.util.ArrayList;import com.belief.model.Address;//持久层抽象接口
public interface addressDao {void save(Address address);void delete(Address address);void update(Address address);Address QueryByOne(String mail_address, String friend_address);ArrayList<Address> QueryByMail(String mail_address);
}
package com.belief.dao;import java.util.ArrayList;import com.belief.model.Adjunct;//持久层抽象接口
public interface adjunctDao {void save(Adjunct adjunct);void delete(Adjunct adjunct);void update(Adjunct adjunct);Adjunct QueryById(String adjunct_id);ArrayList <Adjunct> QueryByMailId(String mail_id);
}
package com.belief.dao;import com.belief.model.Admin;//持久层抽象接口
public interface adminDao {void save(Admin admin);void delete(Admin admin);void update(Admin admin);Admin QueryByAccount(String account);
}
package com.belief.dao;import java.util.ArrayList;import com.belief.model.Mail;//持久层抽象接口
public interface mailDao {void save(Mail mail);void delete(Mail mail);void update(Mail mail);Mail QueryByMailId(String mail_id);ArrayList <Mail> QueryByMailAddress(String mail_address);ArrayList <Mail> QueryByMailReceive(String mail_receive);}
package com.belief.dao;import java.util.ArrayList;import com.belief.model.User;//持久层抽象接口
public interface userDao {void save(User user);void delete(User user);void update(User user);User QueryByEmail(String email);ArrayList <User> QueryAllUser();}

-五个DAO层实现类和一个实现类的公共父类

ImplFather.java

package com.belief.Impl;import org.hibernate.Session;
import org.hibernate.Transaction;import com.belief.util.HibernateUtil;//提取持久层(DAO层)的公共部分,作为持久层实现类的公共父类
public class ImplFather {protected Session session = HibernateUtil.getSession();protected Transaction tx = session.beginTransaction();protected void cleanUp() {try {tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();} finally {HibernateUtil.closeSession();}}
}
package com.belief.Impl;import java.util.ArrayList;import com.belief.dao.addressDao;
import com.belief.model.Address;//持久层(DAO层)的实现类,继承了持久层公共父类,并实现了持久层抽象接口
public class addressDaoImpl extends ImplFather implements addressDao {@Overridepublic void save(Address address) {session.save(address);cleanUp();}@Overridepublic void delete(Address address) {session.delete(address);cleanUp();}@Overridepublic void update(Address address) {session.update(address);cleanUp();}@Overridepublic Address QueryByOne(String mail_address, String friend_address) {String hql = "SELECT * FROM address_book WHERE mail_address=? AND friend_address=?";Address address = (Address) session.createQuery(hql).setParameter(0, mail_address).setParameter(1, friend_address).uniqueResult();cleanUp();return address;}@Overridepublic ArrayList<Address> QueryByMail(String mail_address) {String hql = "SELECT * FROM address_book WHERE mail_address=?";@SuppressWarnings("unchecked")ArrayList<Address> addresss = (ArrayList<Address>) session.createQuery(hql).setParameter(0, mail_address).getResultList();cleanUp();return addresss;}}
package com.belief.Impl;import java.util.ArrayList;import com.belief.dao.adjunctDao;
import com.belief.model.Adjunct;//持久层(DAO层)的实现类,继承了持久层公共父类,并实现了持久层抽象接口
public class adjunctDaoImpl extends ImplFather implements adjunctDao {@Overridepublic void save(Adjunct adjunct) {session.save(adjunct);cleanUp();}@Overridepublic void delete(Adjunct adjunct) {session.delete(adjunct);cleanUp();}@Overridepublic void update(Adjunct adjunct) {session.update(adjunct);cleanUp();}@Overridepublic Adjunct QueryById(String adjunct_id) {Adjunct adjunct = (Adjunct) session.get(Adjunct.class, adjunct_id);cleanUp();return adjunct;}@Overridepublic ArrayList<Adjunct> QueryByMailId(String mail_id) {String hql = "SELECT * FROM adjunct WHERE mail_id=?";@SuppressWarnings("unchecked")ArrayList<Adjunct> adjuncts = (ArrayList<Adjunct>) session.createQuery(hql).setParameter("mail_id", mail_id).getResultList();cleanUp();return adjuncts;}}
package com.belief.Impl;import com.belief.dao.adminDao;
import com.belief.model.Admin;//持久层(DAO层)的实现类,继承了持久层公共父类,并实现了持久层抽象接口
public class adminDaoImpl extends ImplFather implements adminDao {@Overridepublic void save(Admin admin) {session.save(admin);cleanUp();}@Overridepublic void delete(Admin admin) {session.delete(admin);cleanUp();}@Overridepublic void update(Admin admin) {session.update(admin);cleanUp();}@Overridepublic Admin QueryByAccount(String account) {Admin admin = (Admin) session.get(Admin.class, account);cleanUp();return admin;}}
package com.belief.Impl;import java.util.ArrayList;import com.belief.dao.mailDao;
import com.belief.model.Mail;//持久层(DAO层)的实现类,继承了持久层公共父类,并实现了持久层抽象接口
public class mailDaoImpl extends ImplFather implements mailDao {@Overridepublic void save(Mail mail) {session.save(mail);cleanUp();}@Overridepublic void delete(Mail mail) {session.delete(mail);cleanUp();}@Overridepublic void update(Mail mail) {session.update(mail);cleanUp();}@Overridepublic Mail QueryByMailId(String mail_id) {Mail mail = (Mail) session.get(Mail.class, mail_id);cleanUp();return mail;}@Overridepublic ArrayList<Mail> QueryByMailAddress(String mail_address) {String hql = "SELECT * FROM mail_entity WHERE mail_address=?";@SuppressWarnings("unchecked")ArrayList<Mail> mails = (ArrayList<Mail>) session.createQuery(hql).setParameter("mail_address", mail_address).getResultList();cleanUp();return mails;}@Overridepublic ArrayList<Mail> QueryByMailReceive(String mail_receive) {String hql = "SELECT * FROM mail_entity WHERE mail_receive=?";@SuppressWarnings("unchecked")ArrayList<Mail> mails = (ArrayList<Mail>) session.createQuery(hql).setParameter("mail_receive", mail_receive).getResultList();cleanUp();return mails;}}
package com.belief.Impl;import java.util.ArrayList;import com.belief.dao.userDao;
import com.belief.model.User;//持久层(DAO层)的实现类,继承了持久层公共父类,并实现了持久层抽象接口
public class userDaoImpl extends ImplFather implements userDao {@Overridepublic void save(User user) {session.save(user);cleanUp();}@Overridepublic void delete(User user) {session.delete(user);cleanUp();}@Overridepublic void update(User user) {session.update(user);cleanUp();}@Overridepublic User QueryByEmail(String email) {User user = (User) session.get(User.class, email);cleanUp();return user;}@Overridepublic ArrayList<User> QueryAllUser() {String hql = "SELECT * FROM user_entity";@SuppressWarnings("unchecked")ArrayList<User> users = (ArrayList<User>) session.createQuery(hql).getResultList();cleanUp();return users;}}

最后,当然是写一个测试类测试一下功能

package com.belief.test;import org.junit.Test;import com.belief.Impl.*;
import com.belief.model.User;//仅供测试
public class TestUser {// 测试增@Testpublic void testSave() {userDaoImpl impl = new userDaoImpl();User iuser = new User();iuser.setMail_address("15514652@belief");iuser.setNick_name("佚阳");iuser.setUser_password("LYY1115*");impl.save(iuser);}// 测试查@Testpublic void testQuery() {userDaoImpl impl = new userDaoImpl();System.out.println(impl.QueryByEmail("795138462@belief"));}// 测试改@Testpublic void testUpdate() {userDaoImpl impl = new userDaoImpl();User iuser = new User();iuser.setMail_address("15514652@belief");iuser.setNick_name("阳阳阳阳");iuser.setUser_password("LYY1145*");impl.update(iuser);}// 测试删@Testpublic void testdelete() {userDaoImpl impl = new userDaoImpl();User iuser = new User();iuser.setMail_address("15514652@belief");impl.delete(iuser);}
}


邮件服务器MailServer之 Hibernate持久层开发相关推荐

  1. Mybatis持久层开发

    文章目录 Mybatis持久层开发简要步骤 概述: 示例: 总结: 注意要点: 基于Mapper代理的示例 基于注解的示例 应用场景: 主键返回 批量查询 动态SQL 缓存 关联查询 延迟加载 逆向工 ...

  2. Hibernate持久层框架详解

    本博文是本人原创,观点是本人自己提出的,如有雷同,不甚荣幸! 一.hibernate框架的前世今生 1.前世:2001年,Gavin King开始开发hibernate框架.两年之后,Gavin Ki ...

  3. mybatis plus关联查询_Mybatis 和 Hibernate 持久层框架之间的区别是啥?

    首先,Mybatis 和 Hibernate 都是 ORM 持久层框架,不同点在于,MyBatis 是半自动的,它需要开发人员自己手动编写 SQL 语句. 一.Mybatis MyBatis 支持通过 ...

  4. hibernate 根据用户名获取用户对象_Mybatis 和 Hibernate 持久层框架之间的区别是啥?...

    首先,Mybatis 和 Hibernate 都是 ORM 持久层框架,不同点在于,MyBatis 是半自动的,它需要开发人员自己手动编写 SQL 语句. 一.Mybatis MyBatis 支持通过 ...

  5. 基于持久层框架hibernate用SpringMVC增删功能

    接Spring MVC框架(1)的方法 Hibernate:持久层全自动化的框架 hibernate 用的少了 因为现在mybatis用的多 接下来 hibernate框架要链接数据库blog /* ...

  6. 【SpringBoot】SpringBoot——整合持久层技术

    文章目录 5. 整合持久层技术 5.1 整合JdbcTemplate 5.2 整合MyBatis 5.3 Spring Data JPA 5.3.1 JPA.Spring Data.Spring Da ...

  7. java开源持久层框架集

    原文链接:http://www.open-open.com/3_18.htm Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Ja ...

  8. Spring基础专题——第七章(持久层整合)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  9. SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

    一.JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范.主要是为了简化持久层开发以及整合ORM技术,结束H ...

最新文章

  1. 教你用Vue渐进式搭建聊天室,从JavaScript=TypeScript
  2. 【转】Create Hello-JNI with Android Studio
  3. 第二章:Java基本语法
  4. 使用DynamoDBMapper扫描DynamoDB项目
  5. Android下的数据储存方式(三)
  6. 大学里学的单片机和网课一对一学单片机有什么区别
  7. office版本都有哪些_文员需要熟练掌握哪些办公软件啊?
  8. TortoiseSVN使用教程
  9. x光肺部分割数据集_一个超小型分割检测数据集
  10. 生物统计分析之主成分分析(PCA)
  11. 软件测试和软件调试的区别
  12. Unity使用VS2019打开代码出现不兼容的解决方法
  13. 红米k40pro一键root教程
  14. python判断对错题_Python爬虫自动化获取华图和粉笔网站的错题(推荐)
  15. MATLAB水箱液位模糊控制仿真程序
  16. 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
  17. SqlServer2005中数据库角色成员身份
  18. Selenium之Webdriver驱动大全【Firefox、Chrome、IE、Edge、Opera、PhantomJS】
  19. 记Oracle regexp_substr 一拆多查询缓慢sql优化
  20. Qt windows端的蓝牙串口服务

热门文章

  1. PCB相关知识-封装+元件属性+印制电路板PCB
  2. MFC之MP3音频文件转二进制、十六进制等
  3. Mac配置Iterm2+oh-my-zsh+powerlevel10k打造炫酷终端
  4. 网络打印机安装脚本(rundll32 printui.dll,PrintUIEntry用法示例) 1
  5. 脑洞大开:从零维到十维空间解释
  6. 最新苹果服务器认证,iOS 苹果登录Sign in with Apple 和 服务端验证(nodejs 版)
  7. 创业多想一秒,做事少磕十年
  8. 【分析仪器维护保养一,气相色谱仪】
  9. ar vr mr 计算机技术,AR/VR/MR傻傻分不清?一图带你看懂三种虚拟现实技术
  10. 查找计算机所有图片文件夹,win10系统搜索电脑里的所有图片的方案