环境要求:
技术要求:
整合思路?
- Spring MVC+Spring+ Mybatis框架,核心框架是 Spring,通过 spring ioc\di和aop
整合步骤如下,MySQL及素材文件建议参考前文:Servlet版。
<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.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>smbmsartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.47version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.7version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.4version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>2.0.6version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.9version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.9version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.9.6version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>jstlgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.2version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.3.3version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
dependency>
<dependency>
<groupId>com.mchangegroupId>
<artifactId>c3p0artifactId>
<version>0.9.5.2version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.12.3version>
dependency>
dependencies>
<properties>
<maven.compiler.source>1.9maven.compiler.source>
<maven.compiler.target>1.9maven.compiler.target>
properties>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>
project>
创建项目包结构
pojo/entity
——实体类;dao/mapper
——具体数据库操作层(增删改查);service
——业务层;test/view
——表示层 / 测试层;utils
——工具类;filter
——过滤层,放置过滤器;servlet/controller
——控制层,调用业务层代码;jdbc.driver=com.mysql.jdbc.Driver
# 如果使用的是MySQL8.0+,增加一个时区的配置。
jdbc.url=jdbc:mysql://localhost:3306/smbms?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
<?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>
<settings>
<!--日志输出-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!--自动驼峰映射-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<mappers>
<mapper class="com.github.mapper.ProviderMapper"/>
<mapper class="com.github.mapper.BillMapper"/>
<mapper class="com.github.mapper.RoleMapper"/>
<mapper class="com.github.mapper.UserMapper"/>
</mappers>
</configuration>
package com.github.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private long id; // 主键ID
private String userCode; // 用户编码
private String userName; // 用户名称
private String userPassword; // 用户密码
private int gender; // 性别
private Date birthday; // 出生日期
private String phone; // 手机
private String address; // 地址
private long userRole; // 用户角色
private long createdBy; // 创建者
private Date creationDate; // 创建时间
private long modifyBy; // 更新者
private Date modifyDate; // 更新时间
private int age; //年龄
private String userRoleName; //用户角色名称
public int getAge() {
Date date = new Date();
int age = date.getYear()-birthday.getYear();
return age;
}
public String getUserRoleName(){
if (userRole==1){
return "系统管理员";
}else if (userRole==2){
return "经理";
}else if (userRole==3){
return "普通员工";
}
return "";
}
}
package com.github.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {
// ID
private long id;
// 角色编码
private String roleCode;
// 角色名称
private String roleName;
// 创建者
private long createdBy;
// 创建时间
private Date creationDate;
// 更新者
private long modifyBy;
// 更新时间
private Date modifyDate;
}
package com.github.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Provider {
private long id;
// 供应商编码
private String proCode;
// 供应商名称
private String proName;
// 供应商描述
private String proDesc;
// 供应商联系人
private String proContact;
// 供应商电话
private String proPhone;
// 供应商地址
private String proAddress;
// 供应商传真
private String proFax;
// 创建者
private long createdBy;
// 创建时间
private Date creationDate;
// 更新时间
private Date modifyDate;
// 更新者
private long modifyBy;
}
package com.github.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.sql.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Bill {
private long id;
// 账单编码
private String billCode;
// 商品名称
private String productName;
// 商品描述
private String productDesc;
// 商品单位
private String productUnit;
// 商品数量
private BigDecimal productCount;
// 总金额
private BigDecimal totalPrice;
// 是否支付
private int isPayment;
// 创建者
private long createdBy;
// 创建时间
private Date creationDate;
// 更新者
private long modifyBy;
// 更新时间
private Date modifyDate;
// 供应商ID
private long providerId;
// 提供者的姓名
private String providerName;
}
package com.github.mapper;
import com.github.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
public User findById(@Param("id") long id);
public User findByNameAndPassword(@Param("userName") String userName,@Param("password") String password);
public int updatePasswordById(@Param("id") long id,@Param("password") String password);
public int findUserCountByRoleIdAndUsername(@Param("id") long id,@Param("username") String username);
public List<User> findUserByRoleIdAndUsernameAndPageLimit(@Param("id") long id, @Param("username") String username, @Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
public int insertUser(User user);
public List<User> findAll();
public int deleteById(@Param("id") long id);
public int updateUser(User user);
}
package com.github.mapper;
import com.github.pojo.Role;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface RoleMapper {
public Role findById(@Param("id") long id);
public List<Role> findAll();
}
package com.github.mapper;
import com.github.pojo.Provider;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ProviderMapper {
public Provider findById(@Param("id") long id);
public List<Provider> findByCodeAndName(@Param("proCode") String proCode,@Param("proName") String proName);
public int insertProvider(Provider provider);
public int deleteById(long id);
public int updateProvider(Provider provider);
public List<Provider> findAll();
}
package com.github.mapper;
import com.github.pojo.Bill;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface BillMapper {
public Bill findById(@Param("id") long id);
public List<Bill> findByProductNameAndProviderIdAndIsPayment(@Param("productName") String productName,@Param("providerId") long providerId,@Param("isPayment") int isPayment);
public int insertBill(Bill bill);
public int deleteBill(@Param("id") long id);
public int updateBill(Bill bill);
}
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.mapper.UserMapper">
<insert id="insertUser">
insert into smbms_user(id,userCode,userName,userPassword,gender,birthday,phone,address,userRole,createdBy,creationDate)
values(null ,#{userCode},#{userName},#{userPassword},#{gender},#{birthday},#{phone},#{address},#{userRole},#{createdBy},#{creationDate});
insert>
<update id="updatePasswordById">
update smbms_user set userPassword = #{password} where id = #{id};
update>
<update id="updateUser">
update smbms_user set userName = #{userName} ,gender = #{gender},birthday = #{birthday},phone=#{phone},address=#{address},userRole = #{userRole},modifyBy=#{modifyBy},modifyDate=#{modifyDate}
where id = #{id};
update>
<delete id="deleteById">
delete from smbms_user where id = #{id};
delete>
<select id="findById" resultType="com.github.pojo.User">
select * from smbms_user where id = #{id};
select>
<select id="findByNameAndPassword" resultType="com.github.pojo.User">
select * from smbms_user where userCode = #{userName} and userPassword=#{password};
select>
<select id="findUserCountByRoleIdAndUsername" resultType="java.lang.Integer">
select count(1) from smbms_user u ,smbms_role r where u.userRole = r.id
<if test="id != 0">
and r.id = #{id}
if>
<if test="username != null">
and u.userName like "%"#{username}"%"
if>
select>
<select id="findUserByRoleIdAndUsernameAndPageLimit" resultType="com.github.pojo.User">
select * from smbms_user u ,smbms_role r where u.userRole = r.id
<if test="id != 0">
and r.id = #{id}
if>
<if test="username != null">
and u.userName like "%"#{username}"%"
if>
LIMIT #{startIndex},#{pageSize};
select>
<select id="findAll" resultType="com.github.pojo.User">
select * from smbms_user;
select>
mapper>
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.mapper.RoleMapper">
<select id="findById" resultType="com.github.pojo.Role">
select * from smbms_role where id = #{id};
select>
<select id="findAll" resultType="com.github.pojo.Role">
select *
from smbms_role;
select>
mapper>
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.mapper.ProviderMapper">
<insert id="insertProvider">
insert into smbms_provider(id,proCode,proName,proDesc,proContact,proPhone,proAddress,proFax,createdBy,creationDate)
values(null,#{proCode},#{proName},#{proDesc},#{proContact},#{proPhone},#{proAddress},#{proFax},#{createdBy},#{creationDate});
insert>
<update id="updateProvider">
update smbms_provider set proCode=#{proCode},proName =#{proName},proDesc=#{proDesc},proContact=#{proContact},
proPhone=#{proPhone},proAddress = #{proAddress},proFax=#{proFax},modifyDate=#{modifyDate},
modifyBy=#{modifyBy}
where id = #{id};
update>
<delete id="deleteById">
delete from smbms_provider where id =#{id};
delete>
<select id="findById" resultType="com.github.pojo.Provider">
select * from smbms_provider where id = #{id};
select>
<select id="findByCodeAndName" resultType="com.github.pojo.Provider">
select * from smbms_provider
<where>
<if test="proCode != null">
and proCode like "%"#{proCode}"%"
if>
<if test="proName != null">
and proName like "%"#{proName}"%"
if>
where>
select>
<select id="findAll" resultType="com.github.pojo.Provider">
select * from smbms_provider;
select>
mapper>
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.mapper.BillMapper">
<insert id="insertBill">
insert into smbms_bill(id,billCode,productName,productDesc,productUnit,productCount,totalPrice,isPayment,createdBy,creationDate,providerId)
values(null ,#{billCode},#{productName},#{productDesc},#{productUnit},#{productCount},#{totalPrice},#{isPayment},#{createdBy},#{creationDate},#{providerId});
insert>
<update id="updateBill">
update smbms_bill set billCode=#{billCode},productName=#{productName},productDesc=#{productDesc},
productUnit=#{productUnit},productCount=#{productCount},
totalPrice=#{totalPrice},isPayment=#{isPayment},modifyBy=#{modifyBy},
modifyDate=#{modifyDate},providerId=#{providerId}
where id = #{id};
update>
<delete id="deleteBill">
delete from smbms_bill where id = #{id};
delete>
<select id="findById" resultType="com.github.pojo.Bill">
select * from smbms_bill where id = #{id};
select>
<select id="findByProductNameAndProviderIdAndIsPayment" resultType="com.github.pojo.Bill">
select * from smbms_bill
<where>
<if test="isPayment > 0">
and isPayment = #{isPayment}
if>
<if test="productName != null">
and productName like "%"#{productName}"%"
if>
<if test="providerId >0">
and providerId = #{providerId}
if>
where>
select>
mapper>
package com.github.service;
import com.github.mapper.UserMapper;
import com.github.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User login(String username,String password){
User byNameAndPassword = userMapper.findByNameAndPassword(username, password);
if (byNameAndPassword == null){
return null;
}else {
return byNameAndPassword;
}
}
public boolean updatePasswordById(String password,long id){
int i = userMapper.updatePasswordById(id, password);
if (i>0){
return true;
}else {
return false;
}
}
public int findUserCountByRoleIdAndUsername(long id,String username){
return userMapper.findUserCountByRoleIdAndUsername(id,username);
}
public List<User> findUserByRoleIdAndUsernameAndPageLimit(long id, String username, int startIndex, int pageSize){
return userMapper.findUserByRoleIdAndUsernameAndPageLimit(id,username,startIndex,pageSize);
}
public int insertUser(User user){
return userMapper.insertUser(user);
}
public List<User> findAll(){
return userMapper.findAll();
}
public int deleteById(long id){
return userMapper.deleteById(id);
}
public User findById(long id){
return userMapper.findById(id);
}
public int updateUser(User user){
return userMapper.updateUser(user);
}
}
package com.github.service;
import com.github.mapper.RoleMapper;
import com.github.pojo.Role;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RoleService {
@Autowired
private RoleMapper roleMapper;
public List<Role> findAll(){
return roleMapper.findAll();
}
}
package com.github.service;
import com.github.mapper.ProviderMapper;
import com.github.pojo.Provider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.util.List;
@Controller
public class ProviderService {
@Autowired
private ProviderMapper providerMapper;
public Provider findById(long id){
return providerMapper.findById(id);
}
public List<Provider> findByCodeAndName(String proCode, String proName){
return providerMapper.findByCodeAndName(proCode,proName);
}
public int insertProvider(Provider provider){
return providerMapper.insertProvider(provider);
}
public int deleteById(long id){
return providerMapper.deleteById(id);
}
public int updateProvider(Provider provider){
return providerMapper.updateProvider(provider);
}
public List<Provider> findAll(){
return providerMapper.findAll();
}
}
package com.github.service;
import com.github.mapper.BillMapper;
import com.github.mapper.ProviderMapper;
import com.github.pojo.Bill;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.util.List;
@Controller
public class BillService {
@Autowired
private BillMapper billMapper;
@Autowired
private ProviderMapper providerMapper;
public Bill findById(long id){
Bill bill = billMapper.findById(id);
bill.setProviderName(providerMapper.findById(bill.getProviderId()).getProName());
return bill;
}
public List<Bill> findByProductNameAndProviderIdAndIsPayment(String productName, long providerId, int isPayment){
List<Bill> billList = billMapper.findByProductNameAndProviderIdAndIsPayment(productName, providerId, isPayment);
for (Bill bill : billList) {
bill.setProviderName(providerMapper.findById(bill.getProviderId()).getProName());
}
return billList;
}
public int insertBill(Bill bill){
return billMapper.insertBill(bill);
}
public int deleteBill(long id){
return billMapper.deleteBill(id);
}
public int updateBill(Bill bill){
return billMapper.updateBill(bill);
}
}
package com.github.utils;
public class Constants {
public final static String USER_SESSION = "userSession";
public final static int PAGE_SIZE = 5;
}
package com.github.utils;
public class PageSupport {
/**
* 当前页码-来自于用户输入
*/
private int currentPageNo = 1;
/**
* 总记录数
*/
private int totalCount = 0;
// 页面容量
private int pageSize = 0;
/**
* 总页数-totalCount/pageSize(+1)
*/
private int totalPageCount = 1;
public int getCurrentPageNo() {
return currentPageNo;
}
public void setCurrentPageNo(int currentPageNo) {
if(currentPageNo > 0){
this.currentPageNo = currentPageNo;
}
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
if(totalCount > 0){
this.totalCount = totalCount;
// 设置总页数
this.setTotalPageCountByRs();
}
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize > 0){
this.pageSize = pageSize;
}
}
public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public void setTotalPageCountByRs(){
if(this.totalCount % this.pageSize == 0){
this.totalPageCount = this.totalCount / this.pageSize;
}else if(this.totalCount % this.pageSize > 0){
this.totalPageCount = this.totalCount / this.pageSize + 1;
}else{
this.totalPageCount = 0;
}
}
}
package com.github.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
Object userSession = session.getAttribute("userSession");
if (userSession==null){
response.sendRedirect("/error.jsp");
}else {
filterChain.doFilter(request,response);
}
}
@Override
public void destroy() {
}
}
OK,到此,Mybatis层需求操作编写完毕!
配置Spring整合MyBatis,这里数据源使用dataSource连接池;
编写Spring整合Mybatis的相关的配置文件;
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath*:database.properties" />
<context:component-scan base-package="com.github"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.github.mapper"/>
bean>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
bean>
<tx:advice id="interceptor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
tx:attributes>
tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.github..*.*(..))"/>
<aop:advisor advice-ref="interceptor" pointcut-ref="pointcut"/>
aop:config>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:default-servlet-handler/>
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
bean>
property>
bean>
mvc:message-converters>
mvc:annotation-driven>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="suffix" value=".jsp"/>
bean>
beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="classpath:springDao-config.xml"/>
<import resource="classpath:springTx-config.xml"/>
<import resource="classpath:springMVC-config.xml"/>
beans>
<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">
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:ApplicationContext.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<filter>
<filter-name>encodingfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>utf-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>encodingfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<filter>
<filter-name>Loginfilter-name>
<filter-class>com.github.filter.LoginFilterfilter-class>
filter>
<filter-mapping>
<filter-name>Loginfilter-name>
<url-pattern>/jsp/*url-pattern>
filter-mapping>
<welcome-file-list>
<welcome-file>/login.jspwelcome-file>
welcome-file-list>
web-app>
配置文件,暂时结束!Controller 和 视图层编写
package com.github.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pojo.Role;
import com.github.pojo.User;
import com.github.service.RoleService;
import com.github.service.UserService;
import com.github.utils.Constants;
import com.github.utils.PageSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UserController {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@RequestMapping("login.do")
public String login(String userCode , String userPassword, HttpSession session, HttpServletRequest request){
User user = userService.login(userCode, userPassword);
if (user!=null){
session.setAttribute(Constants.USER_SESSION,user);
return "redirect:/jsp/frame.jsp";
}
request.setAttribute("error","用户名或者密码错误");
return "/login";
}
@RequestMapping("/jsp/logout.do")
public String logout(HttpSession session){
session.removeAttribute(Constants.USER_SESSION);
return "redirect:/login.jsp";
}
@RequestMapping("/jsp/updatePassword")
public String updatePassword(String newPassword,HttpSession session,HttpServletRequest request){
System.out.println("newpassword=>"+newPassword);
User attribute = (User) session.getAttribute(Constants.USER_SESSION);
boolean flag = userService.updatePasswordById(request.getParameter("newPassword"), attribute.getId());
if (flag==true){
session.removeAttribute(Constants.USER_SESSION);
return "redirect:/login.jsp";
}else {
request.setAttribute("message","修改密码失败");
return "/jsp/pwdmodify";
}
}
@RequestMapping("/jsp/verificationPassword")
@ResponseBody
public String verificationPassword(String oldpassword,HttpSession session) throws JsonProcessingException {
User attribute = (User) session.getAttribute(Constants.USER_SESSION);
Map<String,String> map = new HashMap<String,String>();
if (attribute==null){
map.put("result","sessionerror");
}else if (oldpassword==null||oldpassword.length()==0){
map.put("result","error");
}else if (!attribute.getUserPassword().equals(oldpassword)){
map.put("result","false");
}
map.put("result","true");
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(map);
return s;
}
@RequestMapping("/jsp/queryUser")
public String queryUser(Model model,Integer queryUserRole,String queryname,Integer pageIndex){
// 1. 查询出列表
// 2. 查询出总人数
// 3. 查询出role列表
// 4. 分页的支持
// 5. 回写数据
// 6. 跳转页面
if (queryUserRole==null){
queryUserRole = 0;
}
if (pageIndex == null){
pageIndex = 1;
}
int template = (pageIndex-1)*Constants.PAGE_SIZE;
List<User> userList = userService.findUserByRoleIdAndUsernameAndPageLimit(queryUserRole, queryname, template, Constants.PAGE_SIZE);
int totalCount = userService.findUserCountByRoleIdAndUsername(queryUserRole, queryname);
List<Role> roleList = roleService.findAll();
PageSupport pageSupport = new PageSupport();
pageSupport.setPageSize(Constants.PAGE_SIZE);
pageSupport.setTotalCount(totalCount);
int totalPageCount = pageSupport.getTotalPageCount();
model.addAttribute("queryUserName",queryname);
model.addAttribute("roleList",roleList);
model.addAttribute("queryUserRole",queryUserRole);
model.addAttribute("userList",userList);
model.addAttribute("totalCount",totalCount);
model.addAttribute("currentPageNo","");
model.addAttribute("totalPageCount",totalPageCount);
model.addAttribute("currentPageNo",pageIndex);
return "/jsp/userlist";
}
@RequestMapping("/jsp/AddUser")
public String addUser(String userCode, String userName, String userPassword,
String ruserPassword, int gender, String birthday,
String phone, String address,long userRole,Model model,HttpSession session) throws ParseException {
if (ruserPassword==null||userPassword==null||!userPassword.equals(ruserPassword)){
model.addAttribute("message","输入异常,请重新输入");
return "/jsp/useradd";
}
User user = new User();
user.setUserCode(userCode);
user.setUserName(userName);
user.setUserPassword(userPassword);
user.setGender(gender);
// 把字符串转换为日期对象
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = dateFormat.parse(birthday);
user.setBirthday(parse);
user.setPhone(phone);
user.setAddress(address);
user.setUserRole(userRole);
User userSession = (User) session.getAttribute(Constants.USER_SESSION);
user.setCreatedBy(userSession.getId());
user.setCreationDate(new Date());
userService.insertUser(user);
System.out.println("======================>"+user);
model.addAttribute("message","添加成功");
return "/jsp/useradd";
}
@RequestMapping("/jsp/toUserAdd")
public String toUserAdd(Model model){
List<Role> all = roleService.findAll();
model.addAttribute("roleList",all);
return "/jsp/useradd";
}
// 验证账户名是否一样
@RequestMapping("/jsp/verifyAccount")
@ResponseBody
public String verifyAccount(String userCode) throws JsonProcessingException {
Map<String, String> map = new HashMap<String, String>();
if (userCode==null||userCode.equals("")){
map.put("userCode","exist");
}
List<User> userList = userService.findAll();
for (User user : userList) {
if (user.getUserCode().equals(userCode)){
map.put("userCode","exist");
}
}
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
}
@RequestMapping("/jsp/deleteUser")
@ResponseBody
public String deleteUser(long uid) throws JsonProcessingException {
System.out.println("==========="+"进入方法了"+"===========");
Map<String,String> map = new HashMap<String, String>();
int i = userService.deleteById(uid);
if (i<1){
map.put("delResult","false");
}else {
map.put("delResult","true");
}
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
}
@RequestMapping("/jsp/viewUser")
public String viewUser(long uid,Model model){
User user = userService.findById(uid);
model.addAttribute("user",user);
return "/jsp/userview";
}
@RequestMapping("/jsp/toUpdateUser")
public String toUpdateUser(long uid,Model model){
User user = userService.findById(uid);
model.addAttribute("user",user);
List<Role> roleList = roleService.findAll();
model.addAttribute("roleList",roleList);
return "/jsp/usermodify";
}
@RequestMapping("/jsp/updateUser")
public String updateUser(long uid,String userName,int gender,String birthday,
String phone,String address,long userRole,HttpSession session) throws ParseException {
User user = new User();
user.setId(uid);
user.setUserName(userName);
user.setGender(gender);
// 转换一下日期,因为前端不可以传日期对象
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = dateFormat.parse(birthday);
user.setBirthday(parse);
user.setPhone(phone);
user.setAddress(address);
user.setUserRole(userRole);
User userSession = (User) session.getAttribute(Constants.USER_SESSION);
user.setModifyBy(userSession.getId());
user.setModifyDate(new Date());
userService.updateUser(user);
return "redirect:/jsp/queryUser";
}
}
package com.github.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("test")
public class TestController {
@ResponseBody
@RequestMapping("theText")
public String text(){
return "hello world";
}
}
package com.github.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pojo.Provider;
import com.github.pojo.User;
import com.github.service.ProviderService;
import com.github.utils.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class ProviderController {
@Autowired
private ProviderService providerService;
@RequestMapping("/jsp/queryProvider")
public String queryProvider(String queryProCode, String queryProName, Model model){
List<Provider> providerList = providerService.findByCodeAndName(queryProCode, queryProName);
model.addAttribute("queryProCode",queryProCode);
model.addAttribute("queryProName",queryProName);
model.addAttribute("providerList",providerList);
return "/jsp/providerlist";
}
@RequestMapping("/jsp/providerAdd")
public String providerAdd(Model model,Provider provider, HttpSession session){
provider.setId(1);
User userSession = (User) session.getAttribute(Constants.USER_SESSION);
provider.setCreatedBy(userSession.getId());
provider.setCreationDate(new Date(new java.util.Date().getTime()));
int i = providerService.insertProvider(provider);
if(i>0){
model.addAttribute("message","添加成功");
}else {
model.addAttribute("message","添加失败");
}
return "/jsp/provideradd";
}
@RequestMapping("/jsp/deleteProvider")
@ResponseBody
public String deleteProvider(long proid) throws JsonProcessingException {
int flag = providerService.deleteById(proid);
Map<String, String> map = new HashMap<String,String>();
if (flag>0){
map.put("delResult","true");
}else {
map.put("delResult","false");
}
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
}
@RequestMapping("/jsp/viewProvider")
public String viewProvider(long proid,Model model){
Provider provider = providerService.findById(proid);
model.addAttribute("provider",provider);
return "/jsp/providerview";
}
@RequestMapping("/jsp/updateProvider")
public String updateProvider(Provider provider, HttpSession session){
User userSession = (User) session.getAttribute(Constants.USER_SESSION);
provider.setModifyBy(userSession.getId());
provider.setModifyDate(new Date(new java.util.Date().getTime()));
int i = providerService.updateProvider(provider);
return "redirect:/jsp/queryProvider";
}
@RequestMapping("/jsp/toUpdateProvider")
public String toUpdateProvider(long proid, Model model){
Provider provider = providerService.findById(proid);
model.addAttribute("provider",provider);
return "/jsp/providermodify";
}
}
package com.github.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pojo.Bill;
import com.github.pojo.Provider;
import com.github.pojo.User;
import com.github.service.BillService;
import com.github.service.ProviderService;
import com.github.utils.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class BillController {
@Autowired
private BillService billService;
@Autowired
private ProviderService providerService;
@RequestMapping("/jsp/queryBill")
public String queryBill(Model model,String queryProductName, Integer queryProviderId, Integer queryIsPayment){
if (queryProviderId==null){
queryProviderId = 0;
}
if (queryIsPayment == null){
queryIsPayment = 0;
}
List<Provider> providerList = providerService.findAll();
List<Bill> billList = billService.findByProductNameAndProviderIdAndIsPayment(queryProductName, queryProviderId, queryIsPayment);
model.addAttribute("queryProductName",queryProductName);
model.addAttribute("queryProviderId",queryProviderId);
model.addAttribute("queryIsPayment",queryIsPayment);
model.addAttribute("billList",billList);
model.addAttribute("providerList",providerList);
return "/jsp/billlist";
}
@RequestMapping("/jsp/toBillAdd")
public String toBillAdd(Model model){
List<Provider> providerList = providerService.findAll();
model.addAttribute("providerList",providerList);
return "/jsp/billadd";
}
@RequestMapping("/jsp/billAdd")
public String billAdd(Bill bill, HttpSession session){
bill.setId(0);
User userSession = (User) session.getAttribute(Constants.USER_SESSION);
bill.setCreatedBy(userSession.getId());
bill.setCreationDate(new Date(new java.util.Date().getTime()));
billService.insertBill(bill);
return "redirect:/jsp/queryBill";
}
@RequestMapping("/jsp/deleteBill")
@ResponseBody
public String deleteBill(long billid) throws JsonProcessingException {
Map<String, String> map = new HashMap<String, String>();
if (billService.deleteBill(billid)>0){
map.put("delResult","true");
}else {
map.put("delResult","false");
}
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
}
@RequestMapping("/jsp/viewBill")
public String viewBill(long billid,Model model){
Bill b = billService.findById(billid);
model.addAttribute("bill",b);
return "/jsp/billview";
}
@RequestMapping("/jsp/toUpdateBill")
public String toUpdateBill(long billid,Model model){
Bill b = billService.findById(billid);
model.addAttribute("bill",b);
List<Provider> providerList = providerService.findAll();
model.addAttribute("providerList",providerList);
return "/jsp/billmodify";
}
@RequestMapping("/jsp/updateBill")
public String updateBill(Bill bill, Model model, HttpSession session){
User userSession = (User) session.getAttribute(Constants.USER_SESSION);
bill.setModifyBy(userSession.getId());
bill.setModifyDate(new Date(new java.util.Date().getTime()));
int i = billService.updateBill(bill);
if (i>0){
model.addAttribute("message","修改成功");
}else {
model.addAttribute("message","修改失败");
}
return "/jsp/billmodify";
}
}
运行结果如下:
1.报错:Artifact smbms:war exploded: Error during artifact deployment. See server log for details.
2.IDEA默认1.5导致代码错误
<properties>
<maven.compiler.source>1.9maven.compiler.source>
<maven.compiler.target>1.9maven.compiler.target>
properties>
3.mybatis的mapper.xml文件被漏掉
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>
4.字节的UTF-8序列的字节2失效:Invalid byte 2 of 2-byte UTF-8 sequence
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
5.格林尼治时间转换问题
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.US);
map.put("birthday",format.parse(request.getParameter("birthday")));