【SpringMVC】三大框架整合纯java版

首先引入三大框架所用jar包



结构如下:



准备数据库连接所需配置jdbc.properties

jdbc.user=root
jdbc.password=aini1314
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///springmvc

以及hibernate所需配置hibernate.properties

hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update

在web.xml中进行Spring的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
	<!-- 配置SpringMVC -->
	 <servlet>
	  	<servlet-name>dispatcherServlet</servlet-name>
	  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	  	<init-param>
			<!-- 用哪种容器类 -->
	  		<param-name>contextClass</param-name>
	  		<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
	  	</init-param>
  	<init-param>
		<!-- 入口配置 -->
  		<param-name>contextConfigLocation</param-name>
  		<param-value>cn.qblank.AppConfig</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

在AppConfig类代替xml进行hibernate的配置

package cn.qblank;

import javax.sql.DataSource;

import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
@ComponentScan("cn.qblank")
@PropertySource("classpath:jdbc.properties") //引入外部属性文件到Enviroment
@EnableTransactionManagement
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter{
	/**
	 * 负责将控制器方法返回的字符串映射到某个JSP
	 */
	@Bean
	public ViewResolver viewResolver(){
		//创建对象
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		// 支持jsp及标准taglib
		viewResolver.setViewClass(JstlView.class);
		//设置前后缀
		viewResolver.setPrefix("/WEB-INF/jsp/");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}
	
	/**
	 * 扫描实体类
	 */
	@Bean
	public LocalSessionFactoryBean sessionFactory(DataSource dataSource){
		LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
		//加载数据源
		factoryBean.setDataSource(dataSource);
		//自动扫描实体类
		factoryBean.setPackagesToScan("cn.qblank.entity");
		return factoryBean;
	}
	/**
	 * 配置数据源
	 * 依赖Environment
	 */
	@Bean
	public DataSource dataSource(Environment env){
		DriverManagerDataSource ds = new DriverManagerDataSource();
		ds.setDriverClassName(env.getProperty("jdbc.driverClass"));
		ds.setUrl(env.getProperty("jdbc.jdbcUrl"));
		ds.setUsername(env.getProperty("jdbc.user"));
		ds.setPassword(env.getProperty("jdbc.password"));
		return ds;
	}
	
	/**
	 * 创建事务类
	 * @param sessionFactory
	 * @return
	 */
	@Bean
	public PlatformTransactionManager transactionManager(SessionFactory sessionFactory){
		HibernateTransactionManager transactionManager = new HibernateTransactionManager();
		transactionManager.setSessionFactory(sessionFactory);
		return transactionManager;
	}
	/**
	 * bootstrap映射路径
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/assets/**").addResourceLocations("/public/");
	}
}

书写dao层接口

package cn.qblank.dao;

import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import cn.qblank.entity.Book;

public interface IBookDao {
	/**
	 * 查询所有
	 * @return
	 */
	List<Book> findAll();
	/**
	 * 添加图书
	 */
	void addBook(Book book);
	/**
	 * 修改图书
	 */
	void updateBook(Book book);
	
	/**
	 * 删除图书
	 */
	void deleteBook(Long id);
	
	/**
	 * 通过id查找
	 */
	Book findById(long id);
}

实现类BookDaoImpl

package cn.qblank.dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import cn.qblank.dao.IBookDao;
import cn.qblank.entity.Book;

@Repository
@Transactional
public class BookDaoImpl implements IBookDao{
	@Autowired
	private SessionFactory sessionFactory;
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Book> findAll() {
		return sessionFactory.getCurrentSession().createQuery("from Book").list();
	}

	@Override
	public void addBook(Book book) {
		Session session = sessionFactory.getCurrentSession();
		session.save(book);
	}

	@Override
	public void updateBook(Book book) {
		sessionFactory.getCurrentSession().update(book);
	}

	@Override
	public void deleteBook(Long id) {
		Session session = sessionFactory.getCurrentSession();
		//通过id查询到对象
		Book book = session.get(Book.class, id);
		session.delete(book);
	}

	@Override
	public Book findById(long id) {
		return sessionFactory.getCurrentSession().get(Book.class, id);
	}
	
}

同样的实现service层接口

package cn.qblank.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.qblank.dao.IBookDao;
import cn.qblank.entity.Book;
import cn.qblank.service.IBookService;

@Service
@Transactional
public class BookServiceImpl implements IBookService{
	@Autowired
	private IBookDao bookDao;

	@Override
	public List<Book> findAll() {
		return bookDao.findAll();
	}

	@Override
	public void addBook(Book book) {
		bookDao.addBook(book);
	}

	@Override
	public void updateBook(Book book) {
		System.out.println("service:" + book);
		bookDao.updateBook(book);
	}

	@Override
	public void deleteBook(Long id) {
		bookDao.deleteBook(id);
	}

	@Override
	public Book findById(Long id) {
		return bookDao.findById(id);
	}
	
}

书写控制类BookController

package cn.qblank.control;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import cn.qblank.entity.Book;
import cn.qblank.service.IBookService;


@Controller  //控制器注解
public class BookController {
	
	@Autowired
	private IBookService bookService;
	
	@RequestMapping(method = RequestMethod.POST, value = "/add")
	public String add(@ModelAttribute @Valid Book book,BindingResult bindingResult){
		//调用业务
		//添加图书
		bookService.addBook(book);
		if (bindingResult.hasErrors()) {
			return "add";
		}
		//跳转
		return "redirect:/list";
	}
	
	/**
	 * 展示图书列表
	 * @param model
	 * @return
	 */
	@RequestMapping(method = RequestMethod.GET, value = "/list")
	public String list(Model model){
		//调用service处理业务
		List<Book> books = bookService.findAll();
		//存入model中
		model.addAttribute("books", books);
		return "list";
	}
	
