文章目录
1.项目需求与说明
业务需求与2019-8-10 [Java_SpringMVC]10.SSS 框架整合开发分析 研讨版 SpringBoot
里开头所写需求是一致的
特别说明:
本文不再对于注解和基础才做出解释,直接上代码
2.文件目录
3.maven核心配置文件 porm.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hnxy</groupId>
<artifactId>sss</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- springboot父级项目,使用它可以直接锁定引入jar包的版本解决版本冲突 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<!-- springBoot核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- springBoot热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- WEB支持主要包括springMVC 和 tomcat插件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jsp相关 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- JSTL相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- spring data -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<!-- mysqljar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
</dependencies>
<!-- 加载springBoot的maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
4. entity层的Account.java
package com.hnxy.entity;
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 = "account")
public class Account {
@Id
@Column(name="a_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "a_name")
private String name;
@Column(name="a_money")
private Double money;
@Column(name="a_createdate")
private Date createdate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public Date getCreatedate() {
return createdate;
}
public void setCreatedate(Date createdate) {
this.createdate = createdate;
}
@Override
public String toString() {
return "Account [id=" + id + ", name=" + name + ", money=" + money + ", createdate=" + createdate + "]";
}
}
5. Dao层的AccountDao.java
package com.hnxy.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.hnxy.entity.Account;
public interface AccountDao extends JpaRepository<Account, Integer> {
}
6.Service层的AccountService.java
package com.hnxy.service;
import java.util.Map;
import com.hnxy.entity.Account;
public interface AccountService {
//新增和修改
public void saveOrUpdate(Account account);
public void delete(Account account);
public Account findAccountById(Integer id);
public Map<String,Object> findAccountsByPage(Integer pageIndex,Integer pageSize);
}
7.Service.impl层的AccountServiceImpl
package com.hnxy.service.impl;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.stereotype.Service;
import com.hnxy.dao.AccountDao;
import com.hnxy.entity.Account;
import com.hnxy.service.AccountService;
@Service
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
@Override
public void saveOrUpdate(Account account) {
accountDao.save(account);
}
@Override
public void delete(Account account) {
accountDao.delete(account);
}
@Override
public Account findAccountById(Integer id) {
return accountDao.getOne(id);
}
@Override
public Map<String, Object> findAccountsByPage(Integer pageIndex, Integer pageSize) {
Map<String,Object> map = new HashMap<String, Object>();
//创建Order对象,指定排序规则(升序 或 降序),参数2,指定排序的字段名称
Order order = new Order(Direction.DESC, "id");
//创建Sort对象
Sort sort = Sort.by(order);
//page:从0开始的页码,自定义的pageIndex是从1开始
//size:每页的记录数
//sort:根据某个字段进行排序查询
Pageable pageable = PageRequest.of(pageIndex-1, pageSize, sort);
//分页查询
Page<Account> page = accountDao.findAll(pageable);
map.put("pageIndex", pageIndex);
map.put("pageSize",pageSize);
map.put("totalCount",accountDao.count());
map.put("totalPage", page.getTotalPages());//总页数
map.put("accounts",page.getContent());//每页显示的数据
return map;
}
}
8.web层
8.1 DefaultAction.java
package com.hnxy.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DefaultAction {
@RequestMapping("/")
public String home() {
return "forward:index.jsp";
}
}
8.2 AccountViewAction.java
package com.hnxy.web;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.hnxy.entity.Account;
import com.hnxy.service.AccountService;
@Controller
public class AccountViewAction {
@Autowired
private AccountService as;
@RequestMapping("findAccountsByPage")
public ModelAndView findAccountsByPage(
@RequestParam(name = "pageIndex", required = false, defaultValue = "1") Integer pageIndex) {
int pageSize = 10;
ModelAndView mv = new ModelAndView();
Map<String, Object> map = as.findAccountsByPage(pageIndex, pageSize);
mv.addObject("map", map);
mv.setViewName("forward:/list.jsp");
return mv;
}
@RequestMapping("findAccountById")
public ModelAndView findAccountById(Integer id) {
Account account = as.findAccountById(id);
System.out.println(account);
ModelAndView mv = new ModelAndView() ;
mv.addObject("account", account);
mv.setViewName("forward:/update.jsp");
return mv;
}
}
8.3 AccountOperateAction.java
package com.hnxy.web;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import com.hnxy.entity.Account;
import com.hnxy.service.AccountService;
@Controller
public class AccountOperateAction {
@Autowired
private AccountService as;
//处理新增和修改的请求
@RequestMapping("saveOrUpdate")
public String saveOrUpdate(Account account) {
as.saveOrUpdate(account);
return "redirect:findAccountsByPage";
}
@RequestMapping("deleteAccount")
public String deleteAccount(Account account) {
as.delete(account);
return "redirect:findAccountsByPage";
}
@InitBinder
public void dateBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
}
9.resources层的SpringBoot的核心 application.properties
# Spring Data DataSource
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql:///springdb?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.filters = stat,wall,logback
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
spring.datasource.useGlobalDataSourceStat=true
# Spring Data Hibernate
spring.jpa.show-sql = true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans = true
# tomcat config
server.port=8080
server.tomcat.uri-encoding=UTF-8
# project name
server.servlet.context-path=/sss
# spring HD
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths= src/main/java
10.webapp层
10.1 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="findAccountsByPage">查询账户信息</a><br>
<a href="add.jsp">新增账户信息</a>
</body>
</html>
10.2 list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function goPage(pageIndex){
location.href="findAccountsByPage?pageIndex="+pageIndex;
}
function goDelete(id){
var flag = confirm("请确认是否删除?");
if(flag){
location.href="deleteAccount?id=" +id;
}
}
function goUpdate(id){
location.href="findAccountById?id=" +id;
}
</script>
</head>
<body>
<table align="center" width="50%">
<tr>
<td colspan="5">总共有${map.totalCount }条记录,每页显示${map.pageSize }条记录,总共分${map.totalPage }页,当前是第${map.pageIndex }页
</td>
</tr>
</table>
<table border="1" align="center" width="50%">
<tr>
<th>编号</th>
<th>姓名</th>
<th>余额</th>
<th>创建日期</th>
<th>操作</th>
</tr>
<c:forEach items="${map.accounts }" var="a" varStatus="vs">
<tr>
<td>${vs.count }</td>
<td>${a.name }</td>
<td>${a.money }</td>
<td>${a.createdate }</td>
<td>
<a href="javascript:goDelete(${a.id })">删除</a>
||
<a href="javascript:goUpdate(${a.id })">修改</a>
</td>
</tr>
</c:forEach>
<tr >
<td colspan="5" align="center">
<c:if test="${map.pageIndex>1 }">
<a href="javascript:goPage(1)">首页</a>
<a href="javascript:goPage(${map.pageIndex-1 })">上一页</a>
</c:if>
<c:forEach begin="1" end="${map.totalPage }" var="i">
<a href="javascript:goPage(${i })">${i }</a>
</c:forEach>
<c:if test="${map.pageIndex<map.totalPage }">
<a href="javascript:goPage(${map.pageIndex+1 })">下一页</a>
<a href="javascript:goPage(${map.totalPage })">尾页</a>
</c:if></td>
</tr>
</table>
</body>
</html>
10.3 add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="saveOrUpdate" method="post">
姓名:<input type="text" name="name"><br>
余额:<input type="number" name="money"><br>
创建日期:<input type="date" name="createdate"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
10.4 update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="saveOrUpdate" method="post">
<input type="hidden" name="id" value="${account.id }">
姓名:<input type="text" name="name" value="${account.name }"><br>
余额:<input type="number" name="money" value="${account.money }"><br>
创建日期:<input type="date" name="createdate" value='<fmt:formatDate value="${account.createdate }" pattern="yyyy-MM-dd"/>' ><br>
<input type="submit" value="提交">
</form>
</body>
</html>
11. hnxy层的SpringCoreApp.java
package com.hnxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableAutoConfiguration
@SpringBootApplication
public class SpringCoreApp {
public static void main(String[] args) {
SpringApplication.run(SpringCoreApp.class, args);
}
}
12.开启SpringBoot
成功