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>
<groupId>cn.kgc</groupId>
<artifactId>springmvc</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringMvcDemo Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- ********************** Mysql JDBC驱动 ********************** -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!--***********************Lombok 插件***************-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</dependency>
<!-- ********************** Mybatis依赖 ********************** -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!--mybatis出品,和spring的整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<!--log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!--spring jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<!--aop切面-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!--dbcp数据源-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.6.0</version>
</dependency>
<!--HikariCP数据源-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.26</version>
</dependency>
<!--Druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>
<!--fastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
</dependencies>
<build>
<finalName>SpringMvcDemo</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
applicationContext-mybatis.xml(扫描注解所在的包,管理been)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!--<context:annotation-config />-->
<context:component-scan base-package="cn.smbms.service,cn.smbms.pojo,cn.smbms.dao"/>
<!--<context:component-scan base-package="cn.kgc.interceptor"/>-->
<!--属性配置文件配置数据源-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties"/>
</bean>
<!--阿里巴巴Druid数据源-->
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<!-- 基本属性 url、user、password -->
<property name="url" value="${url}"/>
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${initialSize}" />
<property name="minIdle" value="${minIdle}" />
<property name="maxActive" value="${maxActive}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 引用mybatis配置文件 -->
<!--<property name="configLocation"-->
<!--value="classpath:mybatis-config.xml"></property>-->
<!--给pojo取别名-->
<property name="typeAliasesPackage" value="cn.smbms.pojo"></property>
<property name="mapperLocations" value="classpath:mappers/**.xml"/>
</bean>
<!-- 配置Dao的实现 ,扫描basePackage中的接口类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name="basePackage" value="cn.smbms.dao"></property>
</bean>
<!--定义事务管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username=root
password=123456
minIdle=30
maxActive=50
initialSize=1
log4j.properties
log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.kgc.dao=debug
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
######################################################################################
# Console Appender \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
######################################################################################
# DailyRolling File \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
log4j.logger.com.opensymphony.xwork2=error
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="cn.smbms.pojo"/>
</typeAliases>
</configuration>
springmvc-servlet.xml(扫描controller)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<context:component-scan base-package="cn.smbms.controller"/>
<!--拦截器配置-->
<!--<mvc:interceptors>-->
<!--<mvc:interceptor>-->
<!--<!– 进行拦截:/**表示拦截所有controller –>-->
<!--<mvc:mapping path="/**" />-->
<!--<mvc:exclude-mapping path="/login"/>-->
<!--<mvc:exclude-mapping path="/doLogin"/>-->
<!--<mvc:exclude-mapping path="/statics/**"/>-->
<!--<bean class="cn.kgc.interceptor.UserInterceptor"/>-->
<!--</mvc:interceptor>-->
<!--</mvc:interceptors>-->
<!--mvc注解驱动-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="fastJsonConfig" ref="fastJsonConfig" />
</bean>
<!--<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">-->
<!--<property name="supportedMediaTypes">-->
<!--<list>-->
<!--<value>text/html;charset=UTF-8</value>-->
<!--<value>application/json</value>-->
<!--</list>-->
<!--</property>-->
<!--<property name="features">-->
<!--<list>-->
<!--<value>WriteDateUserDateFormat</value>-->
<!--</list>-->
<!--</property>-->
<!--</bean>-->
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig">
<property name="charset" value="UTF-8" />
<!--<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/>-->
</bean>
<!--Spring MVC无法解析WelcomeFileList中的静态HTML,因为没有对应的mapping。-->
<mvc:default-servlet-handler/>
<!-- 模板解析器 -->
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/templates/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
<property name="cacheable" value="false" />
<property name="characterEncoding" value="UTF-8"/>
</bean>
<!--模版引擎-->
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<!--Thymeleaf视图解析器-->
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="characterEncoding" value="UTF-8" />
</bean>
<!--静态资源文件所在位置-->
<mvc:resources mapping="/statics/**" location="/statics/"/>
<!--全局异常处理-->
<!--<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">-->
<!--<property name="exceptionMappings">-->
<!--<props>-->
<!--<prop key="java.lang.RuntimeException">error</prop>-->
<!--</props>-->
<!--</property>-->
<!--</bean>-->
<!-- 多部分文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
</beans>
web.xml(要改最开始访问的页面)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="false">
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--指定spring文件位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<!--监听器:Web容器启动的时候初始化Spring容器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/templates/dologin.html</welcome-file>
</welcome-file-list>
</web-app>
userMapper.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="cn.smbms.dao.UserMapper">
<resultMap id="userList" type="User">
<result property="userRoleName" column="roleName"/>
</resultMap>
<!--登录查询-->
<select id="findUser" parameterType="User" resultType="User">
SELECT * FROM smbms_user WHERE userCode=#{userCode} AND userPassword=#{userPassword}
</select>
<!--删除-->
<delete id="delate">
DELETE FROM smbms_user WHERE id=#{id}
</delete>
<!--增加-->
<insert id="add">
INSERT INTO smbms_user (userCode,userName,userPassword) VALUES(#{userCode},#{userName},#{userPassword})
</insert>
<!--修改-->
<select id="findUserById" resultType="cn.smbms.pojo.User">
SELECT * FROM smbms_user WHERE id=#{id}
</select>
<update id="updata">
UPDATE smbms_user SET userCode=#{userCode},userName=#{userName},userPassword=#{userPassword} WHERE id=#{id}
</update>
<!--查询所有用户 分页-->
<select id="getUserListFen" resultType="User">
SELECT * FROM smbms_user
<trim prefix="where" prefixOverrides="and">
<if test="userName!=null and userName!=''">
userName like concat('%',#{userName},'%')
</if>
<if test="id!=null and id!=''">
and id=#{id}
</if>
</trim>
LIMIT #{currentNo},#{pageSize}
</select>
<!--总数-->
<select id="count" resultType="java.lang.Integer">
SELECT count(*) FROM smbms_user
<trim prefix="where" prefixOverrides="and">
<if test="userName!=null and userName!=''">
userName like concat('%',#{userName},'%')
</if>
<if test="id!=null and id!=''">
and id=#{id}
</if>
</trim>
</select>
</mapper>
userMapper.dao
package cn.smbms.dao;
import cn.smbms.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
//dao的注解
@Repository("userMapper")
public interface UserMapper {
//登录查询
User findUser(@Param("userCode")String userCode,@Param("userPassword")String userPassword);
//查询所有用户 分页
List<User> getUserListFen(@Param("currentNo")int currentNo,@Param("pageSize")int pageSize,@Param("userName") String userName,@Param("id") Integer id);
//总数
int count(@Param("userName")String userName,@Param("id") Integer id);
//删除
int delate(int id);
//增加
int add(User user);
//修改
User findUserById(int id);
int updata(User user);
}
UserServiceImpl.java
package cn.smbms.service.impl;
import cn.smbms.dao.UserMapper;
import cn.smbms.pojo.User;
import cn.smbms.service.UserService;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//@Transactional(propagation = Propagation.REQUIRED)
@Scope("singleton")
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource(name = "userMapper")
private UserMapper userMapper;
@Override
//查询
public List<User> findUsersWithConditions(User user) {
return userMapper.getUserList(user);
}
@Override
//添加
public boolean addUser(User user) {
return userMapper.addUser(user);
}
@Override
//添加多个用户 事务
public void addUsers(List<User> users) {
for(User user:users){
addUser(user);
throw new RuntimeException("text error");
}
}
@Override
//登录查询
public User findUser(String userCode, String userPassword) {
return userMapper.findUser(userCode,userPassword);
}
@Override
//分页查询
public Map getUserListFen( int pageNo,String userName,Integer id) {
List<User> userListPage = userMapper.getUserListFen((pageNo - 1) * 3, 3,userName,id);//分页
int count = userMapper.count(userName,id);//总数
int countPage=count%3==0 ? count/3 : (count/3)+1; //三目运算
Map<String,Object>userMap =new HashMap<>();
userMap.put("count",count);
userMap.put("userListPage",userListPage);
userMap.put("countPage",countPage);
userMap.put("pageNo",pageNo);
return userMap;
}
@Override
//分页查询总数
public int count(String userName,Integer id) {
System.out.println("总页数========"+userMapper.count(userName,id));
return userMapper.count(userName,id);
}
@Override
//删除
public int delate(int id) {
return userMapper.delate(id);
}
@Override
//增加
public int add(User user) {
return userMapper.add(user);
}
@Override
//修改
public User findUserById(int id) {
return userMapper.findUserById(id);
}
@Override
public int updata(User user) {
return userMapper.updata(user);
}
//测试
// public static void main(String[] args) {
// ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-mybatis.xml");
// UserService userService = (UserService) applicationContext.getBean("userService");
// int count = userService.count();
// System.out.println("=========="+count);
// Map userListFen = userService.getUserListFen(1,null);
// System.out.println("=========="+userListFen.toString());
// }
}
UserController.java
package cn.smbms.controller;
import cn.smbms.pojo.User;
import cn.smbms.service.UserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
//登录验证
@GetMapping(value = "/doLogin")
@ResponseBody
public String doLogin(HttpServletResponse response,String userCode,String userPassword)throws IOException {
User user = userService.findUser(userCode,userPassword);
String result=null;
if(userCode ==null||userCode.equals("")){
result ="false";
}else {
result ="true";
}
return JSON.toJSONString(result);
}
//分页
@RequestMapping("/doMain")
public String doMain(Integer pageNo,String userName,Integer id ,Model model){ //给一个当前页
Map userListPage = userService.getUserListFen(pageNo,userName,id);
model.addAttribute("userListPage",userListPage);
return "doMain";
}
@GetMapping("/doPage")
@ResponseBody
public String doPage(Integer pageNo,String userName,Integer id){
Map userListPage = userService.getUserListFen(pageNo,userName,id);
return JSON.toJSONString(userListPage);
}
//删除
@GetMapping("/delate")
@ResponseBody
public String delate(Integer delId){
int delate = userService.delate(delId);
return JSON.toJSONString(delate);
}
//增加
@RequestMapping("/add")
public String add(){
return "add";
}
//此处两种写法,一种ajax,一种thymeleaf写法(注释的是ajax写法)
// @GetMapping("/addUser")
// @ResponseBody
@PostMapping("/addUser")
public String addUser(String userCode,String userName,String userPassword,String birthday) throws ParseException {
System.out.println("进来addUser");
DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");
Date date = fmt.parse(birthday);
User user=new User();
user.setUserCode(userCode);
user.setUserName(userName);
user.setUserPassword(userPassword);
user.setBirthday(date);
int addUserLine=userService.add(user);
if(addUserLine==1){
return "redirect:/user/doMain?pageNo=1&userName="+null+"";
}
return "redirect:/user/add";
// return JSON.toJSONString(addUserLine);
}
//修改
@GetMapping("/update")
public String update(int userId,Model model){
User userById = userService.findUserById(userId);
model.addAttribute("user", userById);
return "update";
}
//此处两种写法,一种ajax,一种thymeleaf写法(注释的是ajax写法)
// @GetMapping("/updateUser")
// @ResponseBody
@PostMapping("/updateUser")
public String updateUser(String id,String userCode,String userName,String userPassword){
System.out.println("进来updateUser");
User user=new User();
user.setId(Integer.parseInt(id));
user.setUserCode(userCode);
user.setUserName(userName);
user.setUserPassword(userPassword);
int updata = userService.updata(user);
if(updata==1){
return "redirect:/user/doMain?pageNo=1&userName="+null+"";
}
return "redirect:/user/update";
// return JSON.toJSONString(updata);
}
}
dologin.html(登录页面)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="GBK">
<title>Title</title>
</head>
<body>
<h1>登录页</h1>
<h2 id="h2"></h2>
<form>
<p>姓名:<input type="text" name="userCode" id="userCode"></p>
<p>密码:<input type="text" name="userPassword" id="userPassword"></p>
<p><input type="button" name="submitButton" id="submitButton" value="提交"></p>
</form>
<script type="text/javascript" src="statics/js/jquery-3.4.1.js"></script>
<script type="text/javascript">
$(function () {
$("#submitButton").click(function () {
var userCode=$("#userCode").val();
var userPassword=$("#userPassword").val();
$.getJSON("/user/doLogin","userCode="+userCode+"&userPassword="+userPassword,success);
})
function success(data) {
if(data.toString()=="true"){
alert("登录成功")
window.location.href="http://localhost:8080/user/doMain?pageNo=1&userName="+null+"";
}else {
alert("登录失败")
window.location.href="http://localhost:8080/user/doMain";
}
}
})
</script>
</body>
</html>
doMain.html(分页显示页面)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>分页页面</title>
<style>
*{
margin: 0;
}
body{
width: 960px;
margin: 0 auto;
}
h1{
font-family: 新宋体;
text-align: center;
margin-top: 2em;
}
#sousuo{
text-align: center;
margin: 0 auto;
margin-top: 2em;
}
table{
font-family: 新宋体;
border-collapse: collapse;
width: 100%;
margin-top: 1em;
}
table, td, th{
border: 2px solid #A5A5A5;
}
th{height: 2em;}
td{
text-align: center;
height: 1.5em;
}
a{
margin: 0 5px;
}
table tr:nth-of-type(even){
background: #dfdfdf;
}
#pageSpan{
text-align: right;
margin-top: 1em;
}
</style>
</head>
<body>
<h1>李府家仆</h1>
<input type="hidden" value="1" id="pageNo">
<div id="sousuo">
<!--搜索框和增加-->
<form>
姓名:<input type="text" name="userName" id="search">
编号:<input type="text" name="id" id="id">
<input type="button" value="搜索" id="searchButton">
<input type="button" id="add" name="add" value="增加">
</form>
</div>
<table>
<tr>
<th>编号</th>
<th>角色</th>
<th>姓名</th>
<th>密码</th>
<th>性别</th>
<th>出生日期</th>
<th>手机</th>
<th>地址</th>
<th>操作</th>
</tr>
</table>
<!--上一页,下一页-->
<div id="pageSpan"></div>
<script type="text/javascript" src="statics/js/jquery-3.4.1.js" th:src="@{/statics/js/jquery-3.4.1.js}"></script>
<script type="text/javascript">
$(function () {
var countPage2=0;
function showinfo() {
var pageNo=$("#pageNo").val();
var userName=$("#search").val();
var id=$("#id").val();
console.log("页面====pageNo==="+pageNo)
$.getJSON("/user/doPage","pageNo="+pageNo+"&userName="+userName+"&id="+id,successPage)
function successPage(data) {
countPage2=data.countPage;//总页数
// 清空table的tr
$("table tr:gt(0)").remove();
// 遍历
var length = data.userListPage.length;
for (var i = 0;i < length;i++){
var userVar = data.userListPage[i];
var $str=$("<tr id='ddd"+userVar.id+"'></tr>")
$( "table").append($str)
$str.append("<td>"+userVar.id+"</td>")
.append("<td>"+userVar.userCode+"</td>")
.append("<td>"+userVar.userName+"</td>")
.append("<td>"+userVar.userPassword+"</td>")
.append("<td>"+userVar.gender+"</td>")
.append("<td>"+userVar.birthday+"</td>")
.append("<td>"+userVar.phone+"</td>")
.append("<td>"+userVar.address+"</td>")
.append("<td><a href='#' id='del"+userVar.id+"' del='"+userVar.id+"'>删除</a>" +
"<a href='/user/update?userId="+userVar.id+"'>修改</a></td>")
// "<a th href='@{'/user/update/'+${userVar.id}'>修改</a></td>")
}
//显示 上一页 下一页
// 清空上一页、下一页等标签
$("#pageSpan").html(" ");
if(data.pageNo>1){
$("#pageSpan").append("<a href='#' id='firstPage'>首页</a><a href='#' id='prePage'>上一页</a>")
}
if(data.pageNo<data.countPage){
$("#pageSpan").append("<a href='#' id='nextPage'>下一页</a><a href='#' id='lastPage'>末页</a>")
}
}
}//end of showinfo
//点击换页(循环时候点击上一页,下一页)
$(document).on("click","#firstPage,#prePage,#nextPage,#lastPage",function () {
var clickId = $(this).attr("id");
switch (clickId){
case "firstPage":
$("#pageNo").val(1);
break;
case "prePage":
var currPageNo = $("#pageNo").val();
var newPageNo = parseInt(currPageNo) - 1;
$("#pageNo").val(newPageNo);
break;
case "nextPage":
var currPageNo = $("#pageNo").val();
var newPageNo = parseInt(currPageNo) + 1;
$("#pageNo").val(newPageNo);
break;
case "lastPage":
$("#pageNo").val(countPage2);
}
showinfo();
})
showinfo();
//删除
$(document).on("click","[id*=del]",function () {
if(confirm("是否删除")){
var delId=$(this).attr("del");
$.getJSON("/user/delate","delId="+delId,successDel)
function successDel(data) {
if(data==1){
$("#ddd"+delId).remove()
alert("删除成功")
// window.location.href="http://localhost:8080/user/doMain?pageNo=1&userName="+null+"";
}else {
alert("删除失败")
// window.location.href="http://localhost:8080/user/doMain?pageNo=1&userName="+null+"";
}
}
}
})
//增加
$("#add").click(function () {
window.location.href="http://localhost:8080/user/add";
})
//搜索
$("#searchButton").click(function () {
showinfo();
})
})
</script>
</body>
</html>
add.html
(注释掉的是ajax写法,现在用的是thymeleaf写法,通过form表单提交,开头要加标签,form表单提交,后台放进model中,前台可通过放在model中键取值,此处没用到,
< a th:href="@{’/user/update/’+${user.id}}">修改)这是页面跳转,带参数在controller里面,注解中写@PostMapping("/update/{id}")
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>增加</title>
</head>
<body>
<h1>增加页面</h1>
<form action="/user/addUser" method="post">
角色:<input type="text" name="userCode" id="userCode">
姓名:<input type="text" name="userName" id="userName">
密码:<input type="text" name="userPassword" id="userPassword">
生日:<input type="text" name="birthday" id="birthday">
<input type="submit" value="确认增加" id="ok">
</form>
<!--<script type="text/javascript" src="statics/js/jquery-3.4.1.js" th:src="@{/statics/js/jquery-3.4.1.js}"></script>-->
<!--<script type="text/javascript">-->
<!--$("#ok").click(function () {-->
<!--var params=$("form").serialize();-->
<!--console.log("params==="+params)-->
<!--$.getJSON("/user/addUser",params,successAdd)-->
<!--function successAdd(data) {-->
<!--if(data==1){-->
<!--alert("添加成功")-->
<!--window.location.href="http://localhost:8080/user/doMain?pageNo=1";-->
<!--}else {-->
<!--alert("添加失败")-->
<!--}-->
<!--}-->
<!--})-->
<!--</script>-->
</body>
</html>
update.html
(注释掉的是ajax写法,现在用的是thymeleaf写法,通过form表单提交,开头要加标签,form表单提交,后台放进model中,前台可通过放在model中键取值,此处没用到,
< a th:href="@{’/user/update/’+${user.id}}">修改)这是页面跳转,带参数在controller里面,注解中写@PostMapping("/update/{id}")
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>修改</title>
</head>
<body>
<h1>修改页面</h1>
<form method="post" action="/user/updateUser" th:object="${user}">
编号:<input name="id" th:value="${user.id}">
角色:<input type="text" name="userCode" id="userCode" th:value="${user.userCode}">
姓名:<input type="text" name="userName" id="userName" th:value="${user.userName}">
密码:<input type="text" name="userPassword" id="userPassword" th:value="${user.userPassword}">
<input type="submit" value="确认修改" id="ok">
</form>
<!--<script type="text/javascript" src="statics/js/jquery-3.4.1.js" th:src="@{/statics/js/jquery-3.4.1.js}"></script>-->
<!--<script type="text/javascript">-->
<!--$(function () {-->
<!--$("#ok").click(function () {-->
<!--var params=$("form").serialize();-->
<!--console.log("params==="+params)-->
<!--$.getJSON("/user/updateUser",params,successUpdata)-->
<!--function successUpdata(data) {-->
<!--if(data==1){-->
<!--alert("修改成功")-->
<!--window.location.href="http://localhost:8080/user/doMain?pageNo=1";-->
<!--}else {-->
<!--alert("修改失败")-->
<!--}-->
<!--}-->
<!--})-->
<!--})-->
<!--</script>-->
</body>
</html>