1)在applicationContext里面配置Hibernate的dataSource和SessionFactory
2)编写Dao的接口是实现类。如果用到Spring的Hibernate的 *** 作模板(HibernateTemplate)可以继承HibernateDaoSupport,实现类注解成@Repository
3)编写Action,然后注解成@Controller,在Action里面需要用@Autowired注入Dao的实例
4)配置applicationContextxml,加上Spring
MVC的视图处理器
5)编写页面,然后提交请求。搞定!
一) 其实这个功能在spring2x时代就提供了。一直没用过,今天在spring-mvc32x的环境下试验了一次。还算简单易用。
二) 依赖。
spring依赖POI或jExcel来实现对excel输出的支持,前者是apache出品,貌似名气更大,本例使用第一个。
<dependency>
<groupId>orgapachepoi</groupId>
<artifactId>poi</artifactId>
<version>37</version>
</dependency>
三) spring提供了一个AbstractExcelView作为自己实现的视图的父类。实例代码如下。
package yingcarview;
import javatextDateFormat;
import javatextSimpleDateFormat;
import javautilList;
import javautilMap;
import javaxservlet>
import javaxservlet>
import orgapachepoihssfusermodelHSSFDataFormat;
import orgapachepoihssfusermodelHSSFSheet;
import orgapachepoihssfusermodelHSSFWorkbook;
import orgapachepoissusermodelCell;
import orgapachepoissusermodelCellStyle;
import orgapachepoissusermodelIndexedColors;
import orgjodatimeDateTime;
import orgslf4jLogger;
import orgslf4jLoggerFactory;
import orgspringframeworkwebservletviewdocumentAbstractExcelView;
import yingcarbindingDateRange;
import yingcardomainRefuelingRecord;
public class RefuelingRecordExcelView extends AbstractExcelView {
private static final Logger LOGGER = LoggerFactorygetLogger(RefuelingRecordExcelViewclass);
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
@Override
@SuppressWarnings({"unchecked"})
protected void buildExcelDocument(
Map<String, Object> model, // MVC中的M就在这里了
HSSFWorkbook workbook,
>
>
{
("yyyy/MM/dd"));
LOGGERdebug("end: {}", new DateTime(drgetEnd())toString("yyyy/MM/dd"));
}
}
HSSFSheet sheet = workbookcreateSheet(DATE_FORMATformat(drgetStart()) + "-" + DATE_FORMATformat(drgetEnd()));
setColumnsWidth(sheet);
fillTableHeader(workbook, sheet);
fillTableBody(workbook, sheet, rrl);
}
private void setColumnsWidth(HSSFSheet sheet) {
final int[] warr = new int[] {
500, // <空>
4500, // 日期
4500, // 车辆
4500, // 燃油种类
4500, // 燃油单价
4500, // 加油方式
4500, // 加油量
3000, // 花费
12000 // 备注
};
for (int i = 0; i < warrlength; i ++) {
sheetsetColumnWidth(i, warr[i]);
}
}
// 填充表格头
private void fillTableHeader(HSSFWorkbook workbook, HSSFSheet sheet) {
final String[] contents = new String[] {
"日期",
"车辆",
"燃油种类",
"燃油单价(元/升)",
"加油方式",
"加油量(升)",
"花费(元)",
"备注"
};
int r = 1;
int c = 1;
CellStyle style = workbookcreateCellStyle();
stylesetFillForegroundColor(IndexedColorsYELLOWgetIndex()); // 填充**
stylesetFillPattern(CellStyleSOLID_FOREGROUND); // 填充方式
// 设置border
stylesetBorderLeft(CellStyleBORDER_THIN);
stylesetBorderRight(CellStyleBORDER_THIN);
stylesetBorderTop(CellStyleBORDER_THIN);
stylesetBorderBottom(CellStyleBORDER_THIN);
for (int i = 0; i < contentslength; i ++) {
Cell cell = getCell(sheet, r, c + i);
cellsetCellValue(contents[i]);
cellsetCellStyle(style);
}
}
private void fillTableBody(HSSFWorkbook workbook, HSSFSheet sheet, List<RefuelingRecord> records) {
// 通用style
CellStyle style = workbookcreateCellStyle();
stylesetFillForegroundColor(IndexedColorsWHITEgetIndex()); // 填充白色
stylesetFillPattern(CellStyleSOLID_FOREGROUND); // 填充方式
stylesetBorderLeft(CellStyleBORDER_THIN);
stylesetBorderRight(CellStyleBORDER_THIN);
stylesetBorderTop(CellStyleBORDER_THIN);
stylesetBorderBottom(CellStyleBORDER_THIN);
// 日期style
CellStyle dateStyle = workbookcreateCellStyle();
dateStylesetFillForegroundColor(IndexedColorsWHITEgetIndex()); // 填充白色
dateStylesetFillPattern(CellStyleSOLID_FOREGROUND); // 填充方式
dateStylesetBorderLeft(CellStyleBORDER_THIN);
dateStylesetBorderRight(CellStyleBORDER_THIN);
dateStylesetBorderTop(CellStyleBORDER_THIN);
dateStylesetBorderBottom(CellStyleBORDER_THIN);
dateStylesetDataFormat(HSSFDataFormatgetBuiltinFormat("m/d/yy"));
int r = 2;
int c = 1;
Cell cell = null;
for (int i = 0; i < recordssize(); i ++) {
RefuelingRecord rr = recordsget(i);
// 日期
cell = getCell(sheet, r, c + 0);
if (rrgetDate() != null)
cellsetCellValue(rrgetDate());
cellsetCellStyle(dateStyle);
// 车辆
cell = getCell(sheet, r, c + 1);
if (rrgetVehicle()getNickname() != null)
cellsetCellValue(rrgetVehicle()getNickname());
cellsetCellStyle(style);
// 燃油种类
cell = getCell(sheet, r, c + 2);
if (rrgetGasType() != null) {
String s = null;
switch (rrgetGasType()) {
case _0: s = "0号柴油"; break;
case _93: s = "93号汽油"; break;
case _97: s = "97号汽油"; break;
case _98: s = "98号汽油"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 单价
cell = getCell(sheet, r, c + 3);
if (rrgetPriceOfGas() != null)
cellsetCellValue(rrgetPriceOfGas());
cellsetCellStyle(style);
// 加油方式
cell = getCell(sheet, r, c + 4);
if (rrgetRefuelingType() != null) {
String s = null;
switch (rrgetRefuelingType()) {
case FIXED_CUBAGE:
s = "固定容积"; break;
case FIXED_MONEY:
s = "固定金额"; break;
case FULL:
s = "加满"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 加油量
cell = getCell(sheet, r, c + 5);
if (rrgetCubageOfGas() != null)
cellsetCellValue(rrgetCubageOfGas());
cellsetCellStyle(style);
// 花费
cell = getCell(sheet, r, c + 6);
if (rrgetSumOfMoney() != null)
cellsetCellValue(rrgetSumOfMoney());
cellsetCellStyle(style);
// 备注
cell = getCell(sheet, r, c + 7);
if (rrgetComment() != null)
cellsetCellValue(rrgetComment());
cellsetCellStyle(style);
r ++;
}
}
}
cellsetCellStyle(style);
// 燃油种类
cell = getCell(sheet, r, c + 2);
if (rrgetGasType() != null) {
String s = null;
switch (rrgetGasType()) {
case _0: s = "0号柴油"; break;
case _93: s = "93号汽油"; break;
case _97: s = "97号汽油"; break;
case _98: s = "98号汽油"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 单价
cell = getCell(sheet, r, c + 3);
if (rrgetPriceOfGas() != null)
cellsetCellValue(rrgetPriceOfGas());
cellsetCellStyle(style);
// 加油方式
cell = getCell(sheet, r, c + 4);
if (rrgetRefuelingType() != null) {
String s = null;
switch (rrgetRefuelingType()) {
case FIXED_CUBAGE:
s = "固定容积"; break;
case FIXED_MONEY:
s = "固定金额"; break;
case FULL:
s = "加满"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 加油量
cell = getCell(sheet, r, c + 5);
if (rrgetCubageOfGas() != null)
cellsetCellValue(rrgetCubageOfGas());
cellsetCellStyle(style);
// 花费
cell = getCell(sheet, r, c + 6);
if (rrgetSumOfMoney() != null)
cellsetCellValue(rrgetSumOfMoney());
cellsetCellStyle(style);
// 备注
cell = getCell(sheet, r, c + 7);
if (rrgetComment() != null)
cellsetCellValue(rrgetComment());
cellsetCellStyle(style);
r ++;
}
}
}
四) Controller中返回逻辑视图名 (代码片段)
Java代码
@RequiresUser // 安全框架用元注释
@RequiresRoles({"ROLE_USER"})
@RequestMapping(value = "/list/excel", method = RequestMethodGET)
public String listByExcel(
@DateRangeFormat(pattern = "yyyy-MM-dd") @RequestParam("dateRange") DateRange dateRange,
ModelMap modelMap
)
{
}
// 放入model
modelMapput("dateRange", dateRange);
modelMapput("refuelingRecordList", gasServicefindRefuelingRecordByDateRange(currentUserId, dateRange));
return "refueling-record-list"; // 最终返回逻辑视图名
}
五) 为spring-mvc配置多个视图解析器。
<bean class="orgspringframeworkwebservletviewXmlViewResolver">
<property name="order" value="1" /> <!-- order很重要 -->
<property name="location" value="classpath:/META-INF/viewsxml" />
</bean>
<bean class="orgspringframeworkwebservletviewInternalResourceViewResolver">
<property name="order" value="9999" />
<property name="viewClass" value="orgspringframeworkwebservletviewJstlView" />
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value="jsp"/>
六) 效果图
之前做的一个项目有这么个要求,在日志管理系统里,需要将某些日志信息存储到数据库里,供用户、管理员查看分析。因此我就花了点时间搞了一下这一功能,各位请看。
摘要:我们知道log4j能提供强大的可配置的记日志功能,有写文件的、打印到控制台的等等,但有时我们需要它把日志输出到后台数据库中,log4j的强大的可扩展性支持了这一点,以下就是具体的实现。
关键词:log,log4j,日志,Java,DB,数据库,slf4j
前提:已经配置好slf4j、log4j,能正常的往文件或控制台写日志。
需求:将日志写入到数据库中。
说明:使用log4j-1217jar,slf4j-api-175jar,slf4j-log4j12-166jar。
创建数据库
选择开始菜单中→程序→Management SQL Server 2008→SQL Server Management Studio命令,打开SQL Server Management Studio窗口,并使用Windows或 SQL Server身份验证建立连接。
在对象资源管理器窗口中展开服务器,然后选择数据库节点
右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。
执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作,
在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。
在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。
在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。
切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。
切换到文件组页,在这里可以添加或删除文件组。
完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。
mvc有自带的增删查改,在models写好类在contrller右键,添加控制器,选择“带有读写功能的视图”,基类就选你刚建的类就行了,上下文类就自己编写个继承DbContext的类就行了,在里面加个属性,dbset<刚建的 类> 创建好后,其他全部自动生成了
以上就是关于java用spring mvc + hibernate,实现数据库的增删改查全部的内容,包括:java用spring mvc + hibernate,实现数据库的增删改查、springmvc excel表格数据导入数据库怎么做、springMVC怎么使用log4j将数据写到数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)