配置文件

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lgp</groupId>
<artifactId>maven_ssh</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>maven_ssh Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- struts2的驱动包 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.31</version>
</dependency>
<!-- 添加Hibernate依赖 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.10.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.6.4</version>
</dependency>
<!-- mysql数据库的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<finalName>maven_ssh</finalName>
</build>
</project>

熟悉的pom.xml其中lo4g和slf4j这两个包第一眼看上去有点莫名奇妙,我也是这么觉得的,实际作用是在后台输出sql语句,不导入hibernate就会报错。

web.xml和struts2一致即可

剩下的配置文件就放在resource文件夹以下即可

    ### direct log messages to stdout ###
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 %c{1}:%L - %m%n ### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=warn, stdout #log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=debug ### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug ### log just the SQL
#log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug ### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug ### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug ### log cache activity ###
#log4j.logger.org.hibernate.cache=debug ### log transaction activity
#log4j.logger.org.hibernate.transaction=debug ### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug ### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

log4j.properties全是复制粘贴就好,硬要深究每一个的作用你可以一个一个的改,认真看都能看懂的。

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

<!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>创建与mysql的连接-->
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">123456789</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">10</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="Table.hbm.xml" />
</session-factory>
</hibernate-configuration>

hibernate.cfg.xml 注意<mapping resource="Table.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 package="com.entiy">
<class name="com.entity.User" table="USER">
<id name="id" column="ID">
<generator class="increment" />
</id>
<property name="name" column="NAME" />
<property name="pwd" column="PWD" />
</class>
</hibernate-mapping>

Table.hbm.xml一个</class>就是一个表格,所有表格都写在里面即可。hibernate在加载时,如果你没有表格,就会自行创建。

java代码

package com.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
// 定义静态的SessionFactory,产生单例,只生成一个SessionFactory
private static final SessionFactory sessionFactory = buildSessionFactory(); // 用来初始化SessionFactory
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
} // 得到SessionFactory
public static SessionFactory getSessionFactory() {
return sessionFactory;// 返回SessionFactory的对象
}
}

HibernateUtil的工具类

package com.entity;

public class User {
private int id;// id
private String name;// 名字
private String pwd;// 密码 public User() { } public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} }

user 就是表格的实体类,根据这个来创建表格

package com.action;

import java.util.List;
import java.util.Map; import org.apache.struts2.interceptor.RequestAware; import com.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack;
import com.service.UserService; public class UserAction extends ActionSupport implements ModelDriven<User>, RequestAware {
private static final long serialVersionUID = -1417237614181805435L;
private User user;
List<User> list; public List<User> getList() {
return list;
} public void setList(List<User> list) {
this.list = list;
} @SuppressWarnings("unused")
private Map<String, Object> request; public String selectAll() {
String sql = "from User";
UserService userService = new UserService();// model
list = userService.findAll(sql);
ValueStack vs = ActionContext.getContext().getValueStack();
vs.push(list);
return "success";
} public String add() {
UserService userService = new UserService();// model
userService.add(user);
return "success";
} public String delete() {
UserService userService = new UserService();// model
userService.delete(user);
return "success";
} public String update() {
UserService userService = new UserService();// model
userService.update(user);
return "success";
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public User getModel() {
if (user == null) {
user = new User();
}
return user;
} public void setRequest(Map<String, Object> arg0) {
request = arg0;
}
}

action类

package com.dao;

import java.util.List;

import com.entity.User;

public interface DBDao<T> {

    public List<T> selectAll(String sql);

    public int insert(User user);

    public void update(User user);

    public void delete(User user);
}

dao接口

package com.dao.impl;

import java.util.List;

import org.hibernate.Session;

import com.util.HibernateUtil;
import com.dao.DBDao;
import com.entity.User; public class DBDaoImpl<T> implements DBDao<T> {
@SuppressWarnings("unchecked")
public List<T> selectAll(String sql) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();// 得到目前运行的session
session.beginTransaction();// 开始事务 没有终结事务的方法
List<T> listUsers = session.createQuery(sql).list();
HibernateUtil.getSessionFactory().close();
return listUsers;
} public int insert(User user) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();// 得到目前运行的session
session.beginTransaction();// 开始事务 没有终结事务的方法
int result = (Integer) session.save(user);// 保存对象
session.getTransaction().commit();// 提交事务
HibernateUtil.getSessionFactory().close();
return result;
} public void delete(User user) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();// 得到目前运行的session
session.beginTransaction();// 开始事务 没有终结事务的方法
session.delete(user);
session.getTransaction().commit();// 提交事务
HibernateUtil.getSessionFactory().close();
} public void update(User user) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();// 得到目前运行的session
session.beginTransaction();// 开始事务 没有终结事务的方法
session.update(user);
session.getTransaction().commit();// 提交事务
HibernateUtil.getSessionFactory().close();
}
}

