最近几天学习了一下spring boot,于是做了个demo 写的不好,仅供参考
Spring Boot
是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
特点:
多余的话就不说了,请参考spring boot官方中文文档:spring boot
首先可以通过spring boot在线生成demo:Spring Initializrable
将项目导入eclipse或者idea,接下来重头戏来了
第一步:POM配置
<?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>
<groupId>org.sang</groupId>
<artifactId>lg-eis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>lg-eis</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- thymeleaf -->
<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>
<!-- ojdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 添加对jsp视图解析的支持 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 只需引入spring-boot-devtools 即可实现热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- Json包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.16</version>
</dependency>
<!-- 为了监控数据库 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.25</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<!-- Junit 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency> -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>ali</id>
<name>ali Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
第二部:配置好application.properties
#Tomcat
server.port=8081
server.context-path=/lg-eis
server.tomcat.max-threads=800
server.session.timeout=10
server.tomcat.uri-encoding=UTF-8
#HTTP encoding
spring.http.encoding.charset = UTF-8
spring.http.encoding.enabled = true
spring.messages.encoding=UTF-8
#dataSource-MySQL
# 数据库访问配置
# 主数据源,默认的
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/lg-eis
spring.datasource.username= root
spring.datasource.password= 1234
spring.datasource.driverClassName = com.mysql.jdbc.Driver
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
#spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true
#spring security权限控制
#JPA Configuration:
spring.jpa.database=MYSQL
logging.level.org.hibernate.SQL=DEBUG
# Show or not log for each sql query
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto=update
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
#spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#视图
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false
#thymeleaf end
分别对应tomcat配置,数据源配置,jpa配置,以及spring boot推荐使用的thymeleaf
第三步:配置日志文件目录以及日志输出logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="./logs" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/runtime.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
下面开始配置javabean采用jpa
新建一个SysUser
package com.lgeis.common.entity;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.OrderBy;
import javax.persistence.Table;
/**
*
* @application name:
* @author: zhouxinlei
* @time:2018年6月22日
* @version:ver 1.1
*/
@Entity
@Table(name = "sys_user")
public class SysUser implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "user_id",length = 20)
private Long id;
@Column(name = "user_nm")
private String username;
@Column(name = "password")
private String password;
@Column(name = "display_nm")
private String displayNm;
@Column(name = "user_gender")
private int userGender;
@Column(name = "birth_day")
private String birthDay;
@Column(name = "phone")
private String phone;
@Column(name = "email")
private String email;
@Column(name = "wechat")
private String weChat;
@Column(name = "isdel")
private int isdel;
@Column(name = "updt_by")
private int updtBy;
@Column(name = "updt_ts")
private String updtTs;
@Column(name = "salt")
private String salt;//加密密码的盐
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "user_role",
joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "role_id") })
@OrderBy("role_id asc")
private Set<SysRole> roles = new HashSet<SysRole>();
@OneToOne(cascade=CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy="user")
private Attachment file;
public SysUser() {
super();
// TODO Auto-generated constructor stub
}
public SysUser(Long id, String username, String password, String displayNm, int userGender, String birthDay,
String phone, String email, String weChat, int isdel, int updtBy, String updtTs, String salt,
Set<SysRole> roles, Attachment file) {
super();
this.id = id;
this.username = username;
this.password = password;
this.displayNm = displayNm;
this.userGender = userGender;
this.birthDay = birthDay;
this.phone = phone;
this.email = email;
this.weChat = weChat;
this.isdel = isdel;
this.updtBy = updtBy;
this.updtTs = updtTs;
this.salt = salt;
this.roles = roles;
this.file = file;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDisplayNm() {
return displayNm;
}
public void setDisplayNm(String displayNm) {
this.displayNm = displayNm;
}
public int getUserGender() {
return userGender;
}
public void setUserGender(int userGender) {
this.userGender = userGender;
}
public String getBirthDay() {
return birthDay;
}
public void setBirthDay(String birthDay) {
this.birthDay = birthDay;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getWeChat() {
return weChat;
}
public void setWeChat(String weChat) {
this.weChat = weChat;
}
public int getIsdel() {
return isdel;
}
public void setIsdel(int isdel) {
this.isdel = isdel;
}
public int getUpdtBy() {
return updtBy;
}
public void setUpdtBy(int updtBy) {
this.updtBy = updtBy;
}
public String getUpdtTs() {
return updtTs;
}
public void setUpdtTs(String updtTs) {
this.updtTs = updtTs;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Set<SysRole> getRoles() {
return roles;
}
public void setRoles(Set<SysRole> roles) {
this.roles = roles;
}
public Attachment getFile() {
return file;
}
public void setFile(Attachment file) {
this.file = file;
}
/**
* 密码盐.
* @return
*/
public String getCredentialsSalt(){
return this.username+this.salt;
}
//重新对盐重新进行了定义,用户名+salt,这样就更加不容易被破解
}
下面写dao层,由于我封装了jpa,所以dao层可能有所不同
package com.lgeis.common.dao;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import com.lgeis.base.dao.common.BaseRepository;
import com.lgeis.common.entity.SysUser;
/**
*
* @Notes:用户管理
* @author: zhouxinlei
*
*/
@Repository
public interface SysUserDao extends BaseRepository<SysUser,Long>, JpaSpecificationExecutor<SysUser>{
SysUser findByUsername(String username);
SysUser findUserById(Long id);
}
service层
package com.lgeis.business.user.service;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.lgeis.common.entity.SysUser;
public interface ISysUserService {
public void deleteUser(Long Id);
public void saveUser(SysUser user);
public void updateUser(SysUser user);
public List<SysUser> findUserByName(String name);
public List<SysUser> findUserList();
public SysUser findUserInfo(Long Id);
public Page<SysUser> queryUserList(String userName,String isStop, Pageable pageable);
public SysUser findByUsername(String username);
}
serviceImpl层
package com.lgeis.business.user.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.lgeis.base.specification.SimpleSpecificationBuilder;
import com.lgeis.business.user.service.ISysUserService;
import com.lgeis.common.dao.SysUserDao;
import com.lgeis.common.entity.SysUser;
/**
*
* @application name:
* @author: zhouxinlei
* @time:2018年6月22日
* @version:ver 1.1
*/
@Service
public class SysUserServiceImpl implements ISysUserService{
@Resource
public SysUserDao userDao;
@Override
public List<SysUser> findUserByName(String name) {
@SuppressWarnings("unchecked")
List<SysUser> list = userDao.findAll(new SimpleSpecificationBuilder<Object>("name","=",name).generateSpecification());
return list;
}
@Override
public Page<SysUser> queryUserList(String userName,String isStop,Pageable pageable) {
SimpleSpecificationBuilder<Object> ssfb = new SimpleSpecificationBuilder<>();
if (userName!=null&&!"".equals(userName)) {
ssfb.add("displayNm", "=", userName);
}
if (isStop!=null&&!"".equals(isStop)) {
ssfb.add("isdel", "=", isStop);
}
Page<SysUser> list = userDao.findAll(ssfb.generateSpecification(),pageable);
return list;
}
@Override
public SysUser findUserInfo(Long Id) {
SysUser user = userDao.findUserById(Id);
return user;
}
@Override
public void deleteUser(Long Id) {
userDao.deleteById(Id);
}
@Override
public void saveUser(SysUser user) {
userDao.save(user);
}
@Override
public void updateUser(SysUser user) {
userDao.save(user);
}
@Override
public List<SysUser> findUserList() {
List<SysUser> list =userDao.findAll();
return list;
}
@Override
public SysUser findByUsername(String username) {
SysUser user = userDao.findByUsername(username);
return user;
}
}
controller层
package com.lgeis.business.user.controller;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.lgeis.business.file.controller.FileHanderUtil;
import com.lgeis.business.role.service.ISysRoleService;
import com.lgeis.business.user.service.ISysUserService;
import com.lgeis.common.entity.Attachment;
import com.lgeis.common.entity.SysUser;
import com.lgeis.common.utils.ControllerUtil;
import com.lgeis.common.utils.KeyUtil;
import com.lgeis.common.utils.PageTag;
import common.Util.String.StringUtilFomat;
/**
*
* @application name:
* @author: zhouxinlei
* @time:2018年6月22日
* @version:ver 1.1
*/
@Controller
public class UserController {
@Resource
private ISysUserService userInfo;
@Resource
private ISysRoleService roleService;
/**
* 分页查询用户
* @param response
* @param request
* @param pageable
* @return
* @throws Exception
*/
@RequestMapping(value ="/queryUserInfoList",method = RequestMethod.GET)
public String queryUserInfoList(HttpServletResponse response, HttpServletRequest request,Pageable pageable) throws Exception {
int pageNum = 0;
String currentNum = request.getParameter("currentNum");
String displayNm = request.getParameter("displayNm");
String isdel = request.getParameter("isdel");
if (currentNum!=null&&!"".equals(currentNum)) {
pageNum=Integer.valueOf(currentNum);
}
pageable = new PageRequest(pageNum,10, Sort.Direction.ASC,"id");
Page<SysUser> list = userInfo.queryUserList(displayNm,isdel,pageable);
PageTag<SysUser> page = new PageTag<SysUser>(list, "/queryUserInfoList");
request.setAttribute("userInfoList", page.getContent());
request.setAttribute("page",page);
request.setAttribute("displayNm", displayNm);
request.setAttribute("isdel", isdel);
return "user/userlist";
}
/**
* 查看用户信息
* @param response
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value ="/viewUserInfo",method = RequestMethod.GET)
public String viewUserInfo(HttpServletResponse response, HttpServletRequest request) throws Exception {
String userId= request.getParameter("userId");
Long id =null;
SysUser user =null;
if (userId!=null&&!"".equals(userId)) {
id = Long.valueOf(userId);
}
user = userInfo.findUserInfo(id);
request.setAttribute("user", user);
return "user/userview";
}
/**
* 更新用户转发
* @param response
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value ="/updataUserForworrd",method = RequestMethod.GET)
public String updataUserForworrd(HttpServletResponse response, HttpServletRequest request) throws Exception {
String userId= request.getParameter("userId");
Long id =null;
SysUser user =null;
if (userId!=null&&!"".equals(userId)) {
id = Long.valueOf(userId);
}
user = userInfo.findUserInfo(id);
request.setAttribute("user", user);
return "user/userupdate";
}
/**
* 新增用户转发
* @param response
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value ="/addUserForworrd")
public String addUserForworrd(HttpServletResponse response, HttpServletRequest request) throws Exception {
return "user/useradd";
}
/**
* 删除用户
* @param response
* @param request
* @throws Exception
*/
@RequestMapping(value ="/deleteUser",produces="application/json;charset=UTF-8")
@ResponseBody
public void deleteUser(HttpServletResponse response, HttpServletRequest request) throws Exception {
String userId= request.getParameter("userId");
String jsonData="";
try {
Long id =null;
if (userId!=null&&!"".equals(userId)) {
id = Long.valueOf(userId);
}
userInfo.deleteUser(id);
jsonData="{\"msgkey\":\"success\",\"msgData\":\"删除用户成功!\"}";
} catch (Exception e) {
e.printStackTrace();
jsonData="{\"msgkey\":\"error\",\"msgData\":\"删除用户失败!\"}";
}
ControllerUtil.writejsonAndSession(response,request,jsonData);
}
/**
* 保存用户信息
* @param response
* @param request
* @throws Exception
*/
@RequestMapping(value ="/saveUser",produces="application/json;charset=UTF-8")
@ResponseBody
public void saveUser(HttpServletResponse response, HttpServletRequest request) throws Exception {
String jsonData="";
String userNm= request.getParameter("usernameAdd");
String displayNm= request.getParameter("displayNmAdd");
String password= request.getParameter("password");
String birthDay= request.getParameter("birthDay");
String phone= request.getParameter("phone");
String weChat= request.getParameter("weChat");
String email= request.getParameter("email");
String userGender= request.getParameter("addUserGender");
String isdel= request.getParameter("addIsdel");
try {
SysUser user = new SysUser();
user.setId(KeyUtil.GeneratedValue());
user.setUsername(userNm);
user.setDisplayNm(displayNm);
user.setPassword(password);
user.setBirthDay(birthDay);
user.setPhone(phone);
user.setWeChat(weChat);
user.setEmail(email);
user.setUserGender(Integer.valueOf(userGender));
user.setIsdel(Integer.valueOf(isdel));
user.setUpdtBy(0);
user.setUpdtTs(StringUtilFomat.dateToString(new Date(), StringUtilFomat.dateFormat_yyyy_MM_dd_HH_MM_SS));
/*Attachment attachment = FileHanderUtil.uploadFile(file, request);
user.setFile(attachment);*/
userInfo.saveUser(user);
jsonData="{\"msgkey\":\"success\",\"msgData\":\"新增用户成功!\"}";
} catch (Exception e) {
e.printStackTrace();
jsonData="{\"msgkey\":\"error\",\"msgData\":\"新增用户失败!\"}";
}
ControllerUtil.writejsonAndSession(response,request,jsonData);
}
@RequestMapping(value ="/updateUser",produces="application/json;charset=UTF-8")
@ResponseBody
public void updateUser(HttpServletResponse response, HttpServletRequest request) throws Exception {
String jsonData="";
String userId= request.getParameter("userId");
String userNm= request.getParameter("updateUsername");
String displayNm= request.getParameter("updateDisplayNm");
String password= request.getParameter("updatePassword");
String birthDay= request.getParameter("updateBirthDay");
String phone= request.getParameter("updatePhone");
String weChat= request.getParameter("updateWeChat");
String email= request.getParameter("updateEmail");
String userGender= request.getParameter("updateUserGender");
String isdel= request.getParameter("updateIsdel");
try {
SysUser user = new SysUser();
if (userId!=null&&!"".equals(userId)) {
user.setId(Long.valueOf(userId));
}
user.setUsername(userNm);
user.setDisplayNm(displayNm);
user.setPassword(password);
user.setBirthDay(birthDay);
user.setPhone(phone);
user.setWeChat(weChat);
user.setEmail(email);
user.setUserGender(Integer.valueOf(userGender));
user.setIsdel(Integer.valueOf(isdel));
user.setUpdtBy(0);
user.setUpdtTs(StringUtilFomat.dateToString(new Date(), StringUtilFomat.dateFormat_yyyy_MM_dd_HH_MM_SS));
userInfo.updateUser(user);
jsonData="{\"msgkey\":\"success\",\"msgData\":\"修改用户成功!\"}";
} catch (Exception e) {
e.printStackTrace();
jsonData="{\"msgkey\":\"error\",\"msgData\":\"修改用户失败!\"}";
}
ControllerUtil.writejsonAndSession(response,request,jsonData);
}
/**
* 查询所有用户
* @param response
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value ="/queryUserList",method = RequestMethod.GET)
public String queryUserList(HttpServletResponse response, HttpServletRequest request) throws Exception {
String roleId = request.getParameter("roleId");
List<SysUser> list = userInfo.findUserList();
request.setAttribute("roleId", roleId);
request.setAttribute("userList", list);
return "role/usermodal";
}
}
下面开始新建页面 userlist.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>用户列表</title>
<!-- 导航菜单样式 -->
<link rel="stylesheet" href="css/simple-line-icons/css/simple-line-icons.css">
<link rel="stylesheet" href="css/mdi/css/materialdesignicons.css">
<link rel="stylesheet" href="css/icheck/skins/all.css" />
<link rel="stylesheet" href="css/style.css">
<!-- jQuery -->
<script src="jquery/jquery.min.js"></script>
<script type="text/javascript" src="jquery/jquery-1.11.2.min.js"></script>
<script type="text/javascript" src="jquery/jquery.form.js"></script>
<!-- bootStrap -->
<script src="BootstrapEx/popper.min.js"></script>
<script src="bootstrap/bootstrap.min.js"></script>
<script src="js/sidebar-icon.js"></script>
<!-- Ajax -->
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />
<script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="extjs/ext-all.js"></script>
<!-- 模态框 -->
<link rel="stylesheet" href="css/newapprove.css" />
<link rel="stylesheet" href="css/formodal.css" />
<link rel="stylesheet" href="css/cxq.css" />
<link rel="stylesheet" href="css/outside.css" />
<script type="text/javascript" src="BootstrapEx/js/bootstrapEx.js"></script>
<!-- 业务代码js文件-->
<script src="businessJs/common.js"></script>
<script src="businessJs/user.js"></script>
</head>
<body>
<div id="body" class="container-scroller">
<!-- top -->
<nav
class="navbar navbar-primary col-lg-12 col-12 fixed-top d-flex flex-row"
th:replace="sys/top.html"></nav>
<div class="container-fluid page-body-wapper">
<div class="row row-offcanvas row-offcanvas-right">
<!--left -->
<nav class="sidebar sidebar-fixed sidebar-offcanvas" id="sidebar"
th:replace="sys/left.html"></nav>
<!--body -->
<div class="content-wrapper">
<ul class="nav nav-tabs" id="Demo-tab1" role="tablist">
<li class="nav-item"><a class="nav-link" href="/index">Home</a>
</li>
<li class="nav-item"><a class="nav-link active"
href="/queryUserInfoList">用户信息列表</a></li>
</ul>
<div id="page-inner">
<div class="row">
<div class="col-md-12">
<div class="card">
<div style="margin-top: 20px;margin-bottom: 20px;margin-left: 40px;">
<button class="btn btn-outline-success btn-sm" οnclick="saveUserForward();">新增用户</button>
<button class="btn btn-outline-primary btn-sm" οnclick="queryTermExpand();">查询用户</button>
</div>
<div id="queryTerm" style="display: none;width: auto;">
<form action="/queryUserInfoList" method="get">
<div class="card-content">
<table style="border: 1px solid #DDDDDD;">
<tr>
<td width="20%">
<div style="margin-left: 60px; margin-top: 10px;">
<p style="margin-top: 10px;">
<label>姓名</label>
<input style="margin-left: 50px; margin-top: -37px; width: 75%;height: 35px" name="displayNm" id="displayNm" th:value="${displayNm}" class="form-control" type="text"/>
</p>
</div>
</td>
<td> </td>
<td>
<div style="margin-left: 60px; margin-top: 20px;">
<p style="margin-top: 10px;">
<label>用户状态:</label> <select name="isdel">
<option value="">请选择</option>
<option th:selected="${isdel}==0" value="0">正常</option>
<option th:selected="${isdel}==1" value="1">停用</option>
</select>
</p>
</div>
</td>
<td>
<div class="col"
style="margin-top: 10px; margin-right: -50px; margin-bottom: 10px;">
<ul class="tabs">
<li>
<button class="btn btn-outline-primary btn-sm" type="submit">确定</button>
</li>
</ul>
<ul class="tabs" style="margin-top: 5px;">
<li>
<button class="btn btn-outline-primary btn-sm" type="reset">重置</button>
</li>
</ul>
</div>
</td>
</tr>
</table>
</div>
</form>
</div>
<div class="card-content">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover"
id="dataTables-example">
<thead>
<tr>
<th width="10%" class="center">用户ID</th>
<th width="10%" class="center">用户名</th>
<th width="8%" class="center">英文名</th>
<th width="5%" class="center">性别</th>
<th width="10%" class="center">手机号</th>
<th width="10%" class="center">birthDay</th>
<th width="5%" class="center">用户状态</th>
<th width="12%" class="center">操作</th>
</tr>
</thead>
<tbody>
<tr id="table" class="odd gradeX"
th:each="user : ${userInfoList}">
<th scope="row" th:text="${user.id}"></th>
<td class="center" th:text="${user.displayNm}"></td>
<td class="center" th:text="${user.username}"></td>
<td class="center" th:if="${user.userGender}==0" th:text="男"></td>
<td class="center" th:if="${user.userGender}==1" th:text="女"></td>
<td class="center" th:text="${user.phone}"></td>
<td class="center" th:text="${user.birthDay}"></td>
<td class="center" th:if="${user.isdel}==0" th:text="正常"></td>
<td class="center" th:if="${user.isdel}==1" th:text="停用"></td>
<td class="center">
<button id="btn_view" class="btn btn-outline-primary btn-sm"
th:id="${user.id}" οnclick="viewUserInfo(this);" type="button" data-dismiss="modal" aria-hidden="true">查看</button>
<button class="btn btn-outline-success btn-sm" th:id="${user.id}" οnclick="updateUserForward(this);">修改</button>
<button class="btn btn-outline-danger btn-sm" th:id="${user.id}" οnclick="deleteUser(this);">删除</button>
</td>
</tr>
</tbody>
</table>
<div th:replace="page/PageTag.html"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content-wrapper ends -->
<!-- partial:partials/_footer.html -->
<footer class="footer">
<div class="container-fluid clearfix">
<span class="float-right"> <a href="#">Admin</a>© 2018
</span>
</div>
</footer>
</div>
</div>
</div>
<input type="hidden" id="contextPath" name="contextPath" th:value="${contextPath}">
</body>
</html>
基本一个流程就结束了,目前做了用户管理,角色管理,角色用户配置,权限管理,角色权限配置
我只是截取了部分demo的代码,完整可参照我GitHub上的项目demo
,写的不怎么好,欢迎大家来指导和指正
下面附上demo画面展示
下面附上GitHu源码地址:spring boot demo
后面我会慢慢的改进