精华内容
下载资源
问答
  • 基于SSM框架实现增删改查功能的一个小小系统,你可以下载。如果你没有积分的话,你可以关注码上Java公众号 ,后台回复:crud 即可获取源码文件
  • 使用SSM框架实现增删改查等功能,包括数据库文件。hhh
  • 主要介绍了Java中SSM框架实现增删改查功能代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 安装即可运行的ssm和maven框架使用,项目采取基本的ssm框架和maven配合使用的管理系统
  • Java整合SSM框架实现用户信息的和批量删除的应用实例
  • 使用SSM框架实现增删改查操作SSM整合mybatisSSM整合SpringSSM整合Spring-MVC SSM整合mybatis 首先这是我们最后整合出来的一个系统的框架,大概的所需要的内容目录如下图所示: pom.xml文件中需要导入的依赖 <...

    使用SSM框架实现增删改查操作

    SSM整合mybatis

    首先这是我们最后整合出来的一个系统的框架,大概的所需要的内容目录如下图所示:

    在这里插入图片描述
    连接的数据库相关的表
    在这里插入图片描述

    pom.xml文件中需要导入的依赖

    <dependencies>
            <!--Junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <!--数据库驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <!-- 数据库连接池 -->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
    
            <!--Servlet - JSP -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.2</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <!--Mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.2</version>
            </dependency>
    
            <!--Spring-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <!--Spring操作数据库-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.10</version>
            </dependency>
        </dependencies>
    

    面对静态资源过滤的问题我们还需要在pom.xml导入解决方案

    <!--静态资源导出问题-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
        </build>
    

    resources文件夹下建立mybatis-config.xml文件,对于整合的mybatis-config.xml文件中我们只需要将dao层的接口映射到其中即可,如下图举例

    <?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>
    
    		<!--每一个dao中的mapper文件都需要在这里进行注册-->
    		<!--这里是需要你自己建立的文件夹和相关的接口代码-->
        <mappers>
            <mapper class="com.cfx.dao.OwnerCompMapper"/>
            <mapper class="com.cfx.dao.UserMapper"/>
            <mapper class="com.cfx.dao.AdminUserMapper"/>
            <mapper class="com.cfx.dao.OwnerEditMapper"/>
            <mapper class="com.cfx.dao.OwnerMendMapper"/>
            <mapper class="com.cfx.dao.NoticeMapper"/>
        </mappers>
    
    </configuration>
    

    resources文件夹下建立database.properties文件

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/estatemanage?useSSL=true&useUnicode=true&characterEncoding=utf8
    jdbc.username=root
    jdbc.password=333
    

    resources文件夹下建立applicationContext.xml文件,这是Spring的核心文件
    代码中的三个包都是在后续建立起来之后导入其中

    <?xml version="1.0" encoding="UTF-8"?>
    <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:spring-service.xml"/>
        <import resource="classpath:spring-dao.xml"/>
        <import resource="classpath:spring-mvc.xml"/>
    
    
    </beans>
    

    SSM整合Spring

    resources文件夹下建立spring-dao.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"
           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">
    
        <!-- 配置整合mybatis -->
        <!-- 1.关联数据库文件 -->
        <context:property-placeholder location="classpath:database.properties"/>
    
        <!-- 2.数据库连接池 -->
        <!--数据库连接池
            dbcp 半自动化操作 不能自动连接
            c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
        -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <!-- 配置连接池属性 -->
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
    
    
            <!-- c3p0连接池的私有属性 -->
            <property name="maxPoolSize" value="30"/>
            <property name="minPoolSize" value="10"/>
            <!-- 关闭连接后不自动commit -->
            <property name="autoCommitOnClose" value="false"/>
            <!-- 获取连接超时时间 -->
            <property name="checkoutTimeout" value="10000"/>
            <!-- 当获取连接失败重试次数 -->
            <property name="acquireRetryAttempts" value="2"/>
        </bean>
    
        <!-- 3.配置SqlSessionFactory对象 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource"/>
            <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
        </bean>
    
        <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
    <!--MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次getMapper()方法,得到每个接口的dao对象
    service整合在spring的配置文件里,刚配置的扫描dao会自己创建好dao对象,所有直接在下面声明service就行-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 注入sqlSessionFactory -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            <!-- 给出需要扫描Dao接口包 -->
            <property name="basePackage" value="com.cfx.dao"/>
        </bean>
    
    </beans>
    

    resources文件夹下建立spring-service.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"
           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.xsd">
    
        <!--在Spring中来创建对象,在Spring中称为Bean-->
        <!-- 扫描service相关的bean-->
        <context:component-scan base-package="com.cfx.service"/>
    
        <!--DI依赖注入
            依赖:Bean对象的创建依赖于容器
            注入:Bean对象中所有属性由容器来注入!
        -->
    
    
        <!--OwnerCompServiceImpl注入到IOC容器中 ref:引用Spring容器中创建好的对象-->
        <bean id="OwnerCompServiceImpl" class="com.cfx.service.OwnerCompServiceImpl">
            <property name="ownerCompMapper" ref="ownerCompMapper"/>
        </bean>
        <bean id="UserServiceImpl" class="com.cfx.service.UserServiceImpl">
            <property name="userMapper" ref="userMapper"/>
        </bean>
        <bean id="AdminUserServiceImpl" class="com.cfx.service.AdminUserServiceImpl">
            <property name="adminUserMapper" ref="adminUserMapper"/>
        </bean>
        <bean id="OwnerEditServiceImpl" class="com.cfx.service.OwnerEditServiceImpl">
            <property name="ownerEditMapper" ref="ownerEditMapper"/>
        </bean>
        <bean id="OwnerMendServiceImpl" class="com.cfx.service.OwnerMendServiceImpl">
            <property name="ownerMendMapper" ref="ownerMendMapper"/>
        </bean>
       <bean id="NoticeServiceImpl" class="com.cfx.service.NoticeServiceImpl">
           <property name="noticeMapper" ref="noticeMapper"/>
       </bean>
    
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource" />
        </bean>
    
    
    
    
    </beans>
    

    SSM整合Spring-MVC

    resources文件夹下建立spring-mvc.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"
           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.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!-- 配置SpringMVC -->
        <!-- 1.开启SpringMVC注解驱动 配置了这个之后就不需要再手动
         配置HandlerMapping和HandlerAdapter-->
        <mvc:annotation-driven />
        <!-- 2.静态资源默认servlet配置 例如.css .js .html-->
        <mvc:default-servlet-handler/>
    
        <!-- 3.配置jsp 显示ViewResolver视图解析器
         拼接视图名字,找到对应的视图/WEB-INF/jsp/xxx.jsp
         将数据渲染到找到的视图上去-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    
        <!-- 4.扫描web相关的bean  扫描controller包下的所有注解 -->
        <context:component-scan base-package="com.cfx.controller" />
    
    </beans>
    

    同时web.xml文件同时需要配置DispatcherServlet

    <?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">
        <!--配置DispatcherServlet:这个是springMVC的核心:请求分发器,前端控制器-->
        <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--DispatcherServlet要绑定spring的配置文件-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!--匹配所有的请求-->
        <servlet-mapping>
            <servlet-name>DispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <!--encodingFilter过滤器-->
        <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>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!--Session过期时间-->
        <session-config>
            <session-timeout>15</session-timeout>
        </session-config>
    </web-app>
    
    展开全文
  • ssm框架实现增删改查

    2016-09-23 17:31:56
    用spring、springmvc、mybatis完成基本的增删改查,注释明确代码简单可用来学习
  • 使用SSM框架实现增删改查

    千次阅读 多人点赞 2018-10-06 00:24:14
    springmvc的理解:... 本项目的jsp页面使用bootstrap前端框架:https://blog.csdn.net/qq_41879385/article/details/82431238 编译器eclipse,数据库MySQL5.5.25,jdk1.8,tomca...

     

    springmvc的理解:https://blog.csdn.net/qq_41879385/article/details/82885516
    
    本项目的jsp页面使用bootstrap前端框架:https://blog.csdn.net/qq_41879385/article/details/82431238
    
    编译器eclipse,数据库MySQL5.5.25,jdk1.8,tomcat7.0
    
    MySQL5.5.25安装教程:https://mp.csdn.net/postedit/82215828
    
    在项目中用到的二维码:https://blog.csdn.net/qq_41879385/article/details/81625354

     整合项目的时候,整个页面会比较长,所以难免会出现一些不耐烦,没耐心的看,旁边就有我的QQ号啊,直接找我要源码不就行了哈哈。不过我还是建议耐心静下心来看,真的对你帮助很大,要源码的这种方式应该属于初学者。

    项目名为:小说书籍网,有问题或者想找我要源码的,都可以到旁边有个我的联系方式。备注CSDN博客。

    一、目录结构:

     

    二、数据库

    数据库设计,数据脚本下载:https://download.csdn.net/download/qq_41879385/10696480,因为博客已经没有免费下载的功能了,所以C币只选最少的,1个就行。

     三、项目开始

    在pojo包中创建Novel.java(代表novel表)、Coltype.java(代表coltype),当然,里面的字段、类型跟这两张表是一样的。

    但是我还要再加一张表:PageNovel.java,这个是分页的表,呃,实体类的话大家都会,我这里就不在贴出来了。贴出一个分页的类:

    PageNovel.java:

    package cn.item.pojo;
    
    public class PageNovel {
    	private String novelName;
    	private String novelColumn;
    	private Integer page = 1;
    	private Integer start;
    	private Integer size = 10;
    	
    	public String getNovelName() {
    		return novelName;
    	}
    	public void setNovelName(String novelName) {
    		this.novelName = novelName;
    	}
    	public String getNovelColumn() {
    		return novelColumn;
    	}
    	public void setNovelColumn(String novelColumn) {
    		this.novelColumn = novelColumn;
    	}
    	public Integer getPage() {
    		return page;
    	}
    	public void setPage(Integer page) {
    		this.page = page;
    	}
    	public Integer getStart() {
    		return start;
    	}
    	public void setStart(Integer start) {
    		this.start = start;
    	}
    	public Integer getSize() {
    		return size;
    	}
    	public void setSize(Integer size) {
    		this.size = size;
    	}
    
    }
    

    在Java Resources下创建一个与src同路径的文件夹config,注意包的名字

    在config下创建ApplicationContext-dao.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    	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-4.0.xsd
    	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
    	<!-- 加载配置文件 -->
    	<context:property-placeholder location="classpath:db.properties" />
    	<!-- 数据库连接池 -->
    	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
    		destroy-method="close">
    		<property name="driverClassName" value="${jdbc.driver}" />
    		<property name="url" value="${jdbc.url}" />
    		<property name="username" value="${jdbc.username}" />
    		<property name="password" value="${jdbc.password}" />
    		<property name="maxActive" value="10" />
    		<property name="maxIdle" value="5" />
    	</bean>
    	
    	<!-- mapper配置 -->
    	<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<!-- 数据库连接池 -->
    		<property name="dataSource" ref="dataSource" />
    		<!-- 加载mybatis的全局配置文件 -->
    		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
    	</bean>
    	
    	<!-- 配置Mapper扫描器 -->
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage" value="cn.item.dao"/>
    	</bean>
    
    </beans>
    

    ApplicationContext-service.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    	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-4.0.xsd
    	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
    	<!-- @Service扫描 -->
    	<context:component-scan base-package="cn.item.service"></context:component-scan>
    </beans>

    ApplicationContext-trans.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    	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-4.0.xsd
    	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
    	<!-- 事务管理器 -->
    	<bean id="transactionManager"
    		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<!-- 数据源 -->
    		<property name="dataSource" ref="dataSource" />
    	</bean>
    	
    	<!-- 通知 -->
    	<tx:advice id="txAdvice" transaction-manager="transactionManager">
    		<tx:attributes>
    			<!-- 传播行为 -->
    			<tx:method name="save*" propagation="REQUIRED" />
    			<tx:method name="insert*" propagation="REQUIRED" />
    			<tx:method name="delete*" propagation="REQUIRED" />
    			<tx:method name="update*" propagation="REQUIRED" />
    			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
    		</tx:attributes>
    	</tx:advice>
    	
    	<!-- 切面 -->
    	<aop:config>
    		<aop:advisor advice-ref="txAdvice"
    			pointcut="execution(* cn.item.service.*.*(..))" />
    	</aop:config>
    	
    </beans>

    db.properties:

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/你的表名写这?characterEncoding=utf-8
    jdbc.username=root
    jdbc.password=你的密码写这

    log4j.properties:

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    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:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
        
        <!-- 引入字典资源文件 -->
        <context:property-placeholder location="classpath:resource.properties"/>
        
        <!-- @Controller注解扫描 -->
        <context:component-scan base-package="cn.item.controller"></context:component-scan>
        
        <!-- 注解驱动:
        		替我们显示的配置了最新版的注解的处理器映射器和处理器适配器 -->
        <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
        
        <!-- 配置视图解析器 
    	作用:在controller中指定页面路径的时候就不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称
    	-->
    	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<!-- 真正的页面路径 =  前缀 + 去掉后缀名的页面名称 + 后缀 -->
    		<!-- 前缀 -->
    		<property name="prefix" value="/WEB-INF/jsp/"></property>
    		<!-- 后缀 -->
    		<property name="suffix" value=".jsp"></property>
    	</bean>
    	
    	<!-- 配置自定义转换器
    	注意: 一定要将自定义的转换器配置到注解驱动上
    	-->
    	<bean id="conversionService"
    		class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    
    	</bean>
    	
    	
    </beans>
    

    SqlMapConfig.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>
    	
    </configuration>
    

     web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>NovelBook</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:ApplicationContext-*.xml</param-value>
      </context-param>
      <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.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
        <servlet-name>springMvc</servlet-name>
        <url-pattern>*.action</url-pattern>
      </servlet-mapping>
      <filter>
        <filter-name>CharacterEncodingFilter</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>
      </filter>
      <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>

    以上的是配置文件,其实我都是直接复制的,然后在修改一下里面的一些包名。注意包名

    业务层:service:

    NovelService.java:

    package cn.item.service;
    
    import java.util.List;
    
    import cn.item.pojo.Coltype;
    import cn.item.pojo.Novel;
    import cn.item.pojo.PageNovel;
    
    public interface NovelService {
    	
    	public List<Coltype> findDictByCode(String code);  
    	
    	public List<Novel> findCustomerByVo(PageNovel vo);
    	public Integer findCustomerByVoCount(PageNovel vo);
    
    	public Novel findNovelById(Long id);
    	
    	public void updateNovelById(Novel novel);
    	
    	public void deleteNovelById(long id);
    	
    	public void insertNovelById(Novel novel);
    
    }
    

    NovelServiceImpl.java:

    package cn.item.service;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import cn.item.dao.DictMapper;
    import cn.item.dao.NovelMapping;
    import cn.item.pojo.Coltype;
    import cn.item.pojo.Novel;
    import cn.item.pojo.PageNovel;
    
    @Service
    public class NovelServiceImpl implements NovelService{
    	
    	@Autowired
    	private DictMapper dictMapper;
    	@Autowired
    	private NovelMapping novelMapping;
    	
    	@Override
    	public List<Coltype> findDictByCode(String code) {
    		List<Coltype> list = dictMapper.findDictByCode(code);
    		return list;
    	}
    	
    	@Override
    	public List<Novel> findCustomerByVo(PageNovel vo) {
    		List<Novel> list = novelMapping.findCustomerByVo(vo);
    		return list;
    	}
    
    	@Override
    	public Integer findCustomerByVoCount(PageNovel vo) {
    		Integer count = novelMapping.findCustomerByVoCount(vo);
    		return count;
    	}
    
    	@Override
    	public Novel findNovelById(Long id) {
    		Novel novel = novelMapping.findNovelById(id);
    		return novel;
    	}
    
    	@Override
    	public void updateNovelById(Novel novel) {
    		novelMapping.updateNovelById(novel);
    	}
    
    	@Override
    	public void deleteNovelById(long id) {
    		novelMapping.deleteNovelById(id);
    	}
    
    	@Override
    	public void insertNovelById(Novel novel) {
    		novelMapping.insertNovelById(novel);
    	}
    	
    }
    

    数据访问层:dao,也有人用Mapping,都可以:

    NovelMapping.java:是小说主表的sql语句的方法,方法名是与service相同的:

    package cn.item.dao;
    
    import java.util.List;
    
    import cn.item.pojo.Novel;
    import cn.item.pojo.PageNovel;
    
    public interface NovelMapping {
    	
    	public List<Novel> findCustomerByVo(PageNovel vo);
    	public Integer findCustomerByVoCount(PageNovel vo);
    	
    	public Novel findNovelById(Long id);
    	
    	public void updateNovelById(Novel novel);
    	
    	public void deleteNovelById(long id);
    	
    	public void insertNovelById(Novel novel);
    
    }
    

    接下就写映射文件:NovelMapping.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.item.dao.NovelMapping">
      	
    	<sql id="novel_where">
    		<where>
    			<if test="novelName !=null and novelName !='' ">
    				and a.novel_name LIKE '%${novelName}%'
    			</if>
    			<if test="novelColumn !=null and novelColumn !='' ">
    				and a.novel_column=#{novelColumn}
    			</if>
    		</where>
    	</sql>
    
    	<select id="findCustomerByVo" parameterType="cn.item.pojo.PageNovel" resultType="cn.item.pojo.Novel">
    		SELECT a.`novel_id`,a.`novel_name`,a.`author_name`,a.`author_Introduction`,
    		a.`novel_content`,b.`col_name` novel_column
    		FROM `novel` a
    		LEFT JOIN `coltype` b ON a.`novel_column` = b.`col_id`
    		
    		<include refid="novel_where"></include>
    		
    		LIMIT #{start},#{size}
    		
    	</select>
    	
    	<select id="findCustomerByVoCount" parameterType="cn.item.pojo.PageNovel" resultType="int">
    		SELECT COUNT(*)
    		FROM novel a
    		LEFT JOIN coltype c ON a.novel_column = c.col_id
    		<include refid="novel_where"></include>
    	</select>
    	
    	<select id="findNovelById" parameterType="long" resultType="cn.item.pojo.Novel">
    		SELECT * FROM novel WHERE novel_id=#{id}
    	</select>
    	
    	<update id="updateNovelById" parameterType="cn.item.pojo.Novel">
    		UPDATE novel
    		<set>
    			<if test="novel_name !=null and novel_name !='' ">
    				novel_name=#{novel_name},
    			</if>
    			<if test="novel_column !=null and novel_column !='' ">
    				novel_column=#{novel_column},
    			</if>
    			<if test="author_name !=null and author_name !='' ">
    				author_name=#{author_name},
    			</if>
    			<if test="author_Introduction !=null and author_Introduction !='' ">
    				author_Introduction=#{author_Introduction},
    			</if>
    			<if test="novel_content !=null and novel_content !='' ">
    				novel_content=#{novel_content},
    			</if>
    		</set>
    		WHERE novel_id=#{novel_id}
    	</update>
    	
    	<delete id="deleteNovelById" parameterType="long">
    		delete from novel where novel_id =#{id}
    	</delete>
    	
    	<insert id="insertNovelById" parameterType="cn.item.pojo.Novel">
    		INSERT INTO `novel`(`novel_name`,`novel_column`,`author_name`,`author_Introduction`,`novel_content`)
    		VALUE(#{novel_name},#{novel_column},#{author_name},#{author_Introduction},#{novel_content});
    	</insert>
    	
    </mapper>

    接下就写DictMapper.java,这个类是为了下拉做的:

    package cn.item.dao;
    
    import java.util.List;
    
    import cn.item.pojo.Coltype;
    
    public interface DictMapper {
    	public List<Coltype> findDictByCode(String code);
    	
    }
    

    DictMapper.java的映射文件:DictMapper.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.item.dao.DictMapper">
    	<select id="findDictByCode" parameterType="string" resultType="cn.item.pojo.Coltype">
    		select * from coltype a WHERE a.col_enable=1 AND a.col_code=#{code} ORDER BY a.col_sort
    	</select>
    </mapper>

    那么,实体类、数据访问层、业务层都写好了,接下可以写控制层:NovelController.java

    package cn.item.controller;
    
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    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 cn.itcast.utils.Page;
    import cn.item.dao.NovelMapping;
    import cn.item.pojo.Coltype;
    import cn.item.pojo.Novel;
    import cn.item.pojo.PageNovel;
    import cn.item.service.NovelService;
    
    @Controller
    @RequestMapping("/novel")
    public class NovelController {
    	@Resource
    	private NovelMapping novelMapping;
    	
    	@Autowired
    	private NovelService novelService;
    	
    	@Value("${novel.col.name}")
    	private String column;
    	
    	@RequestMapping("/list")
    	public String list(PageNovel vo,Model model) throws Exception{
    		
    		//小说类型
    		List<Coltype> columnList=novelService.findDictByCode(column);
    		
    		if(vo.getNovelName()!=null){
    			vo.setNovelName(new String(vo.getNovelName().getBytes("iso8859-1"),"utf-8"));
    		}
    		if(vo.getPage()==null){
    			vo.setPage(1);
    		}
    		
    		vo.setStart((vo.getPage() - 1) * vo.getSize());
    		
    		//查询数据库的全部数据
    		List<Novel> resultList = novelService.findCustomerByVo(vo);
    		Integer count = novelService.findCustomerByVoCount(vo);
    		
    		Page<Novel> page= new Page<Novel>();
    		page.setTotal(count);			//总条数
    		page.setSize(vo.getSize()); 	//每页显示条数
    		page.setPage(vo.getPage());		//总页数
    		page.setRows(resultList);		//分页的数据
    		
    		model.addAttribute("page", page);
    		
    		//下拉菜单
    		model.addAttribute("fromType", columnList);
    		
    		model.addAttribute("novelName", vo.getNovelName());
    		model.addAttribute("novelcolumn", vo.getNovelColumn());
    		
    		return "novel";
    	}
    	
    	@RequestMapping("/detail")
    	@ResponseBody
    	public Novel detail(Long id) throws Exception{
    		Novel novel = novelService.findNovelById(id);
    		return novel;
    	}
    	
    	@RequestMapping("/update")
    	public String update(Novel novel) throws Exception{
    		novelService.updateNovelById(novel);
    		return "novel";
    	}
    	
    	@RequestMapping("/delete")
    	public String delete(long id) throws Exception{
    		novelService.deleteNovelById(id);
    		return "novel";
    	}
    	
    	@RequestMapping("/insert")
    	public String insert(Novel novel) throws Exception{
    		novelService.insertNovelById(novel);
    		return "novel";
    	}
    	
    }
    

    嗯,控制层就这么一个:接下来可以写jsp了。

    第一步,在WEB-INF下创建jsp文件夹,里面创建novel.jsp,在SpringMvc.xml中已经配置完整视图解析器了。

    novel.jsp头部创建c标签:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    下面是完整的jsp页面代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ page trimDirectiveWhitespaces="true"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    
    <title>网站</title>
    
    <style type="text/css">
    		#qrcode-wrapper{
    			position:absolut;
    	        left:80px;
    	        top:500px;
    		}
    </style>
    
    <!-- Bootstrap Core CSS -->
    <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet">
    
    <!-- MetisMenu CSS -->
    <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet">
    
    <!-- DataTables CSS -->
    <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet">
    
    <!-- Custom CSS -->
    <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet">
    
    <!-- Custom Fonts -->
    <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet"
    	type="text/css">
    <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet"
    	type="text/css">
    
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
        
        
    
    </head>
    
    <body>
    
    	<div id="wrapper">
    	
    		<div id="qrcode-wrapper" beoder="1">
    			<div id="qrcodeCanvas"></div>
    		</div>
    		
    		<div id="page-wrapper">
    			<div class="row">
    				<div class="col-lg-12">
    					<h1 class="page-wrapper">小说书籍网</h1>
    				</div>
    				
    				<!-- /.col-lg-12 -->
    			</div>
    			<!-- /.row -->
    			
    			<div class="panel panel-default">
    				<div class="panel-body">
    					<form class="form-inline" action="${pageContext.request.contextPath }/novel/list.action" method="get">
    						<div class="form-group">
    							<label for="novelauthorname">小说名称</label>
    							<input type="text" class="form-control" id="novelauthorname" value="${novelName}" name="novelName"></input>
    						</div>
    						&nbsp;
    						<div class="form-group">
    							<label for="novelColumnFrom">选择小说类型</label> 
    							<select	class="form-control" id="novelColumnFrom" name="novelColumn">
    								<option value="">--请选择--</option>
    								<c:forEach items="${fromType}" var="item">
    									<option value="${item.col_id}"<c:if test="${item.col_id == novelColumn}"> selected</c:if>>${item.col_name }</option>
    								</c:forEach>
    							</select>
    						</div>
    						<button type="submit" class="btn btn-primary">查询</button>
    						<div class="btn btn-primary" data-toggle="modal" data-target="#novelInsert" onclick="editNovel(${row.zeng_id})">新增小说</div>			
    					</form>
    				</div>
    			</div>
    			
    			<div class="row">
    				<div class="col-lg-12">
    					<div class="panel panel-default">
    						<div class="panel-heading">小说书籍网</div>
    						<!-- /.panel-heading -->
    						<table class="table table-bordered table-striped">
    							<thead>
    								<tr>
    									<th>ID</th>
    									<th>小说名称</th>
    									<th>所属栏目</th>
    									<th>小说作者</th>
    									<th>作者简介</th>
    									<th>小说摘要</th>
    									<th>操作</th>
    								</tr>
    							<!--  </thead>-->
    							<tbody>
    								<c:forEach items="${page.rows}" var="row">
    									<tr>
    										<td>${row.novel_id}</td>
    										<td>${row.novel_name}</td>
    										<td>${row.novel_column}</td>
    										<td>${row.author_name}</td>
    										<td>${row.author_Introduction}</td>
    										<td>${row.novel_content}</td>
    										<td>
    											<a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#novelUpdate" onclick="editNovel(${row.novel_id})">修改</a>
    											<a href="#" class="btn btn-danger btn-xs" onclick="deleteNovel(${row.novel_id})">删除</a>
    										</td>
    									</tr>
    								</c:forEach>
    							</tbody>
    						</table>
    						<div class="col-md-12 text-right">
    							<itcast:page url="${pageContext.request.contextPath }/novel/list.action" />
    						</div>
    						<!-- /.panel-body -->
    					</div>
    					<!-- /.panel -->
    				</div>
    				<!-- /.col-lg-12 -->
    			</div>
    		</div>
    		<!-- /#page-wrapper -->
    
    	</div>
    	
    	<!-- 修改小说对话框 -->
    	<div class="modal fade" id="novelUpdate" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    		<div class="modal-dialog" role="document">
    			<div class="modal-content">
    				<!-- 对话框头部信息 -->
    				<div class="modal-header">
    					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    						<span aria-hidden="true">&times;</span>
    					</button>
    					<h4 class="modal-title" id="myModalLabel">修改小说图书信息</h4>
    				</div>
    				<!-- 对话框字段 -->
    				<div class="modal-body">
    					<form class="form-horizontal" id="edit_novel_form">
    					
    						<input type="hidden" id="edit_novel_id" name="novel_id"/>
    						<div class="form-group">
    							<label for="edit_novel_Name" class="col-sm-2 control-label">小说名称</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_novel_Name" placeholder="小说名称" name="novel_name">
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_novelColumnFrom" style="float:left;padding:7px 15px 0 27px;">小说类型</label>
    							<div class="col-sm-10">
    								<select class="form-control" id="edit_novelColumnFrom" placeholder="小说类型" name="novel_column">
    									<option value="">--请选择--</option>
    									<c:forEach items="${fromType}" var="item">
    										<option value="${item.col_id}"<c:if test="${item.col_id == novelColumnFrom}"> selected</c:if>>${item.col_name }</option>
    									</c:forEach>
    								</select>
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_author_name" class="col-sm-2 control-label">小说作者</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_author_name" placeholder="小说作者" name="author_name">
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_author_Introduction" class="col-sm-2 control-label">作者简介</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_author_Introduction" placeholder="作者简介" name="author_Introduction">
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_novel_content" class="col-sm-2 control-label">小说内容</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_novel_content" placeholder="小说内容摘要" name="novel_content">
    							</div>
    						</div>
    						
    					</form>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    					<button type="button" class="btn btn-primary" onclick="updateNovelById()">确定修改小说书籍信息</button>
    				</div>
    			</div>
    		</div>
    	</div>
    	<!-- /#wrapper -->
    	
    	<!-- 添加小说对话框 -->
    	<div class="modal fade" id="novelInsert" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    		<div class="modal-dialog" role="document">
    			<div class="modal-content">
    				<!-- 对话框头部信息 -->
    				<div class="modal-header">
    					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    						<span aria-hidden="true">&times;</span>
    					</button>
    					<h4 class="modal-title" id="myModalLabel">添加小说书籍</h4>
    				</div>
    				<!-- 对话框字段 -->
    				<div class="modal-body">
    					<form class="form-horizontal" id="edit_novel_zeng">
    						<input type="hidden" id="edit_novel_id" name="zeng_id"/>
    						<div class="form-group">
    							<label for="edit_novel_Name" class="col-sm-2 control-label">小说名称</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_novel_Name" placeholder="小说名称" name="novel_name">
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_novelColumnFrom" style="float:left;padding:7px 15px 0 27px;">小说类型</label>
    							<div class="col-sm-10">
    								<select class="form-control" id="edit_novelColumnFrom" placeholder="小说类型" name="novel_column">
    									<option value="">--请选择--</option>
    									<c:forEach items="${fromType}" var="item">
    										<option value="${item.col_id}"<c:if test="${item.col_id == novelColumnFrom}"> selected</c:if>>${item.col_name }</option>
    									</c:forEach>
    								</select>
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_author_name" class="col-sm-2 control-label">小说作者</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_author_name" placeholder="小说作者" name="author_name">
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_author_Introduction" class="col-sm-2 control-label">作者简介</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_author_Introduction" placeholder="作者简介" name="author_Introduction">
    							</div>
    						</div>
    						<div class="form-group">
    							<label for="edit_novel_content" class="col-sm-2 control-label">小说内容</label>
    							<div class="col-sm-10">
    								<input type="text" class="form-control" id="edit_novel_content" placeholder="小说内容摘要" name="novel_content">
    							</div>
    						</div>
    						
    					</form>
    				</div>
    				<div class="modal-footer">
    					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
    					<button type="button" class="btn btn-primary" onclick="insertNovelById()">确定添加小说书籍</button>
    				</div>
    			</div>
    		</div>
    	</div>
    	<!-- /#wrapper -->
    
    	<!-- jQuery -->
    	<script src="<%=basePath%>js/jquery.min.js"></script>
    	
    	<!-- QRCode -->
    	<script src="<%=basePath%>js/jquery-1.11.1.js"></script>
    	<script src="<%=basePath%>js/jquery.qrcode.js"></script>
    	<script src="<%=basePath%>js/qrcode.js"></script> 
    	<script src="<%=basePath%>js/utf.js"></script>
    
    	<!-- Bootstrap Core JavaScript -->
    	<script src="<%=basePath%>js/bootstrap.min.js"></script>
    
    	<!-- Metis Menu Plugin JavaScript -->
    	<script src="<%=basePath%>js/metisMenu.min.js"></script>
    
    	<!-- DataTables JavaScript -->
    	<script src="<%=basePath%>js/jquery.dataTables.min.js"></script>
    	<script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script>
    
    	<!-- Custom Theme JavaScript -->
    	<script src="<%=basePath%>js/sb-admin-2.js"></script>
    	
    	<script type="text/javascript">
    	
    		function editNovel(id) {
    			$.ajax({
    				type:"get",
    				url:"<%=basePath%>novel/detail.action",
    				data:{"id":id},
    				success:function(data) {
    					$("#edit_novel_id").val(data.novel_id);
    					$("#edit_novel_name").val(data.novel_name);
    					$("#edit_novelColumnFrom").val(data.novel_column)
    					$("#edit_author_name").val(data.author_name);
    					$("#edit_author_Introduction").val(data.author_Introduction);
    					$("#edit_novel_content").val(data.novel_content)
    				}
    			});
    		}
    		
    		function updateNovelById() {
    			$.post("<%=basePath%>novel/update.action",$("#edit_novel_form").serialize(),function(data){
    				alert("小说图书书籍更新成功!");
    				window.location.reload();
    			});
    		}
    		
    		function deleteNovel(id) {
    			if(confirm('确实要删除该客户吗?')) {
    				$.post("<%=basePath%>novel/delete.action",{"id":id},function(data){
    					alert("小说删除更新成功!");
    					window.location.reload();
    				});
    			}
    		}
    		
    		function insertNovelById(){
    			$.post("<%=basePath%>novel/insert.action",$("#edit_novel_zeng").serialize(),function(data){
    				alert("新增小说书籍成功");
    				window.location.reload();
    			})
    		}
    
    		jQuery('#qrcodeCanvas').qrcode({
    	        text: "https://blog.csdn.net/qq_41879385",
    	        width: "110",               //二维码的宽度
    	        height: "110",              //二维码的高度
    	        background: "#ffffff",      //二维码的后景色
    	        foreground: "#000000",      //二维码的前景色
    	        src: "<%=basePath%>image/xingkong.jpg" 	//二维码中间的图片
    		});
    		
    	</script>
    </body>
    
    </html>
    

    运行效果:数据可能有点少,因为我之前数据库重装结果一不小心就把整个数据库的文件全部删除了,当时我真的心痛啊,编写了2年是SQL语句一下子全部没了,我叫那个心痛啊,不过还好本人数据库还算牛逼一点嘻嘻,很快有些了一个数据,呃,在我给的数据库脚本中是有添加的SQL语句的,用那些sql语句就可以添加了。

    这个页面是有用到bootstrap的,在本文章的头部就有贴出bootstrap的使用教程。

     增加效果:利用了bootstrap的模态框效果:

    修改也是一样的:但是修改功能有个小细节,在点击修改的时候,在模态框都会显示不同数据的不同数据,什么意思呢,就比如你点8号的修改,在跳出来的模态框就回显示8号的数据信息,而点击7号的修改按钮,就会显示7号的数据信息。

     下拉查询:

     条件查询:

     自此,本项目的整合就到这里了,谢谢点赞,如有问题欢迎评论,我随时都会上博客。

    附上源码下载地址:百度网盘。代码有问题及时联系我QQ3506346737,尽快修正。

    链接:https://pan.baidu.com/s/1h5iIuyZHL0jCXibahB53jg 
    提取码:7kia

    展开全文
  • 一套基于SpringBoot+SSM框架增删改查模板。适合新手学习SSM
  • SSM(Spring+SpringMVC+Mybatis)框架使用SSM框架搭建Web服务器实现登录功能,这是一个很简单的demo
  • java语言SSM框架实现增删改查

    万次阅读 2017-12-27 17:10:56
    通过这段时期的学习,对整体框架的使用、个人理解及增删改查功能的实现进行一个梳理。 先对整体框架进行一个概括: @Controller此标识标致该类需要被扫描。 @RequestMapping此标识中的值是需要访问的url路径。 @...

    整个项目布置如下
    这里写图片描述
    具体的配置不再细讲遵循其他博客网站进行配置
    总结
    通过这段时期的学习,对整体框架的使用、个人理解及增删改查功能的实现进行一个梳理。
    先对整体框架进行一个概括:
    @Controller此标识标致该类需要被扫描。
    @RequestMapping此标识中的值是需要访问的url路径。
    @ModelAttribute此标识为需要从from表单中获取。
    一、SpringMVC三个层的编辑(以数据库的增删改查为例)
    Bean包:创建实体类
    首先创建TestSave类,该类为实体类,可以将需要的属性全都放置进来,其中包括id(序号);code(编号);username(用户名);password(密码)四个属性,继承BaseEntity类,并进行getter和setter。
    这里写图片描述
    Action包:控制层
    在该包下新建一个类TestAction类,该类继承了BaseAction类,也是前端和后台交互的一个桥梁,在该类下,对其进行@Controller和@RequestMapping标注,表名此类的作用和url请求路径。在该类中需要调用服务层中的TestService类,可以通过调用该类中的方法进行实现功能。
    这里写图片描述
    service包:即服务层(实现层),在该包中,可以对具体的功能进行编辑实现。在该包下,需要创建两个类,其一是TestService.java类,该类继承了BaseService类;其二是TestServiceImpl.java类,该类继承了BaseServiceImpl类,而且该类是实现类,需要对TestService进行实现,在该类中还需要调用MybatisBaseDaoImpl类,此类中是已经写好了的增删改查方法,我们只需找到需要的方式,然后调用该类中的方法即可。
    TestService.java类:
    这里写图片描述
    TestServiceImpl.java类:
    这里写图片描述
    至此,SpringMVC三个类我们已经创建好了。
    二、前后端交互
    当类创建好之后,如何使得前后端交互呢?
    1、创建一个界面
    在src/main/webapp/WEB_INF/views/sys/下创建一个hello.jsp界面,并将字符编码改为utf-8,在该界面中加入

    你好


    这里写图片描述
    2、TestAction.java类处理
    这里写图片描述
    在TestAction.java类中进行响应界面处理,即在类中定义一个list方法,使用@RequestMapping注释并且赋值,然后返回的是sys路径下的hello.jsp界面。
    访问http://localhost:8080/platform-v3.0/a/sys/test/list
    这里写图片描述
    可以看到,浏览器中可以访问到我们新建的hello.jsp界面,至此,前端和后台的交互完成。
    三、增删改查功能的实现
    在界面路径下新建一个sql.jsp界面,该界面可以进行增删改查数据的显示,如图所示:
    这里写图片描述
    1、数据添加
    在界面中添加一个“数据添加”按钮功能,点击该按钮则弹出一个框体,在框体内输入数据进行数据添加。如图:
    这里写图片描述
    数据添加窗口
    如何实现弹出窗口:
    a、在界面路径下新建一个sqlForm.jsp界面,该界面就如上图所示
    b、在点击该按钮时,需要触发一个事件(请求url),我们需要在按钮点击后,向后台发送一个url请求,请求的路径如下所示。
    这里写图片描述
    c、当前台发起一个url请求后,后台需要进行响应,那就应该在控制层的TestAction.java类中进行响应,需要返回窗体界面,该部分代码如下所示:
    这里写图片描述
    d、当进行把数据填写完毕后,如何提交呢?需要用到一个方法即addRow,在该方法中我们定义了提交方式,通过url的请求来进行数据存储。
    这里写图片描述
    e、在sqlForm.jsp中,我们定义了一个action,需要进行什么动作(请求的路径),通过请求此url,可以对数据进行添加操作。
    这里写图片描述
    图中的id作用是在通过js方式进行调用,来呈现数据正在提交的效果,modelAttribute则在后台进行注释,表示每次操作都要从此实体类中进行数据获取。
    @modelAttribute作用如下
    这里写图片描述
    f、因为用到了保存数据功能的实现,则需要在service层中进行功能实现。由于TestService.java类继承了BaseService类,该类中有save方法,我们只需在TestServiceImpl.java实现类中进行实现数据存储,通过调用mybatisBaseDaoImpl类中的通过sql语句进行数据添加方法来达到数据增加功能。
    这里写图片描述
    g、当实现类中的功能编辑好之后,就可以在控制层中对该方法进行调用,通过前台传过来的url请求,在TestAction.java类中创建新的方法,通过“save”标签来表名访问的是该方法,在该方法中调用已经在实现类中写好的save()方法,实现数据添加功能。
    这里写图片描述
    至此,数据添加功能完毕。
    2、数据查询
    数据查询总的来说有以下的流程:
    (1)前台填写需要查找的数据;
    (2)通过url请求,并将参数传递到后台;
    (3)后台做出响应(通过查询数据库获取数据),将数据返回给前台;
    (4)前台接受数据,并进行展示。
    a 前台进行参数传递
    这里写图片描述
    这里写图片描述
    在文本框内填写要查询的数据,通过点击查询按钮,调用search()方法(该方法在common.js中)通过form表单的id来进行参数传递,通过请求aciton中的路径来达到想后台传递参数的效果。
    b 后台如何相应
    在实现类中,需要对查询功能进行编辑实现,创建一个getByid()方法,由于查询出来的数据需要进行展示,所以,返回的类型应该是一个列表。
    这里写图片描述
    c 在控制层需要对该方法进行调用,需要注意的是,在该方法中还调用了Page方法,该方法有两种作用,其一是将数据翻页展示;其二是通过此方法,达到向前台传递查询结果的作用。
    这里写图片描述
    d 前台数据展示
    在前台界面创建需要显示的数据属性名称,数据在前台展示的时候,需要注意的是所有的属性名称要和后台传递的参数对应上,否则就会出现数据不能正常展示的情况。
    这里写图片描述
    通过page属性来获取后台传递过来的数据进行展示。
    3 数据删除
    删除数据的大体流程为:前台将需要删除的数据传递到后台,后台接受到数据之后,通过该数据的主键来执行sql语句,进行删除数据。具体流程如下:
    前台代码如下:
    这里写图片描述
    前台在发起一次url请求的同时,也携带着该数据的主键一起发送到后台,后台接收到该请求后,通过调用TestServiceImpl.java中的delete()方法进行删除,在删除之前需要进行传递过来的参数是否为空,不为空则执行删除,删除成功后,返回一个“成功”的界面。
    TestServiceImpl.java中delete方法如下
    这里写图片描述

    TestAction.java类中调用delete方法代码如下:
    这里写图片描述
    至此,数据删除操作完成。
    4 数据修改
    数据修改的大体流程为:通过点击修改按钮,则弹出一个窗体,窗体有详细的数据信息,通过已显示的数据在窗体上修改,点击确定,向后台传递参数,后台进行相应的处理,完成数据修改。
    修改界面如下图所示:
    这里写图片描述
    修改功能需要用到添加功能以及查询功能,通过调用添加功能和查询功能的接口,将两者结合起来,使得窗体显示出已有数据。具体流程如下:
    这里写图片描述
    通过请求url并传递给后台一个主键,通过主键来进行查找该数据,并返回给界面。在sqlform中,如何进行数据显示,通过@modelAttribute注释进行类数据获取,与前台界面进行对应,并在前台界面设置相应的属性进行接收参数展示。
    这里写图片描述
    编辑完成数据后,点击确定按钮,同样是调用保存数据代码,则可以对数据进行修改完成。
    (1)、如果您在阅读博客时遇到问题或者不理解的地方,可以联系我,互相交流、互相进步;
    (2)、本人业余时间可以承接毕业设计和各种小项目,如系统构建、成立网站、数据挖掘、机器学习、深度学习等。有需要的加QQ:1143948594,备注“csdn项目”。

    展开全文
  • 使用maven仓库搭建最基本的增删改查ssm框架
  • SSM框架实现增删改查、页面使用EasyUI设计
  • 适合新手学习SSM框架,myeclipse完美可用,请自行添加数据库表employee(int id, varchar name, varchar department)
  • 这还是刚开始学习ssm框架技术的时候做的半成品,里面只有增删改查登录注册等功能;其中增删改查部分页面用的是bootstarp模板,数据交互用的是ajax;登录注册就比较简单,没有css样式,数据提交用的就是普通的提交...
  • 本代码为ssm框架(spring+springmvc+mybatis),实现数据库的增删改查功能!
  • ssm框架登录增删改查

    2018-09-27 10:43:46
    该项目在ssm框架基础上实现了通过用户名、密码登录,然后进入用户管理界面进行增删改查
  • 基于https://blog.csdn.net/khxu666/article/details/79851070#commentBox,链接中,实现代码。
  • 这是一个用ssm框架写的有增删改查、登录注册、文件上传、拦截器等这些功能的小项目,对于初学ssm的朋友来说是非常好的资源
  • SSM框架写的一个增删改查,适合初学者看看,SSM框架写的一个增删改查,适合初学者看看,SSM框架写的一个增删改查,适合初学者看看,SSM框架写的一个增删改查,适合初学者看看,
  • 怎么使用ssm框架在HTML中实现增删改查,模糊查询,分页。
  • 实现一个留言板中留言的增删改查 ,分页,模糊查询。基于spring+springmvc+mybatis框架。前端使用jquery和bootstrap。数据库使用mysql。
  • ssm单表增删改查

    2018-05-04 15:06:43
    ssm 单表增删改查 ssm 单表增删改查 ssm 单表增删改查
  • 使用springMVC+mybatis+spring框架实现增删改查操作,如有报错请检查spring配置文件导入的头部文件版本是否跟项目jar包版本一致
  • JAVA SM框架增删改查 带分页 完整项目 适合练手 扩展 以及快速入门 送给有需要的小伙伴
  • 基于SSM框架增删改查

    千次阅读 多人点赞 2019-12-16 19:33:13
    SSM整合开发是目前企业流行使用的框架整合方案,这篇博客给出了实现逻辑以及源码

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

    这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

    用知识改变命运,让我们的家人过上更好的生活

    源码地址: https://github.com/zhangxycg/ssm_crud

    如要查看源码,请点击我

    视频地址: https://www.bilibili.com/video/av21045215

    尚硅谷Java视频教程

    一、使用的技术

        基础框架: ssm(SpringMVC + Spring + MyBatis)
        前端框架: Bootstrap
        数据库: MySQL
        项目的依赖管理: Maven
        分页: pagehelper
        逆向工程: MyBatis Generator
    

    二、环境的搭建

    1. 创建一个maven工程

    2. 在pom文件中引入项目依赖的jar包
      • spring
      • springmvc
      • mybatis
      • 数据库连接池(c3p0)
      • mysql驱动包
      • 其他(jstl,servlet-api,junit)

    3. 引入bootstrap前端框架

    4. 编写ssm整合的关键配置文件
      web.xml,spring,springmvc,mybatis,使用mybatis的逆向工程生成对应的 pojo 以及 mapper

    5. 测试mapper

    项目使用的表结构

    部门表

    CREATE TABLE `tbl_dept` (
      `dept_id` int(11) NOT NULL AUTO_INCREMENT,
      `dept_name` varchar(255) NOT NULL,
      PRIMARY KEY (`dept_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    

    员工表

    CREATE TABLE `tbl_emp` (
      `emp_id` int(11) NOT NULL AUTO_INCREMENT,
      `emp_name` varchar(255) NOT NULL,
      `gender` char(1) DEFAULT NULL,
      `email` varchar(255) DEFAULT NULL,
      `d_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`emp_id`),
      KEY `fk_emp_dept` (`d_id`),
      CONSTRAINT `fk_emp_dept` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`dept_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2020 DEFAULT CHARSET=utf8;
    

    三、页面效果图

    在这里插入图片描述

    四、项目结构图

    在这里插入图片描述

    五、功能及其实现逻辑

    1. 查询功能

    1. 在浏览器访问 index.jsp 页面
    2. index.jsp 页面发出查询员工列表的请求
    3. 后台 EmployeeController 接收前台发过来的请求,查出员工数据
    4. 来到 list.jsp 页面进行展示查询出的数据
    5. pageHelper 分页插件完成分页查询功能

    2. 新增功能

    在这里插入图片描述

    1. 在 index.jsp 页面点击 “ 新增 ” 按钮
    2. 弹出员工新增的对话框
    3. 然后去数据库查询部门列表,显示在对话框中
    4. 用户输入数据,并进行校验
    5. jquery前端校验,ajax用户名重复校验,重要数据(后端校验使用了JSR303);
    6. 数据填写正确,点击保存按钮

    3. 修改功能

    在这里插入图片描述

    1. 在页面点击 “编辑” 按钮
    2. 弹出用户修改的模态框
    3. 修改数据(用户名无法修改)
    4. 修改完成,点击 “更新 ” 按钮,完成用户修改

    4. 删除功能

    在这里插入图片描述

    1. 单个删除
      点击删除按钮,弹出提示信息,点击确定。将会删除数据
    2. 批量删除
      勾选员工姓名前的选择框,可以实现批量删除

    六、 踩坑

    第一次踩坑连接不上数据库 ,报错信息如下

    java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
    	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
    	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
    	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
    	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
    	at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
    	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    	at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    	at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    	at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    	at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    	at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
    Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
    	at sun.reflect.GeneratedConstructorAccessor45.newInstance(Unknown Source)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
    	at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
    	at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2243)
    	at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2267)
    	at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)
    	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)
    	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
    	... 12 more
    
    
    

    在这里插入图片描述
    报错原因是

    在使用mysql的jdbc驱动最新版(6.0+)版本时,数据库和系统时区差异引起的问题。

    解决办法:

    第一种是 降低驱动的版本

    第二种是:在jdbc连接的url后面加上 ?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=UTF8

    在这里插入图片描述

    第二次踩坑字新增与修改完成以后,员工数据不按 id 进行升序排列

    解决办法:

    修改 EmployeeMapper.xml 中的查询语句,使员工数据按 员工 id 进行升序排列
    在这里插入图片描述

    <select id="selectByExampleWithDept" resultMap="WithDeptResultMap">
            select
            <if test="distinct">
                distinct
            </if>
            <include refid="WithDept_Column_List" />
            FROM tbl_emp e
            left join tbl_dept d on e.`d_id`=d.`dept_id`
            <if test="_parameter != null">
                <include refid="Example_Where_Clause" />
            </if>
            <!-- 员工数据根据id进行升序排列 -->
            order by e.`emp_id`  asc
        </select>
    
    展开全文
  • 改项目是在ssm登录、增删改查的基础上添加了登录验证,登录错误信息返回前端jsp页面。
  • 利用ssm框架实现登陆、数据库增删改查(分页)功能,包括动态SQL

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,006
精华内容 4,002
关键字:

ssm框架实现增删改查