Spring集成Hibernate写SQLServer

一、需求:由于本人要做一个集中告警服务端,所以需要接收HTTP请求,然后把收到的数据记录到SQLServer数据库中。
二、实现方式:使用SpringMVC接收HTTP请求,能同时接收GET和POST的请求,然后使用hibernate来存储数据信息。
三、主要实现:
1.数据库建表脚本。

CREATE TABLE [Log_SimpleMonitor](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CityName] [varchar](32) NOT NULL,
[MonitorTime] [datetime] NOT NULL,
[IsSuccess] [bit] NOT NULL DEFAULT ((0)),
[MonitorLevel] [varchar](16) NOT NULL DEFAULT ('INFO'),
[DetailContent] [varchar](2048) NOT NULL,
[CreateTime] [datetime] NOT NULL
)

2.生成的数据库表影射类,用到了hibernate的注解方式,不再使用hbm映射文件。

package com.ajita.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "Log_SimpleMonitor")
public class Log_SimpleMonitor implements Serializable {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "CityName")
private String cityName;
@Column(name = "MonitorTime")
private Date monitorTime;
@Column(name = "IsSuccess")
private boolean isSuccess;
@Column(name = "MonitorLevel")
private String MonitorLevel;
@Column(name = "DetailContent")
private String message;
@Column(name = "CreateTime")
private Date createTime;

//getters and setters
}

3.spring集成hibernate的主要配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="..."
default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url"> <value>jdbc:jtds:sqlserver://localhost:1433/mydb</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="packagesToScan">
<value>com.ajita.entity</value>
</property>
<!-- <property name="mappingResources"> <list> <value>user.hbm.xml</value>
</list> </property> -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 使用注解,在beans标签中添加context命名空间及其对应的schemaLocation -->
<context:annotation-config />
<context:component-scan base-package="com.ajita.*" />

</beans>

4.使用springMVC接收HTTP请求请参考之前的一篇日志
http://ajita.iteye.com/admin/blogs/1396264 。
5.收到HTTP请求后的主要存储逻辑。一般情况下,会把数据库操作的方法再封装到一个dao类中,但是由于本测试代码只涉及到一个存储的过程,很简单,所以直接把spring的hibernateTemplate注解到接收到HTTP后的处理逻辑中了。

package com.ajita.controller;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.ajita.entity.Log_SimpleMonitor;

@Controller
public class SimpleMoniorLogReceiver {
private HibernateTemplate hibernateTemplate;

@Autowired
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}

public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}

@RequestMapping("/submitsimplemonitorlog.do")
public void receive(
Model model,
HttpServletRequest request,
@RequestParam(value = "cityname", required = false) String cityName,
@RequestParam(value = "monitortime", required = false) String monitorTime,
@RequestParam(value = "issuccess", required = false) String isSuccess,
@RequestParam(value = "level", required = false) String level,
@RequestParam(value = "message", required = false) String message,
HttpServletResponse response) throws ParseException {
try {
ServletOutputStream stream = response.getOutputStream();
if (level == null || message == null || cityName == null
|| monitorTime == null || isSuccess == null) {
stream.print("ERROR");
stream.close();
return;
}

Log_SimpleMonitor monitorLog = new Log_SimpleMonitor();
monitorLog.setCityName(cityName);
monitorLog.setMonitorTime(new Date());
monitorLog.setMonitorLevel(level);
monitorLog.setMessage(message);
monitorLog.setSuccess(Boolean.parseBoolean(isSuccess));
monitorLog.setCreateTime(new Date());
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
monitorLog.setMonitorTime(dateFormat.parse(monitorTime));
hibernateTemplate.save(monitorLog);

stream.print("SUCCESS");
stream.close();
} catch (IOException ex) {
}
}
}

6.完整代码见附件。可以直接生成war文件,发布到Tomcat下部署就行。
我本机的HTTP的GET方式测试的URL为:http://localhost:8080/SimpleTest/submitsimplemonitorlog.do?level=2&message=gaojing&issuccess=true&cityname=anhui&monitortime=20120221051223
另外,代码中还包含了一个只使用hibernate(没有集成到spring)来存日志的测试类(可以删掉,只是我最初测试时候用的)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值