赞
踩
本文主要用来记录自己在学习SSM框架并用该框架实现简单的增删改查的功能的基本步骤以及遇到的一些错误的总结。
创建时应选择红框中的类型,若选择黑框中的类型可能出现错误。
archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很慢,指定internal来表示仅使用内部元数据,这里类似手动下载而不用访问外网下载可以加快下载速度。(详情可参考博客:https://www.cnblogs.com/hihtml5/p/6305804.html)
修改项目的pom.xml文件,在 中添加项目所需要用到的依赖,可以在Meven中央仓库(https://mvnrepository.com)中寻找自己需要的依赖并选择合适的版本,将相应的代码复制下来添加至中。以下是我在pom.xml文件中添加相关依赖的代码:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.6.RELEASE</version> </dependency> <!--spring jdbc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.6.RELEASE</version> </dependency> <!--spring aspect--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.0.6.RELEASE</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mybatis整合spring的配置包mybatis spring--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!--数据库连接池,驱动c3p0--> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!--jstl,servlet api,junit--> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency> <!-- Spring-test--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> <!--分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.4</version> </dependency> <!--返回json字符串的支持--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> <!--添加TSR303后端数据校验的包--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.10.Final</version> </dependency> </dependencies>
添加依赖后记得import,最好不用自动import功能,这样可以更好的检查自己添加的依赖是否正确,对于未想到可能需要的依赖可在需要时在添加即可。
文件名 | 作用 |
---|---|
bean | 用来存放实体类和实例类 |
controller | 控制层 |
dao | 数据层,用来存放mapper接口,进行数据库操作 |
service | 业务层,与数据层的交互 |
test | 用来测试及逆向生成bean,dao,及mapper等文件 |
mapper | 用来存放Mapper.xml的映射文件 |
resources | 用来存放mapper文件夹及Spring,SpringMVC,Mybatis的配置文件 |
static | 用来存放Bootstrap以及js文件 |
WEB-INF | 存放web.xml以及view文件夹和jsp文件 |
view | 用来存放显示页面 |
在此我使用的是MySQL数据库:
数据库名:ssm_crud
1.员工信息表tbl_emp
字段:
员工id:emp_id,
员工名字:emp_name,
性别:gender,
邮箱:email,
部门Id:d_id
2.部门信息表tbl_dep
字段:
部门Id:dept_id,
部门名:dept_name
注:d_id 为一个外键列(添加外键关联),将tbl_emp中的d_id字段与tbl_dep字段中的dept_关联
表的字段信息:
<?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_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- 2.1 注册Spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 2.2 注册ServletContext监听器 --> <!-- 用于创建Spring容器对象放入ServletContext的域属性空间中,保证整个应用中的Spring容器唯一 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 2.3 注册字符集过滤器 一定要放在所有过滤器的最前面 --> <!-- 用于解决请求参数中的中文乱码问题 --> <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> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceReponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> //此处若写成原型会变为注释文件,将下面/后面的空格去掉即可 <url-pattern>/ *</url-pattern> </filter-mapping> <!-- 2.4 配置中央调度器 拦截所有请求--> <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:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 2.5 使用Rest风格的URI --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> //此处若写成原型会变为注释文件,将下面/后面的空格去掉即可 <url-pattern>/ *</url-pattern> </filter-mapping> <!-- 解决无法直接发送PUT请求,带着请求体的问题,在修改员工信息的时候使用 --> <filter> <filter-name>HttpPutFormContentFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>HttpPutFormContentFilter</filter-name> //此处若写成原型会变为注释文件,将下面/后面的空格去掉即可 <url-pattern>/ *</url-pattern> </filter-mapping> </web-app>
<?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: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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 跳转逻辑的配置 --> <!-- 扫描业务逻辑组件,配置组件扫描器,include-filter type="annotation"表示注解式使用,只扫描控制器--> <context:component-scan base-package="crud" use-default-filters="false"> <!--只掃描控制器--> <!--在controller中引用@Controller注解时会用到此配置--> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 2.配置视图解析器 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前綴--> <property name="prefix" value="/WEB-INF/view/"></property> <!--后綴--> <property name="suffix" value=".jsp"></property> </bean> <!-- 两个标准配置 --> <!-- 把spirngmvc不能处理的请求交给tomcat 比如静态资源图片等--> <mvc:default-servlet-handler/> <!-- 配置注解驱动 映射动态请求 支持springmvc一些高级功能,比如JSR303校验,快捷AJAX请求--> <mvc:annotation-driven/> </beans>
配置详情:
1.跳转逻辑的配置,使用Controller时扫描哪个包
2.视图解析器的配置
3.要使用spring mvc中的@Controller注解,就必须要配置<mvc:annotation-driven />,否则org.springframework.web.servlet.DispatcherServlet无法找到控制器并把请求分发到控制器。
4.将springMVC不能处理的请求交给tomcat处理
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- Spring的配置文件,这里主要配置和业务逻辑有关的 --> <!--============================数据源,事务控制,XXX=================== --> <context:property-placeholder location="classpath:jdbc.properties"/> <bean name="C3P0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="driverClass" value="${jdbc.driver}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <context:component-scan base-package="crud"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--==============================Mabatis整合============================ --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--指定mybatis全局配置文件的位置--> <property name="configLocation" value="classpath:mybatis.xml"/> <property name="dataSource" ref="C3P0DataSource"/> <!--指定Mybatis全局配置文件位置--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!--配置扫描器,将Mybatis接口的实现加入到ioc容器中--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--扫描所有dao接口的实现,加入ioc容器中--> <property name="basePackage" value="crud.dao"/> </bean> <!--========================================================================= --> <!--配置一个可以执行批量的sqlSession--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/> <constructor-arg name="executorType" value="BATCH"/> </bean> <!--=========================事务控制的配置=================================== --> <!--https://www.cnblogs.com/teach/p/5823574.html 此处是用的较多的aop声明式事务控制,此网站有介绍--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--控制住数据源--> <property name="dataSource" ref="C3P0DataSource"/> </bean> <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式)--> <aop:config> <!--切入点表达式--> <aop:pointcut id="txPoint" expression="execution(* crud.service..*(..))"/> <!--配置事务增强--> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/> </aop:config> <!--配置事务增强,事务如何切入--> <!--系统默认切入名称为transactionManager--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--所有方法都是事务方法--> <tx:method name="*"/> <!--以get方法开始的所有方法--> <tx:method name="get*" read-only="true"/> </tx:attributes> </tx:advice> <!--Spring的配置文件的核心点(数据源、与Mybatis的整合、事务控制)--> </beans>
jdbc.url=jdbc:mysql://localhost:3306/ssm_crud?useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=960625
注意:?useUnicode=true&characterEncoding=UTF-8的作用是用来解决向数据库中插入数据时出现中文变为???的情况
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--使用下划线与驼峰式命名规则的映射 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!--自动扫描的方式来配置别名--> <typeAliases> <package name="crud.bean"/> </typeAliases> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!--pageInfo合理化分页参数,当页码小于0时显示第一页,当页码大于最后一页时显示最后一页--> <property name="reasonable" value="true"/> </plugin> </plugins> </configuration>
1.其中属性mapUnderscoreToCamelCase表示是否启用下划线与驼峰式命名规则的映射(如emp_id----->empId)。其实mybatis是支持数据库属性和实体对象的驼峰命名映射,只需要开启这个配置即可,将其value值设为true。
2. 采用自动扫描的方式来配置别名
3. 引入使用PageHelper的配置文件(此处版本5与版本5以前的配置有所不同,需要注意,若引入PageHelper失败考虑是版本与其他包不兼容)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="DB2Tables" targetRuntime="MyBatis3"> <!--配置数据库连接--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/ssm_crud" userId="root" password="960625"> </jdbcConnection> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!--指定javaBean生成的位置--> <javaModelGenerator targetPackage="crud.bean" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!--指定sql映射文件生成的位置--> <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!--指定dao接口生成的位置,mapper接口--> <javaClientGenerator type="XMLMAPPER" targetPackage="crud.dao" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!--table指定每个表的生成策略--> <table tableName="tbl_emp" domainObjectName="Employee"></table> <table tableName="tbl_dept" domainObjectName="Department"></table> </context> </generatorConfiguration>
该配置文件用来规定在使用MyBatis-Generator逆向工程生成bean,dao,Mapper文件的位置以及表的文件的生成策略,其中生成的文件中包含了注释信息,若想去掉这些注释信息则可以添加如下代码在 中
<commentGenerator> <property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。