zoukankan      html  css  js  c++  java
  • idea+Maven+SSM框架增删改查

    完整项目结构

    1.maven配置文件pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
      distributed with this work for additional information
      regarding copyright ownership.  The ASF licenses this file
      to you under the Apache License, Version 2.0 (the
      "License"); you may not use this file except in compliance
      with the License.  You may obtain a copy of the License at
    
       http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing,
      software distributed under the License is distributed on an
      "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, either express or implied.  See the License for the
      specific language governing permissions and limitations
      under the License.
    -->
    <!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
    <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/maven-v4_0_0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
      <packaging>war</packaging>
    
      <name>EasySSM</name>
      <groupId>com.cyf</groupId>
      <artifactId>EasySSM</artifactId>
      <version>1.0-SNAPSHOT</version>
      <properties>
        <!-- spring版本号 -->
        <spring.version>4.3.3.RELEASE</spring.version>
        <!-- mybatis版本号 -->
        <mybatis.version>3.4.0</mybatis.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.7</version>
            <configuration>
              <connectors>
                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                  <port>8180</port>
                  <maxIdleTime>30000</maxIdleTime>
                </connector>
              </connectors>
              <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
              <contextPath>/</contextPath>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
              <execution>
                <id>copy-xmls</id>
                <phase>process-resources</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${basedir}/target/classes</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${basedir}/src/main/java</directory>
                      <includes>
                        <include>**/*.xml</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
    
    
      </build>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <!-- 表示开发的时候引入,发布的时候不会加载此包 -->
          <scope>test</scope>
        </dependency>
        <!-- spring核心包 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-oxm</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- mybatis核心包 -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
        </dependency>
    
        <!--mybatis spring 插件 -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.3.0</version>
        </dependency>
        <!-- 导入java ee jar 包 -->
        <dependency>
          <groupId>javax</groupId>
          <artifactId>javaee-api</artifactId>
          <version>7.0</version>
          <scope>provided</scope>
        </dependency>
        <!-- 导入Mysql数据库链接jar包 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.25</version>
        </dependency>
        <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
        <dependency>
          <groupId>commons-dbcp</groupId>
          <artifactId>commons-dbcp</artifactId>
          <version>1.2.2</version>
        </dependency>
        <!-- JSTL标签类 -->
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <!-- 日志文件管理包 -->
        <!-- log start -->
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>${log4j.version}</version>
        </dependency>
    
    
        <!-- 格式化对象,方便输出日志 -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.1.41</version>
        </dependency>
    
    
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>${slf4j.version}</version>
        </dependency>
    
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <!-- 引入JSON -->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.7.5</version>
        </dependency>
        <!-- 上传组件包 -->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
        </dependency>
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
        </dependency>
        <dependency>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
          <version>1.9</version>
        </dependency>
        <!--aspectj -->
        <dependency>
          <groupId>aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.5.4</version>
        </dependency>
      </dependencies>
    
    
    </project>

    2.web工程配置文件web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
             xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <!-- 编码过滤器 -->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <async-supported>true</async-supported>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- Spring配置文件 -->
        <!-- needed for ContextLoaderListener -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        <!-- Bootstraps the root web application context before servlet initialization -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
    
        <!-- SpringMVC DispatcherServlet -->
        <!-- The front controller of this Spring Web application, responsible for
            handling all application requests -->
        <servlet>
            <servlet-name>springDispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!-- Map all requests to the DispatcherServlet for handling -->
        <servlet-mapping>
            <servlet-name>springDispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    3.创建MySQL数据表

    DROP TABLE IF EXISTS tb_user;
    CREATE TABLE tb_user (
        id INT NOT NULL AUTO_INCREMENT,
        userName VARCHAR(40),
        password VARCHAR(100),
        email VARCHAR(40),
        phone VARCHAR(40),
        roleName VARCHAR(40),
        PRIMARY KEY(id)
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    -----------------------------------------
    mysql> use db_ssm2;
    Database changed
    mysql> desc tb_user;
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | id       | int(11)      | NO   | PRI | NULL    | auto_increment |
    | userName | varchar(40)  | YES  |     | NULL    |                |
    | password | varchar(100) | YES  |     | NULL    |                |
    | email    | varchar(40)  | YES  |     | NULL    |                |
    | phone    | varchar(40)  | YES  |     | NULL    |                |
    | roleName | varchar(40)  | YES  |     | NULL    |                |
    +----------+--------------+------+-----+---------+----------------+
    6 rows in set (0.03 sec)
    
    mysql> select *from tb_user;
    +----+----------+----------+--------------------+-------+------------+
    | id | userName | password | email              | phone | roleName   |
    +----+----------+----------+--------------------+-------+------------+
    |  1 | 李白     | 1234     | libai@qq.com       | 10086 | 客户经理   |
    |  2 | 李清照   | 1234     | liqingzhao@163.com | 10087 | 高管       |
    |  3 | 杜甫     | 1234     | dufu@163.com       | 10088 | 销售主管   |
    |  4 | 岑参     | 1234     | censhen@163.com    | 10088 | 系统管理员 |
    |  5 | 陈子昂   | 1234     | chenziang@qq.com   | 10099 | 高管       |
    +----+----------+----------+--------------------+-------+------------+
    5 rows in set (0.05 sec)

    4.数据库配置文件

    jdbc.properties

    driverClassName:com.mysql.jdbc.Driver
    url:jdbc:mysql://localhost:3306/test
    username=root
    password=root
    initialSize=0 
    
    maxActive=20 
    
    maxIdle=20
    
    minIdle=1
    
    maxWait=60000

    5.日志输出格式配置

    log4j.properties

    log4j.rootLogger=INFO,Console,File  
    #u5B9Au4E49u65E5u5FD7u8F93u51FAu76EEu7684u5730u4E3Au63A7u5236u53F0
    log4j.appender.Console=org.apache.log4j.ConsoleAppender  
    log4j.appender.Console.Target=System.out  
    #u53EFu4EE5u7075u6D3Bu5730u6307u5B9Au65E5u5FD7u8F93u51FAu683Cu5F0FuFF0Cu4E0Bu9762u4E00u884Cu662Fu6307u5B9Au5177u4F53u7684u683Cu5F0F
    log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
    log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
    
    #u6587u4EF6u5927u5C0Fu5230u8FBEu6307u5B9Au5C3Au5BF8u7684u65F6u5019u4EA7u751Fu4E00u4E2Au65B0u7684u6587u4EF6
    log4j.appender.File = org.apache.log4j.RollingFileAppender  
    #u6307u5B9Au8F93u51FAu76EEu5F55
    log4j.appender.File.File = logs/ssm.log  
    #u5B9Au4E49u6587u4EF6u6700u5927u5927u5C0F
    log4j.appender.File.MaxFileSize = 10MB  
    # u8F93u51FAu6240u4EE5u65E5u5FD7uFF0Cu5982u679Cu6362u6210DEBUGu8868u793Au8F93u51FADEBUGu4EE5u4E0Au7EA7u522Bu65E5u5FD7
    log4j.appender.File.Threshold = ALL  
    log4j.appender.File.layout = org.apache.log4j.PatternLayout  
    log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n 

    6.Spring 配置文件

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    
        <context:component-scan base-package="com.ssmtest">
            <!--不扫描 @Controller注解的类  -->
            <context:exclude-filter type="annotation"
                                    expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
    
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <!-- <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> -->
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </bean>
    
        <!-- 配置MyBatis的sqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <property name="mapperLocations" value="classpath:com/ssmtest/mappers/*.xml"></property>
        </bean>
    
        <!-- Mapper接口所在包名,Spring会自动查找其下的Mapper  -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.ssmtest.dao"></property>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    
        <!-- 配置transactionManager事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!-- 配置事物通知属性 -->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <!-- 定义事物传播特性 -->
            <tx:attributes>
                <tx:method name="insert*" propagation="REQUIRED"/>
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="edit*" propagation="REQUIRED" />
                <tx:method name="save*" propagation="REQUIRED" />
                <tx:method name="add*" propagation="REQUIRED" />
                <tx:method name="new*" propagation="REQUIRED" />
                <tx:method name="set*" propagation="REQUIRED" />
                <tx:method name="remove*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
                <tx:method name="change*" propagation="REQUIRED" />
                <tx:method name="check*" propagation="REQUIRED" />
                <tx:method name="get*" propagation="REQUIRED" read-only="true" />
                <tx:method name="find*" propagation="REQUIRED" read-only="true" />
                <tx:method name="load*" propagation="REQUIRED" read-only="true" />
                <tx:method name="*" propagation="REQUIRED" read-only="true" />
            </tx:attributes>
        </tx:advice>
        <!-- 配置事物切面 需要aspectjweaver.jar-->
        <aop:config>
            <aop:pointcut id="serviceOperation" expression="execution(* com.ssmtest.service.*.*(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
        </aop:config>
    </beans>

    7.SpringMVC 配置文件

    springmvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    
        <!-- 自动扫描包 -->
        <context:component-scan base-package="com.ssmtest.controller"></context:component-scan>
    
        <!-- 视图解析器 -->
        <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="WEB-INF/views/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
        <mvc:default-servlet-handler/>
        <mvc:annotation-driven></mvc:annotation-driven>
    </beans>

    7.Java 文件

    7.1实体类UserPageBean

    User.java

    package com.ssmtest.entity;
    /**
     * 用户实体类
     * 对应数据表tb_user
     * @author Peng
     * @Date2016年12月13日上午9:36:23
     */
    public class User {
        private Integer id;
    
        private String username;
    
        private String password;
    
        private String email;
    
        private String phone;
    
        private String rolename;
        //角色名称 系统管理员、销售主管、客户经理、高管
    
    
        public Integer getId() {
            return id;
        }
    
        public User() {
            super();
        }
    
        public User(String username, String password, String email, String phone, String rolename) {
            super();
            this.username = username;
            this.password = password;
            this.email = email;
            this.phone = phone;
            this.rolename = rolename;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username == null ? null : username.trim();
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password == null ? null : password.trim();
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email == null ? null : email.trim();
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone == null ? null : phone.trim();
        }
    
        public String getRolename() {
            return rolename;
        }
    
        public void setRolename(String rolename) {
            this.rolename = rolename == null ? null : rolename.trim();
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + ", phone="
                    + phone + ", rolename=" + rolename + "]";
        }
    }

    PageBean.java

    package com.ssmtest.entity;
    
    import java.util.List;
    /**
     * 分页实体类
     * @author Peng
     * @Date2016年12月13日 上午9:40:10
     */
    public class PageBean<T> {
    
        private int currPage;//当前页数
        private int pageSize;//每页显示的记录数
        private int totalCount;//总记录数
        private int totalPage;//总页数
        private List<T> lists;//每页的显示的数据
    
        public PageBean() {
            super();
        }
    
        public int getCurrPage() {
            return currPage;
        }
    
        public void setCurrPage(int currPage) {
            this.currPage = currPage;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getTotalCount() {
            return totalCount;
        }
    
        public void setTotalCount(int totalCount) {
            this.totalCount = totalCount;
        }
    
        public int getTotalPage() {
            return totalPage;
        }
    
        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }
    
        public List<T> getLists() {
            return lists;
        }
    
        public void setLists(List<T> lists) {
            this.lists = lists;
        }
    
    }

    7.2 User实体类映射文件

    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="com.ssmtest.dao.UserDao">
        <!-- 先定义一个Interface,UserMapper,然后Mapper文件的namespace指向的就是这个Interface, UserInterface里定义的方法和UserMapper.xml文件中的一样,
            然后代码里直接使用接口 -->
        <resultMap id="BaseResultMap" type="com.ssmtest.entity.User">
            <id column="id" property="id" jdbcType="INTEGER"/>
            <result column="userName" property="username" jdbcType="VARCHAR"/>
            <result column="password" property="password" jdbcType="VARCHAR"/>
            <result column="email" property="email" jdbcType="VARCHAR"/>
            <result column="phone" property="phone" jdbcType="VARCHAR"/>
            <result column="roleName" property="rolename" jdbcType="VARCHAR"/>
        </resultMap>
    
        <sql id="Base_Column_List">
            id, userName, password, email, phone, roleName
        </sql>
    
        <!--根据主键查询一条用户数据 -->
        <select id="selectByPrimaryKey" resultMap="BaseResultMap"
                parameterType="java.lang.Integer">
            select
            <include refid="Base_Column_List"/>
            from tb_user
            where id = #{id,jdbcType=INTEGER}
        </select>
    
        <!--用户登录 -->
        <select id="loginByUserNameAndPassword" resultMap="BaseResultMap" parameterType="com.ssmtest.entity.User">
            select
            <include refid="Base_Column_List"/>
            from tb_user
            where
            userName = #{username}
            and password = #{password}
        </select>
    
        <!-- 根据分页数据start 和size查询数据 -->
        <select id="findByPage" parameterType="Map" resultMap="BaseResultMap">
            select
            <include refid="Base_Column_List"/>
            from tb_user
            <if test="start!=null and size!=null">
                limit #{start},#{size}
            </if>
        </select>
    
        <!--查询所有用户数据 -->
        <select id="selectUserList" resultType="com.ssmtest.entity.User">
            select
            <include refid="Base_Column_List"/>
            from tb_user
        </select>
    
        <!-- 查询用户记录总数 -->
        <select id="selectCount" resultType="int">
            select count(*) from tb_user
        </select>
    
        <!--根据主键删除一条用户数据 -->
        <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
            delete from tb_user
            where id = #{id,jdbcType=INTEGER}
        </delete>
    
        <!--插入一条完整用户数据 -->
        <insert id="insert" parameterType="com.ssmtest.entity.User">
            insert into tb_user (id, userName, password,
            email, phone, roleName
            )
            values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR},
            #{password,jdbcType=VARCHAR},
            #{email,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{rolename,jdbcType=VARCHAR}
            )
        </insert>
    
        <!--插入一条用户数据 ,可以不完整 -->
        <insert id="insertSelective" parameterType="com.ssmtest.entity.User">
            insert into tb_user
            <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="id != null">
                    id,
                </if>
                <if test="username != null">
                    userName,
                </if>
                <if test="password != null">
                    password,
                </if>
                <if test="email != null">
                    email,
                </if>
                <if test="phone != null">
                    phone,
                </if>
                <if test="rolename != null">
                    roleName,
                </if>
            </trim>
            <trim prefix="values (" suffix=")" suffixOverrides=",">
                <if test="id != null">
                    #{id,jdbcType=INTEGER},
                </if>
                <if test="username != null">
                    #{username,jdbcType=VARCHAR},
                </if>
                <if test="password != null">
                    #{password,jdbcType=VARCHAR},
                </if>
                <if test="email != null">
                    #{email,jdbcType=VARCHAR},
                </if>
                <if test="phone != null">
                    #{phone,jdbcType=VARCHAR},
                </if>
                <if test="rolename != null">
                    #{rolename,jdbcType=VARCHAR},
                </if>
            </trim>
        </insert>
    
        <!--根据主键更新一条用户数据,可以不完整 -->
        <update id="updateByPrimaryKeySelective" parameterType="com.ssmtest.entity.User">
            update tb_user
            <set>
                <if test="username != null">
                    userName = #{username,jdbcType=VARCHAR},
                </if>
                <if test="password != null">
                    password = #{password,jdbcType=VARCHAR},
                </if>
                <if test="email != null">
                    email = #{email,jdbcType=VARCHAR},
                </if>
                <if test="phone != null">
                    phone = #{phone,jdbcType=VARCHAR},
                </if>
                <if test="rolename != null">
                    roleName = #{rolename,jdbcType=VARCHAR},
                </if>
            </set>
            where id = #{id,jdbcType=INTEGER}
        </update>
    
        <!--根据主键更新一条用户数据 -->
        <update id="updateByPrimaryKey" parameterType="com.ssmtest.entity.User">
            update tb_user
            set userName = #{username,jdbcType=VARCHAR},
            password = #{password,jdbcType=VARCHAR},
            email = #{email,jdbcType=VARCHAR},
            phone = #{phone,jdbcType=VARCHAR},
            roleName = #{rolename,jdbcType=VARCHAR}
            where id = #{id,jdbcType=INTEGER}
        </update>
    </mapper>

    7.3 Dao层接口

    UserDao.java

    package com.ssmtest.dao;
    import com.ssmtest.entity.User;
    
    import java.util.HashMap;
    import java.util.List;
    
    public interface UserDao {
        /**
         * 根据主键删除一条用户数据
         * @param id
         * @return
         */
        int deleteByPrimaryKey(Integer id);
        /**
         * 插入一条用户数据 ,可以不完整
         * @param record
         * @return
         */
        int insertSelective(User record);
        /**
         * 根据主键查询一条用户数据
         * @param id
         * @return
         */
        User selectByPrimaryKey(Integer id);
        /**
         * 用户登录
         * @param record
         * @return
         */
        User loginByUserNameAndPassword(User record);
        /**
         * 根据主键更新一条用户数据,可以不完整 -
         * @param record
         * @return
         */
        int updateByPrimaryKeySelective(User record);
    
        /**
         * 查询所有用户数据
         * @return
         */
        List<User> selectUserList();
        /**
         * 查询用户记录总数
         * @return
         */
        int selectCount();
        /**
         * 分页操作,调用findByPage limit分页方法
         * @param map
         * @return
         */
        List<User> findByPage(HashMap<String,Object> map);
    }

    7.4 Service层

    UserService.java

    package com.ssmtest.service;
    
    import com.ssmtest.entity.PageBean;
    import com.ssmtest.entity.User;
    
    import java.util.List;
    /**
     * User类业务层接口
     * @author Peng
     * @Date2016年12月13日上午9:54:40
     */
    public interface UserService {
    
        int deleteByPrimaryKey(Integer id);
    
        int insertSelective(User record);
    
        User selectByPrimaryKey(Integer id);
    
        User loginByUserNameAndPassword(User record);
    
        List<User> selectUserList();
    
        int selectCount();
    
        int updateByPrimaryKeySelective(User record);
    
        PageBean<User> findByPage(int currentPage);
    }

    UserServiceImpl.java

    package com.ssmtest.service.impl;
    
    import com.ssmtest.dao.UserDao;
    import com.ssmtest.entity.PageBean;
    import com.ssmtest.entity.User;
    import com.ssmtest.service.UserService;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.HashMap;
    import java.util.List;
    /**
     * User类业务层实现类
     * @author Peng
     * @Date2016年12月13日上午9:54:56
     */
    @Service("userService")
    public class UserServiceImpl implements UserService {
    
    
        @Resource
        private UserDao userDao;
         
        public int deleteByPrimaryKey(Integer id) {
            return userDao.deleteByPrimaryKey(id);
        }
    
    
        public int insertSelective(User record) {
    
            return userDao.insertSelective(record);
        }
    
        public User selectByPrimaryKey(Integer id) {
    
            return userDao.selectByPrimaryKey(id);
        }
    
        public int updateByPrimaryKeySelective(User record) {
            return userDao.updateByPrimaryKeySelective(record);
        }
    
        public List<User> selectUserList() {
    
            return userDao.selectUserList();
        }
    
        public int selectCount() {
            return userDao.selectCount();
        }
    
        public User loginByUserNameAndPassword(User record) {
    
            return userDao.loginByUserNameAndPassword(record);
    
        }
    
        public PageBean<User> findByPage(int currentPage) {
            HashMap<String,Object> map = new HashMap<String,Object>();
            PageBean<User> pageBean = new PageBean<User>();
    
            //封装当前页数
            pageBean.setCurrPage(currentPage);
    
            //每页显示的数据
            int pageSize=2;
            pageBean.setPageSize(pageSize);
    
            //封装总记录数
            int totalCount = userDao.selectCount();
            pageBean.setTotalCount(totalCount);
    
            //封装总页数
            double tc = totalCount;
            Double num =Math.ceil(tc/pageSize);//向上取整
            pageBean.setTotalPage(num.intValue());
    
            map.put("start",(currentPage-1)*pageSize);
            map.put("size", pageBean.getPageSize());
            //封装每页显示的数据
            List<User> lists = userDao.findByPage(map);
            pageBean.setLists(lists);
    
            return pageBean;
        }
    }

    7.5 SpirngMVC 控制器

    package com.ssmtest.controller;
    
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.SessionAttributes;
    
    import com.ssmtest.entity.User;
    import com.ssmtest.service.UserService;
    
    @SessionAttributes("currentUser")
    @Controller
    public class UserController {
    
        @Resource
        private UserService userService;
        /**
         * 用户登录
         * @param user
         * @param request
         * @return
         * @throws Exception
         */
        @RequestMapping("/login")
        public String login(@RequestParam("userName")String userName,
                            @RequestParam("password")String password,Model model) throws Exception{
            User user = new User();
            user.setUsername(userName);
            user.setPassword(password);
            User userresult = userService.loginByUserNameAndPassword(user);
            if(userresult!=null){
                //登录成功
                List<User> lists = userService.selectUserList();
                model.addAttribute("userLists", lists);//回显用户信息
                model.addAttribute("currentUser", userresult.getUsername());
                return "redirect:main";
            }
            return "error";
        }
        @RequestMapping("/main")
        public String  main(@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,Model model){
            model.addAttribute("pagemsg", userService.findByPage(currentPage));//回显分页数据
            return "main";
        }
        /**
         * 跳到编辑页面
         * @param currentPage
         * @param model
         * @return
         */
        @RequestMapping("/edit")
        public String editpage(@RequestParam("id") int id,
                               Model model){
            User user =userService.selectByPrimaryKey(id);
            model.addAttribute("returnUser", user);
            return "edit";
        }
        /**
         * 保存用户数据
         * @return
         */
        @RequestMapping("/save")
        public String save(User user){
            System.out.println(user.toString());
            if(user.getId()==null){
                //id为null是保存
                userService.insertSelective(user);
            }else{
                //有id值为修改
                userService.updateByPrimaryKeySelective(user);
            }
            return "redirect:main";
        }
        /**
         * 删除用户数据
         * @param id
         * @return
         */
        @RequestMapping("/delete")
        public String delete(@RequestParam("id") int id){
            userService.deleteByPrimaryKey(id);
            return "redirect:main";
        }
        /**
         * 添加一个用户数据
         * @return
         */
        @RequestMapping("/add")
        public String add(Model model){
            model.addAttribute("returnUser", new User());
            return "edit";
        }
    }

    8.JSP 页面

    index.jsp

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
        <title>Index.jsp</title>
    <body>
    
    <h2>欢迎登陆</h2>
    
    <form action="login" method="post">
        用户名:<input type="text" name="userName"/><br>&nbsp;&nbsp;码:<input type="password" name="password"/><br>
        <input type="submit" value="登录"/>
    </form>
    
    </body>
    </html>

    mian.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>主页</title>
        <style type="text/css">
            td {
                text-align: center;
            }
    
            .td2 {
                text-align: right;
            }
    
            .table1 {
                border: 1px solid #ddd;
                width: 900px;
            }
    
            thead {
                background-color: lightblue;
            }
        </style>
    </head>
    <body>
    欢迎你:${currentUser}
    <br>
    <%-- 当前用户:${pageScope.currentUser}<!-- (只能在同一个页面中使用) --> <br>
    当前用户:${requestScope.currentUser}-${roleName} 有重定向数据就访问不到<br>
    当前用户:${sessionScope.currentUser}-${roleName} 可以使用<br> --%>
    <hr>
    <a href="add"> 添加用户</a><br>
    <c:if test="${empty requestScope.pagemsg}">
        没有任何用户信息!
    </c:if>
    <c:if test="${!empty requestScope.pagemsg}">
        <table border="1" cellpadding="10" cellspacing="0" class="table1">
            <thead>
            <tr>
                <td>编号</td>
                <td>用户名</td>
                <td>密码</td>
                <td>邮件</td>
                <td>联系电话</td>
                <td>职位</td>
                <td>Edit</td>
                <td>Delete</td>
            </tr>
            </thead>
            <c:forEach items="${requestScope.pagemsg.lists}" var="u">
                <tr>
                    <th>${u.id }</th>
                    <th>${u.username }</th>
                    <th>${u.password }</th>
                    <th>${u.email }</th>
                    <th>${u.phone }</th>
                    <th>${u.rolename }</th>
                    <th><a href="edit?id=${u.id}">Edit</a></th>
                    <th><a href="delete?id=${u.id}" onclick="return confirm('确定要删除吗')">Delete</a></th>
                </tr>
            </c:forEach>
        </table>
    </c:if>
    
    <table border="0" cellspacing="0" cellpadding="0" width="900px">
        <tr>
            <td class="td2">
                <span>第${requestScope.pagemsg.currPage }/ ${requestScope.pagemsg.totalPage}页</span>&nbsp;&nbsp;
                <span>总记录数:${requestScope.pagemsg.totalCount }&nbsp;&nbsp;每页显示:${requestScope.pagemsg.pageSize}</span>&nbsp;&nbsp;
                <span>
           <c:if test="${requestScope.pagemsg.currPage != 1}">
               <a href="${pageContext.request.contextPath }/main?currentPage=1">[首页]</a>&nbsp;&nbsp;
               <a href="${pageContext.request.contextPath }/main?currentPage=${requestScope.pagemsg.currPage-1}">[上一页]</a>&nbsp;&nbsp;
           </c:if>
    
           <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}">
               <a href="${pageContext.request.contextPath }/main?currentPage=${requestScope.pagemsg.currPage+1}">[下一页]</a>&nbsp;&nbsp;
               <a href="${pageContext.request.contextPath }/main?currentPage=${requestScope.pagemsg.totalPage}">[尾页]</a>&nbsp;&nbsp;
           </c:if>
       </span>
            </td>
        </tr>
    </table>
    </body>
    </html>

    edit.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>编辑页面</title>
    </head>
    <body>
    欢迎你:${currentUser}
    <hr>
    <form:form action="save" method="post" modelAttribute="returnUser">
        <form:hidden path="id"/>
        用户名:<form:input path="username"/><br>
        密码:<form:input path="password"/><br>
        邮件:<form:input path="email"/><br>
        联系电话:<form:input path="phone"/><br>
        职位:<form:select path="rolename">
        <form:option value="">请选择职位</form:option>
        <form:option value="客户经理">客户经理</form:option>
        <form:option value="高管">高管</form:option>
        <form:option value="销售主管">销售主管</form:option>
        <form:option value="系统管理员">系统管理员</form:option>
    </form:select><br>
        <input type="submit" value="提交"/>
    </form:form>
    </body>
    </html>

    error.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
    </head>
    <body>
    <a href="${pageContext.request.contextPath }/index.jsp">登录发生错误,请重新登录</a>
    </body>
    </html>

    以上就是源码了,复制一遍就可以跑起来啦

    访问地址:http://localhost:8080/EasySSM/

    参考https://blog.csdn.net/peng_hong_fu/article/details/53645924

      

  • 相关阅读:
    eclipse 远程debug tomcat web项目
    阿里巴巴fastjson的使用
    STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL
    Ubuntu su 认证失败
    mysql mha高可用架构的安装
    Swift开发教程--关于Existing instance variable &#39;_delegate&#39;...的解决的方法
    设计模式-适配器模式(Go语言描写叙述)
    Xcode6.3 怎样使用Leaks查看内存泄露
    java中的subString具体解释及应用
    出走三上海篇
  • 原文地址:https://www.cnblogs.com/feifeicui/p/8628401.html
Copyright © 2011-2022 走看看