	/**
	 * 删除功能
	 * @param book
	 * @return
	 */
	@RequestMapping(value = "/delete")
	public String delete(@ModelAttribute Book book){
		bookService.deleteBook(book.getId());
		return "redirect:/list";
	}
	
	/**
	 * 跳转到修改页面
	 * @param model
	 * @param book
	 * @return
	 */
	@RequestMapping(value = "/update/{id}")
	public String update(@PathVariable long id,Model model){
		Book book = bookService.findById(id);
		
		System.out.println(book);
		model.addAttribute("book",book);
		return "update";
	}
	
	/**
	 * 跳转到主页
	 */
	@RequestMapping(value = "/updateJsp")
	public String updateJsp(Model model,@Valid Book book, BindingResult bindingResult){
//		if (bindingResult)
		book = bookService.findById(book.getId());
		//进行修改操作
		bookService.updateBook(book);
		return "redirect:/list";
	}
	/**
	 * 跳转到jsp页面
	 * @return
	 */
	@RequestMapping(method = RequestMethod.GET , value = "/addJsp")
	public String addJsp(@ModelAttribute @Valid Book book,BindingResult bindingResult){
		return "add";
	}
	
}

访问项目页面list.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"></c:set>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>图书列表</title>
<style type="text/css">
	table{
		text-align:center;
		margin: 0 auto;
	}
</style>
<link rel="stylesheet" href="${contextPath}/assets/bootstrap/css/bootstrap.css">
</head>
<body>
	<div class="container">
		<table border="1" class="table">
			<tr>
				<th>编号</th>
				<th>书名</th>
				<th>作者</th>
				<th>出版社</th>
				<th>简介</th>
				<th>类别</th>
				<th>出版日期</th>
				<th>操作</th>
			</tr>
			<!-- 书名 作者 出版社 出版年份 简介 类别 -->
			<c:forEach items="${books}" var="book" varStatus="b">
				<tr>
					<td>${book.id}</td>
					<td>${book.bookname}</td>
					<td>${book.author}</td>
					<td>${book.publishConpany}</td>
					<td>${book.info}</td>
					<td>${book.booktype}</td>
					<td>${book.publishDate}</td>
					<td><a href="${contextPath}/update/${book.id}">修改</a> <a href="${contextPath}/delete?id=${book.id}">删除</a></td>
				</tr>
			</c:forEach>
			<tr>
				<td colspan="8" align="center"><a href="${contextPath}/addJsp">【添加】</a></td>
			</tr>
		</table>
	</div>
</body>
</html>

add.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"></c:set>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>提交数据</title>
<link rel="stylesheet" href="${contextPath}/assets/css/form-validation.css">
<link rel="stylesheet" href="${contextPath}/assets/bootstrap/css/bootstrap.css">	
<style type="text/css">
	.form-error{
		color:red;
		margin-left:50px;
	}
</style>
</head>
<body>
	<h2>添加数据</h2>
	<div class="container">
		<form:form action="${contextPath}/add" method="POST" commandName="book" >
			<div class="form-group">
				<label for="exampleInputEmail1">书名</label>
				<form:input path="bookname" cssClass="form-control" /><br/>
				<form:errors path="bookname" cssClass="form-error"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">作者</label>
				<form:input path="author" cssClass="form-control" /><br/>
				<form:errors path="author" cssClass="form-error"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">出版社</label>
				<form:input path="publishConpany" cssClass="form-control" /><br/>
				<form:errors path="publishConpany" cssClass="form-error"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">出版年份</label>
				<form:input path="publishDate" cssClass="form-control" /><br/>
				<form:errors path="publishDate" cssClass="form-error"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">简介</label>
				<form:input path="info" cssClass="form-control" /><br/>
				<form:errors path="info" cssClass="form-error"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">类别</label>
				<form:input path="booktype" cssClass="form-control" /><br/>
				<form:errors path="booktype" cssClass="form-error"></form:errors>
			</div>
			<input type="submit" class="btn btn-primary" value="提交">
		</form:form>
	</div>
</body>
</html>

update.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>提交数据</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/assets/css/form-validation.css">
<link rel="stylesheet" href="${contextPath}/assets/bootstrap/css/bootstrap.css">		
</head>
<body>
	<div class="container">
			<form:form action="${pageContext.request.contextPath }/updateJsp"
			method="post" commandName="book">
			<div class="form-group">
				<label for="exampleInputEmail1">书名</label>
				<form:input path="bookname" cssClass="form-control" value="${book.bookname}"/>
				<form:errors path="bookname"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">作者</label>
				<form:input path="author" cssClass="form-control" value="${book.author}"/>
				<form:errors path="author"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">出版社</label>
				<form:input path="publishConpany" cssClass="form-control" value="${book.publishConpany}"/>
				<form:errors path="publishConpany"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">出版年份</label>
				<form:input path="publishDate" cssClass="form-control" value="${book.publishDate}"/>
				<form:errors path="publishDate"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">简介</label>
				<form:input path="info" cssClass="form-control" value="${book.info}"/>
				<form:errors path="info"></form:errors>
			</div>
			<div class="form-group">
				<label for="exampleInputEmail1">类别</label>
				<form:input path="booktype" cssClass="form-control" value="${book.booktype}"/>
				<form:errors path="booktype"></form:errors>
			</div>
			<input type="submit" class="btn btn-primary" value="提交">
		</form:form>
	</div>
	
</body>
</html>

各个页面的结果如下:




完整项目地址:

https://github.com/qblank/SSHPro02



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值