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

来源:互联网 发布:怎么避免淘宝找相似 编辑:程序博客网 时间:2024/06/07 07:27

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



结构如下:



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

jdbc.user=rootjdbc.password=aini1314jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql:///springmvc

以及hibernate所需配置hibernate.properties

hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.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@EnableWebMvcpublic class AppConfig extends WebMvcConfigurerAdapter{/** * 负责将控制器方法返回的字符串映射到某个JSP */@Beanpublic ViewResolver viewResolver(){//创建对象InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();// 支持jsp及标准taglibviewResolver.setViewClass(JstlView.class);//设置前后缀viewResolver.setPrefix("/WEB-INF/jsp/");viewResolver.setSuffix(".jsp");return viewResolver;}/** * 扫描实体类 */@Beanpublic LocalSessionFactoryBean sessionFactory(DataSource dataSource){LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();//加载数据源factoryBean.setDataSource(dataSource);//自动扫描实体类factoryBean.setPackagesToScan("cn.qblank.entity");return factoryBean;}/** * 配置数据源 * 依赖Environment */@Beanpublic 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 */@Beanpublic PlatformTransactionManager transactionManager(SessionFactory sessionFactory){HibernateTransactionManager transactionManager = new HibernateTransactionManager();transactionManager.setSessionFactory(sessionFactory);return transactionManager;}/** * bootstrap映射路径 */@Overridepublic 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@Transactionalpublic class BookDaoImpl implements IBookDao{@Autowiredprivate SessionFactory sessionFactory;@SuppressWarnings("unchecked")@Overridepublic List<Book> findAll() {return sessionFactory.getCurrentSession().createQuery("from Book").list();}@Overridepublic void addBook(Book book) {Session session = sessionFactory.getCurrentSession();session.save(book);}@Overridepublic void updateBook(Book book) {sessionFactory.getCurrentSession().update(book);}@Overridepublic void deleteBook(Long id) {Session session = sessionFactory.getCurrentSession();//通过id查询到对象Book book = session.get(Book.class, id);session.delete(book);}@Overridepublic 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@Transactionalpublic class BookServiceImpl implements IBookService{@Autowiredprivate IBookDao bookDao;@Overridepublic List<Book> findAll() {return bookDao.findAll();}@Overridepublic void addBook(Book book) {bookDao.addBook(book);}@Overridepublic void updateBook(Book book) {System.out.println("service:" + book);bookDao.updateBook(book);}@Overridepublic void deleteBook(Long id) {bookDao.deleteBook(id);}@Overridepublic 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 {@Autowiredprivate 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