使用工具intelliJ IDEA JDK 1.8
项目结构
一.配置文件
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
<!-- 新建项目的描述信息 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<!-- 父项目
Spring Boot的版本仲裁中心。
以后导入依赖默认不需要写版本号。
没有在dependencies里管理的依赖除外,需要声明版本号。
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- 启动器
Spring boot将所有的功能场景都抽取出来,做成了一个个的starter(启动器),
只需要在项目里引入这些starter,相关场景的所有依赖都会导入进来。
spring-boot-starter:spring boot场景启动器
web:自动导入web模块正常运行所依赖的组件
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 该插件可以将应用打包成一个可执行的jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml
server:
port: 8080
spring:
# mvc:
# view:
# prefix: /WEB-INF/jsp/
# suffix: .jsp
thymeleaf:
cache: false
prefix: classpath:/templates
suffix: .jsp
encoding: UTF-8
mode: LEGACYHTML5
content-type: text/html
datasource:
name: mysql_test
type: com.alibaba.druid.pool.DruidDataSource
druid:
filters: stat
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: sasa
initial-size: 1
min-idle: 1
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.model
#pagehelper
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
debug: true
二.控制层 TestController
package com.example.demo.controller;
import com.example.demo.model.UserDomain;
import com.example.demo.service.UserService;
import com.example.demo.service.impl.UserTserService;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping(value = "/test")
public class TestController {
@Resource
private UserTserService userTsetService;
@RequestMapping("/index")
public String index() {
return "/INDEX";
}
@RequestMapping("/addUser")
public String addUser(UserDomain user) {
System.out.println(user.getUserName());
userTsetService.addUser(user);
return "/findAll";
}
/*
@RequestMapping("/findUser")
public String findUser() {
return "/INDEX";
}*/
/**
*
* @return
*/
@RequestMapping("/updatUser")
public String updatUser(@ModelAttribute(value="userDomain") UserDomain userDomain, ModelMap map) {
userTsetService.updateUser(userDomain);
System.out.println(userDomain.getUserName()+""+userDomain.getPassword()+"//"+userDomain.getUserId());
return findAllUser(map);
}
@RequestMapping("/update")
public String update(ModelMap map,String userId) {
UserDomain user = userTsetService.findUser(Integer.parseInt(userId));
map.addAttribute("userDomain", user);
return "/update";
}
@RequestMapping("/delUser")
public String delUser(String userId,ModelMap map) {
userTsetService.delUser(Integer.parseInt(userId));
return findAllUser(map);
}
@RequestMapping("/user")
public String findusers(Model model){
List<UserDomain> UserList = userTsetService.findAllUser();
model.addAttribute("users", UserList);
return "/findAll";
}
@RequestMapping("/switch")
public String switchcase(ModelMap map) {
map.addAttribute("sex", "man");
return "/findAll";
}
@RequestMapping("/findAllUser")
public String findAllUser(ModelMap map) {
List<UserDomain> UserList = userTsetService.findAllUser();
System.out.println(UserList.size());
map.addAttribute("sex", "*");
map.addAttribute("time", "fffff");
map.addAttribute("userlist", UserList);
return "/findAll";
}
@RequestMapping("/tiao")
public String tiao( @RequestParam(value = "tiao", required = false)String name ,ModelMap map){
if ("add".equals(name)) {
return "/add";
}else if("findAll".equals(name)){
return findAllUser(map);
}else {
return "/index";
}
}
}
三.前端页面
add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>添加用户</h1>
<form action="/test/addUser">
<div>
<label>姓名:</label><input type="text" name="userName">
</div>
<div>
<label>密码:</label><input type="text" name="password">
</div>
<div>
<label>电话:</label><input type="text" name="phone">
</div>
<button>添加</button>
</form>
</body>
</html>
findAll.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${time}">Hello World</h1>
<a href="/test/tiao?tiao=add">添加</a>
<div th:switch="${sex}">
<p th:case="'woman'">她是一个姑娘...</p>
<p th:case="'man'">这是一个爷们!</p>
<!-- *: case的默认的选项 -->
<p th:case="*">yc未知性别的一个家伙。</p>
</div>
<table border="1">
<tr>
<td>id</td>
<td>name</td>
<td>phone</td>
<td>no</td>
</tr>
<tr th:each="user,iterStat : ${userlist}">
<td th:text="${user.userId}">neo</td>
<td th:text="${user.userName}">6</td>
<td th:text="${user.phone}">213</td>
<td th:text="${iterStat.index}">index</td>
<td><a th:href=@{/test/update?(userId=${user.userId})}>修改</a></td>
<td><a th:href=@{/test/delUser?(userId=${user.userId})}>删除</a></td>
</tr>
</table>
</body>
</html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>好久不见</h1>
<a href="/test/tiao?tiao=add">添加</a>
<a href="/test/tiao?tiao=findAll">列表</a>
</body>
</html>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>修改用户</h1>
<form action="#" th:action="@{/test/updatUser}" th:object="${userDomain}" method="post">
<input type="text" name="userId" th:value="*{userId}"/>
<div>
<label>姓名:</label><input type="text" name="userName" th:value="*{userName}"/>
</div>
<div>
<label>密码:</label><input type="text" name="password" th:value="*{password}"/>
</div>
<div>
<label>电话:</label><input type="text" name="phone" th:value="*{phone}"/>
</div>
<button>修改</button>
</form>
</body>
</html>
四.业务层
UserTestService 接口
package com.example.demo.service;
import com.example.demo.model.UserDomain;
import java.util.List;
public interface UserTestService {
/**
* 添加用户
* @param user
*/
public void addUser(UserDomain user);
/**
* 根据id查询用户
* @param id
* @return UserDomain
*/
public UserDomain findUser(int id);
/**
* 修改用户
* @param user
*/
public void updateUser(UserDomain user);
/**
* 删除用户
* @param id
*/
public void delUser(int id);
/**
* 查询所有用户
* @return List<UserDomain>
*/
public List<UserDomain> findAllUser();
}
UserTserServiceImpl 实现类
package com.example.demo.service.impl;
import com.example.demo.dao.UserTestDao;
import com.example.demo.model.UserDomain;
import com.example.demo.service.UserTestService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service(value = "userTsetService")
public class UserTserServiceImpl implements UserTestService {
@Resource
private UserTestDao userTestDao;
@Override
public void addUser(UserDomain user) {
userTestDao.addUser(user);
}
@Override
public UserDomain findUser(int id) {
UserDomain user = userTestDao.findUser(id);
return user;
}
@Override
public void updateUser(UserDomain user) {
userTestDao.updateUser(user);
}
@Override
public void delUser(int id) {
userTestDao.delUser(id);
}
@Override
public List<UserDomain> findAllUser() {
List<UserDomain> allUser = userTestDao.findAllUser();
return allUser;
}
}
五.dao 层
UserTestDao
package com.example.demo.dao;
import com.example.demo.model.UserDomain;
import java.util.List;
public interface UserTestDao {
/**
* 添加用户
* @param user
*/
public void addUser(UserDomain user);
/**
* 根据id查询用户
* @param id
* @return UserDomain
*/
public UserDomain findUser(int id);
/**
* 修改用户
* @param user
*/
public void updateUser(UserDomain user);
/**
* 删除用户
* @param id
*/
public void delUser(int id);
/**
* 查询所有用户
* @return List<UserDomain>
*/
public List<UserDomain> findAllUser();
}
映射文件 UserTestMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.UserTestDao" >
<sql id="BASE_TABLE">
UserDomain
</sql>
<sql id="BASE_COLUMN">
userId,userName,password,phone
</sql>
<insert id="addUser" parameterType="com.example.demo.model.UserDomain">
INSERT INTO
<include refid="BASE_TABLE"/>
<trim prefix="(" suffix=")" suffixOverrides=",">
userName,password,
<if test="phone != null">
phone,
</if>
</trim>
<trim prefix="VALUES(" suffix=")" suffixOverrides=",">
#{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR},
<if test="phone != null">
#{phone, jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="findAllUser" resultType="com.example.demo.model.UserDomain">
SELECT
<include refid="BASE_COLUMN"/>
FROM
<include refid="BASE_TABLE"/>
</select>
<select id="findUser" resultType="com.example.demo.model.UserDomain" parameterType="int">
SELECT
<include refid="BASE_COLUMN"/>
FROM
<include refid="BASE_TABLE"/>
WHERE
userId=#{id}
</select>
<update id="updateUser" parameterType="com.example.demo.model.UserDomain">
UPDATE
<include refid="BASE_TABLE"/>
SET
userName=#{userName},password=#{password},phone=#{phone}
WHERE
userId=#{userId}
</update>
<delete id="delUser" parameterType="int">
DELETE FROM userdomain WHERE userId=#{id}
</delete>
</mapper>
六.sql语句
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `test`;
/*Table structure for table `userdomain` */
DROP TABLE IF EXISTS `userdomain`;
CREATE TABLE `userdomain` (
`userId` INT(4) NOT NULL AUTO_INCREMENT,
`userName` VARCHAR(20) NOT NULL,
`password` VARCHAR(20) NOT NULL,
`phone` VARCHAR(11) NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=INNODB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
/*Data for the table `userdomain` */
INSERT INTO `userdomain`(`userId`,`userName`,`password`,`phone`) VALUES (1,'杨灿','123456','18175979975'),(2,'小芳','123456','18175979976'),(3,'小杨','123456','18175979977'),(4,'小刚','123','18175979978'),(5,'灰太狼','123456','18175979979'),(6,'喜羊羊','123456','18175979974'),(7,'亚索','123456','15498799956');
发布项目后访问http://localhost:8080/test/findAllUser