DBDaoImpl接口的实现类,这里值得一提的是,有没有close,有没有beginTransaction,有没有commit,会有不会报错的逻辑bug,建议要么自己一个一个试试,要么像我这样贪方便(懒)全写。

package com.service;

import java.util.List;

import com.dao.impl.DBDaoImpl;
import com.entity.User; public class UserService { @SuppressWarnings({ "unchecked", "rawtypes" })
public List<User> findAll(String sql) {
DBDaoImpl Impl = new DBDaoImpl();
return Impl.selectAll(sql);
} @SuppressWarnings("rawtypes")
public int add(User user) {
DBDaoImpl Impl = new DBDaoImpl();
return Impl.insert(user);
} @SuppressWarnings("rawtypes")
public void delete(User user) {
DBDaoImpl Impl = new DBDaoImpl();
Impl.delete(user);
} @SuppressWarnings("rawtypes")
public void update(User user) {
DBDaoImpl Impl = new DBDaoImpl();
Impl.update(user);
}
}

service类model控制事务

SSH上一个随笔的基础上添加上hibernate支持的更多相关文章

  1. vue中路由返回上一个页面,恢复到上一个页面的滚动位置

    第一步:路由文件的配置(对你所需要的vue文件进行保存缓存标志的添加) import Vue from 'vue' import Router from 'vue-router' import Hel ...

  2. 【JavaEE】SSH+Spring Security基础上配置AOP+log4j

    Spring Oauth2大多数情况下还是用不到的,主要使用的还是Spring+SpringMVC+Hibernate,有时候加上SpringSecurity,因此,本文及以后的文章的example中 ...

  3. 一个1级分组基础上同时进行2级分组的SQL面试题

    示例1:测试数据: SQL> select * from score; ID CLASS STUDENT COURSE      SCORE ---------- ----- ------- - ...

  4. 如何基于Winform开发框架或混合框架基础上进行项目的快速开发

    在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...

  5. 沉淀,再出发——在Hadoop集群的基础上搭建Spark

    在Hadoop集群的基础上搭建Spark 一.环境准备 在搭建Spark环境之前必须搭建Hadoop平台,尽管以前的一些博客上说在单机的环境下使用本地FS不用搭建Hadoop集群,可是在新版spark ...

  6. 一种安全云存储方案设计(下)——基于Lucene的云端搜索与密文基础上的模糊查询

    一种安全的云存储方案设计(未完整理中) 一篇老文了,现在看看错漏颇多,提到的一些技术已经跟不上了.仅对部分内容重新做了一些修正,增加了一些机器学习的内容,然并卵. 这几年来,云产品层出不穷,但其安全性 ...

  7. Shell编程入门基础上

    前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...

  8. 在Bootstrap开发框架基础上增加WebApi+Vue&Element的前端

    基于Metronic的Bootstrap开发框架是我们稍早一点的框架产品,界面部分采用较新的Bootstrap技术,框架后台数据库支持Oracle.SqlServer.MySql.PostgreSQL ...

  9. dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

    http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术 ...

随机推荐

  1. Python内置函数(15)——memoryview

    英文文档: class memoryview(obj) memoryview objects allow Python code to access the internal data of an o ...

  2. print 函数设置字体颜色

    格式:\033[显示方式;前景色;背景色m数值表示的参数含义:显示方式: 0(默认值).1(高亮).22(非粗体).4(下划线).24(非下划线). 5(闪烁).25(非闪烁).7(反显).27(非反 ...

  3. 使用 vi 命令

    一.vi是什么 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器. Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实 ...

  4. 使用 Angular CLI 和 Webpack 分析包尺寸

    使用 Angular CLI 和 Webpack 分析包尺寸 对于 Web app 来说,高性能总是最高优先级,对于 Angular 也不例外.但是随着应用复杂度的不断增长,我们如何才能知道哪些内容打 ...

  5. CentOS ping www.baidu.com 报错 name or service not know

    今天尝试安装了centos系统 玩一玩 刚刚装好的操作系统 ping www.baidu.com的时候  报出 name or service not known 查了好多资料,都没有很好的解决 最后 ...

  6. 翻译:JVM虚拟机规范1.7中的运行时常量池部分(二)

    本篇为JVM虚拟机规范1.7中的运行时常量池部分系列的第二篇. 4.4.4. The CONSTANT_Integer_info and CONSTANT_Float_info Structures ...

  7. 前段 format方法

    a.为字符串创建format方法,用于字符串格式化 String.prototype.format=function (arg) { //console.log(this,arg); //this,当 ...

  8. python——常用模块

    python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...

  9. 测试驱动开发实践5————testSave之修改文档分类

    [内容指引] 1.确定"修改文档分类"的微服务接口及所需的参数 2.设计测试用例及测试用例合并 3.为测试用例赋值并驱动开发 上一篇我们通过17个测试用例完成了"新增文档 ...

  10. requests-证书验证

    import requests #response = requests.get('https://www.12306.cn') #print(response.status_code) #以上会显示 ...