SSM标准配置(附配置文件)
2021-07-03 21:23:55 22 举报
AI智能生成
SSM标准配置
作者其他创作
大纲/内容
Ⅴ: MyBatis逆向工程配置 GeneratorConfig.xml
log4j.properties
pom.xml
Ⅰ: web.xml
Servlet
② SpringMVC前端控制器 DispatcherServlet
作用:拦截相应的请求交给 spring mvc 处理。
注意:默认 spring mvc 会从 WEB-INF 下去加载 [servlet 的 name]-servlet.xml 这个主配置文件。
如果我们不喜欢把主配置文件放到这个地方,我们可以通过手动来指定 springMVC 主配置文件的位置和名称。
注意:默认 spring mvc 会从 WEB-INF 下去加载 [servlet 的 name]-servlet.xml 这个主配置文件。
如果我们不喜欢把主配置文件放到这个地方,我们可以通过手动来指定 springMVC 主配置文件的位置和名称。
Filter
③ Web字符编码过滤器 CharacterEncodingFilter
作用:配置该过滤器拦截所有的资源并设置好编码格式,用来防止中文乱码问题。
注意:该过滤器一定要配置在其他过滤器之前,以最先生效
注意:该过滤器一定要配置在其他过滤器之前,以最先生效
④ 隐藏过滤器 HiddenHttpMethodFilter
作用: 解决Restful 的 Deleter/Update 请求
Listener
① Spring核心监听器 ContextLoaderListener
在 tomcat 启动的时候,创建 spring 的工厂类对象,把工厂类对象绑定到 tomcat 的上下文中,
以前写 java 项目第一步都是创建 spring 的工厂类对象。而在运行 web 项目时还是需要 Spring 的工厂类对象,
所以 spring 就为我们提供了这个监听器来在 tomcat 启动的时候来实现这些代码。
注意:默认 spring 会从 WEB-INF 目录下加载 applicationContext.xml 作为 spring 的主配置文件,
如果我们不喜欢把主配置文件放到这个地方,我们可以通过手动来指定 Spring 主配置文件的位置和名称。
以前写 java 项目第一步都是创建 spring 的工厂类对象。而在运行 web 项目时还是需要 Spring 的工厂类对象,
所以 spring 就为我们提供了这个监听器来在 tomcat 启动的时候来实现这些代码。
注意:默认 spring 会从 WEB-INF 目录下加载 applicationContext.xml 作为 spring 的主配置文件,
如果我们不喜欢把主配置文件放到这个地方,我们可以通过手动来指定 Spring 主配置文件的位置和名称。
0: 显式制定Spring配置文件 路径/名称
这是因为如果我们有配置ContextLoaderListener, Spring会去web.xml中看我们是否有定义contextConfigLocation这个参数,如果有则Spring容器(Bean工厂)会把定义在该xml文件中的bean加载到容器中,那如果没有定义contextConfigLocation参数,Spring会怎么办?web服务器启动的时候会不会报错呢?
Spring有一个概念就是约定优于配置,也就是说,即使你没有显示定义xml文件的位置,Spring容器会到一个约定的地方去找该文件,如果找不到就要报FileNotFoundException了,我们来看看下面代码段:
"/WEB-INF/applicationContext.xml" 就是默认的文件地址了,如果你使用了Spring MVC,肯定要到web.xml里面定义DispatcherServlet
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
这个时候如果你没有显示配置contextConfigLocation参数的话,Spring会到该默认路径下加载配置文件"WEB-INF/dispatcherServlet-servlet.xml", 如果不存在就报异常。
以上源码存在于XmlWebApplicationContext.
Spring有一个概念就是约定优于配置,也就是说,即使你没有显示定义xml文件的位置,Spring容器会到一个约定的地方去找该文件,如果找不到就要报FileNotFoundException了,我们来看看下面代码段:
"/WEB-INF/applicationContext.xml" 就是默认的文件地址了,如果你使用了Spring MVC,肯定要到web.xml里面定义DispatcherServlet
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
这个时候如果你没有显示配置contextConfigLocation参数的话,Spring会到该默认路径下加载配置文件"WEB-INF/dispatcherServlet-servlet.xml", 如果不存在就报异常。
以上源码存在于XmlWebApplicationContext.
Ⅱ: SpringMVC.xml
① 启用Spring常用注解<context:annotation-config/>
一般来说,像@Resource 、@ PostConstruct、@Autowired这些注解在自动注入还是比较常用,
所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,
于是spring给我们提供< context:annotation-config/>的简化配置方式,自动帮你完成声明。
所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,
于是spring给我们提供< context:annotation-config/>的简化配置方式,自动帮你完成声明。
② 组件扫描 context:component-scan
用于 指定/排除 需要扫描的包/类
对于Controller层,通常只识别Controller包中的@Controller注解的类
对于Controller层,通常只识别Controller包中的@Controller注解的类
③ bean
视图解析器 InternalResourceViewResolver
作用:存放在 / WEB-INF / 下面的内容是不能直接通过 request 请求的方式请求到的,为了安全性考虑,我们通常会把 jsp 文件放在 WEB-INF 目录下,
而 InternalResourceView 在服务器端跳转的方式可以很好的解决这个问题(见下)。
InternalResourceViewResolver 会把返回的视图名称都解析为 InternalResourceView 对象,InternalResourceView 会把 Controller 处理器方法返回的模型属性都存放到对应的 request 属性中,然后通过 RequestDispatcher 在服务器端把请求 forword 重定向到目标 URL。
比如在 InternalResourceViewResolver 中定义了 prefix=/WEB-INF/views/,suffix=.jsp,然后请求的 Controller 处理器方法返回的视图名称为 test,那么这个时候 InternalResourceViewResolver 就会把 test 解析为一个 InternalResourceView 对象,先把返回的模型属性都存放到对应的 HttpServletRequest 属性中,然后利用 RequestDispatcher 在服务器端把请求 forword 到 / WEB-INF/views/test.jsp。
而 InternalResourceView 在服务器端跳转的方式可以很好的解决这个问题(见下)。
InternalResourceViewResolver 会把返回的视图名称都解析为 InternalResourceView 对象,InternalResourceView 会把 Controller 处理器方法返回的模型属性都存放到对应的 request 属性中,然后通过 RequestDispatcher 在服务器端把请求 forword 重定向到目标 URL。
比如在 InternalResourceViewResolver 中定义了 prefix=/WEB-INF/views/,suffix=.jsp,然后请求的 Controller 处理器方法返回的视图名称为 test,那么这个时候 InternalResourceViewResolver 就会把 test 解析为一个 InternalResourceView 对象,先把返回的模型属性都存放到对应的 HttpServletRequest 属性中,然后利用 RequestDispatcher 在服务器端把请求 forword 到 / WEB-INF/views/test.jsp。
④ 标准配置: 注解驱动<mvc:annotation-driven/> , 服务器默认处理器<mvc:default-servlet-handler>
Ⅲ: MyBatis.xml
别名
typeAliases> package name="com.ryze.bean"
驼峰命名
settings> setting name="mapUnderscoreToCamelCase" value="true"
将下划线映射成驼峰
将下划线映射成驼峰
分页插件
plugs> plug interceptor="com.github.pagehelper.PageInterceptor"
Ⅳ: applicationContext.xml
① 组件扫描
context:component-scan 该配置中只扫描非Controller层
② Spring 相关配置:配置和业务逻辑有关的,主要是数据库方面
2.1 数据库控制
2.1.1 加载数据库配置文件 路径/名称
context:property-placeholder> location="classpath:DB/db.properties"
2.1.2 配置数据源
德鲁伊数据源为例: bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"
> property name="driverClassName" value="${jdbc.driver}"
> property name="driverClassName" value="${jdbc.driver}"
2.1.3 事物控制
2.1.3.1 事务管理器
bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
<!-- 控制数据源 -->
> property name="dataSource" ref="druidDataSource"
<!-- 控制数据源 -->
> property name="dataSource" ref="druidDataSource"
2.2.3.2. 注解驱动
<tx:annotation-driven transaction-manager="transactionManager"/>
开启指定事务管理器的注解事务
开启指定事务管理器的注解事务
③ 整合MyBatis
3.1 配置SqlSession
3.1.1 SqlSession(工厂)
bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
>property name="dataSource" // 指定数据源
>property name="configLocation" // 指定MyBatis配置文件 路径/名称
>property name="mapperLocations" // 指定Mapper映射文件 路径/名称
>property name="dataSource" // 指定数据源
>property name="configLocation" // 指定MyBatis配置文件 路径/名称
>property name="mapperLocations" // 指定Mapper映射文件 路径/名称
3.1.2 SqlSessionTemplate 批处理
bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"
> constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" // 构造器传入会话工厂
> constructor-arg name="executorType" value="SIMPLE" // 构造器设置执行类型:简单
> constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" // 构造器传入会话工厂
> constructor-arg name="executorType" value="SIMPLE" // 构造器设置执行类型:简单
3.2 配置映射器扫描器
bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
>property name="basePackage" value="com.ryze.bean.mapper" // 扫描所有的dao接口的实现,
为映射器接口文件设置基本的包路径,加入到IOC容器中
配置映射器扫描器,在所设置的包下, 将生成的接口生成动态代理实现类MapperFactoryBean,
并由spring容器管理
>property name="basePackage" value="com.ryze.bean.mapper" // 扫描所有的dao接口的实现,
为映射器接口文件设置基本的包路径,加入到IOC容器中
配置映射器扫描器,在所设置的包下, 将生成的接口生成动态代理实现类MapperFactoryBean,
并由spring容器管理
SSM配置代码
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- ===================== Spring配置 ===================== -->
<!-- 配置spring环境 -->
<!-- 手动来指定Spring主配置文件的位置和名称 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring-config/applicationContext.xml</param-value>
</context-param>
<!-- 配置spring监听器以创造Spring容器 --> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- ===================== SpringMVC配置 ===================== -->
<!-- 前端控制器, 处理请求映射 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 手动指定SpringMVC配置文件 路径/名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC-config/SpringMVC.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>
<!-- 字符编码过滤器 -->
<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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 隐藏过滤器,Restful -->
<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>
</web-app>
<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">
<!-- ===================== Spring配置 ===================== -->
<!-- 配置spring环境 -->
<!-- 手动来指定Spring主配置文件的位置和名称 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring-config/applicationContext.xml</param-value>
</context-param>
<!-- 配置spring监听器以创造Spring容器 --> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- ===================== SpringMVC配置 ===================== -->
<!-- 前端控制器, 处理请求映射 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 手动指定SpringMVC配置文件 路径/名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC-config/SpringMVC.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>
<!-- 字符编码过滤器 -->
<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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 隐藏过滤器,Restful -->
<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>
</web-app>
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"
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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 启动Spring的一些常用annotation。 如 @Resource 、@PostConstruct、@Autowired-->
<context:annotation-config/>
<!-- ============== START:SpringMVC的配置文件,含网站跳转的逻辑控制,配置 ==============-->
<!-- 组件扫描 -->
<context:component-scan base-package="com.ryze.controller">
<!-- 只扫描注解,且为Controller -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前后缀 -->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- ============== START:SpringMVC的配置文件,含网站跳转的逻辑控制,配置 ==============-->
<!-- 两个标准配置-->
<!-- 将springmvc不能处理的请求交给tomcat -->
<!-- 能支持springmvc更高级的一些功能,JS303校验,快捷的ajax...映射动态请求 -->
<mvc:default-servlet-handler/>
<!-- 注解驱动, 开启springmvc注解支持 -->
<mvc:annotation-driven/>
</beans>
<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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 启动Spring的一些常用annotation。 如 @Resource 、@PostConstruct、@Autowired-->
<context:annotation-config/>
<!-- ============== START:SpringMVC的配置文件,含网站跳转的逻辑控制,配置 ==============-->
<!-- 组件扫描 -->
<context:component-scan base-package="com.ryze.controller">
<!-- 只扫描注解,且为Controller -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前后缀 -->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- ============== START:SpringMVC的配置文件,含网站跳转的逻辑控制,配置 ==============-->
<!-- 两个标准配置-->
<!-- 将springmvc不能处理的请求交给tomcat -->
<!-- 能支持springmvc更高级的一些功能,JS303校验,快捷的ajax...映射动态请求 -->
<mvc:default-servlet-handler/>
<!-- 注解驱动, 开启springmvc注解支持 -->
<mvc:annotation-driven/>
</beans>
MyBatis.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>
<settings>
<!-- 启用驼峰命名: 将下划线映射成驼峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<!-- 起别名-->
<package name="com.ryze.bean"/>
</typeAliases>
<plugins>
<!-- 分页插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<!-- 对于分页插件,Spring启动可能找不到该注册组件,则需要在pom.xml加入如下依赖
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.6</version>
</dependency>
-->
</configuration>
<!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="com.ryze.bean"/>
</typeAliases>
<plugins>
<!-- 分页插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<!-- 对于分页插件,Spring启动可能找不到该注册组件,则需要在pom.xml加入如下依赖
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.6</version>
</dependency>
-->
</configuration>
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:tx="http://www.springframework.org/schema/tx"
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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描器。除Controller层-->
<context:component-scan base-package="com.ryze">
<!-- 排除Controller层-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--=========================START:spring配置文件, 这里主要配置和业务逻辑有关的 =========================-->
<!-- ================== 数据库相关START: 数据源,事务控制... ===============-->
<!-- 加载数据库配置文件 -->
<context:property-placeholder location="classpath:DB-config/db.properties"></context:property-placeholder>
<!--配置数据源信息-->
<bean id="druidDataSource" 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}"/>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 控制数据源 -->
<property name="dataSource" ref="druidDataSource"/>
</bean>
<!--注解驱动,开启指定事务管理器的注解事务-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- ================= 数据库相关END ============= -->
<!--=========================END:spring配置 =========================-->
<!-- ==================START:整合MyBatis ============== -->
<!--配置SqlSession(工厂)-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源-->
<property name="dataSource" ref="druidDataSource"/>
<!-- 指定MyBatis全局配置文件的位置-->
<property name="configLocation" value="classpath:MyBatis-config/MyBatis.xml"/>
<!-- 指定MyBatis,mapper文件的位置-->
<property name="mapperLocations" value="classpath:com/ryze/mapper/*.xml"/>
</bean>
<!-- 配置一个可以执行批量的sqlSession -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 构造器传入会话工厂 -->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
<!-- 配置一个可以执行批量的sqlSession, 其中BATCH可以批量更新操作缓存SQL以提高性能,但是有个缺陷就是无法获取update、delete返回的行数-->
<constructor-arg name="executorType" value="SIMPLE"></constructor-arg>
<!-- 构造器设置执行类型:BATCH批处理 -->
<!--<constructor-arg name="executorType" value="BATCH"/>-->
</bean>
<!-- 配置映射器扫描器,在所设置的包下, 将生成的接口生成动态代理实现类MapperFactoryBean, 并由spring容器管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描所有的mapper接口的实现,为映射器接口文件设置基本的包路径,加入到IOC容器中 -->
<property name="basePackage" value="com.ryze.mapper"/>
</bean>
<!-- ==================END: 整合MyBatis ============== -->
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns: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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描器。除Controller层-->
<context:component-scan base-package="com.ryze">
<!-- 排除Controller层-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--=========================START:spring配置文件, 这里主要配置和业务逻辑有关的 =========================-->
<!-- ================== 数据库相关START: 数据源,事务控制... ===============-->
<!-- 加载数据库配置文件 -->
<context:property-placeholder location="classpath:DB-config/db.properties"></context:property-placeholder>
<!--配置数据源信息-->
<bean id="druidDataSource" 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}"/>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 控制数据源 -->
<property name="dataSource" ref="druidDataSource"/>
</bean>
<!--注解驱动,开启指定事务管理器的注解事务-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- ================= 数据库相关END ============= -->
<!--=========================END:spring配置 =========================-->
<!-- ==================START:整合MyBatis ============== -->
<!--配置SqlSession(工厂)-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源-->
<property name="dataSource" ref="druidDataSource"/>
<!-- 指定MyBatis全局配置文件的位置-->
<property name="configLocation" value="classpath:MyBatis-config/MyBatis.xml"/>
<!-- 指定MyBatis,mapper文件的位置-->
<property name="mapperLocations" value="classpath:com/ryze/mapper/*.xml"/>
</bean>
<!-- 配置一个可以执行批量的sqlSession -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 构造器传入会话工厂 -->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
<!-- 配置一个可以执行批量的sqlSession, 其中BATCH可以批量更新操作缓存SQL以提高性能,但是有个缺陷就是无法获取update、delete返回的行数-->
<constructor-arg name="executorType" value="SIMPLE"></constructor-arg>
<!-- 构造器设置执行类型:BATCH批处理 -->
<!--<constructor-arg name="executorType" value="BATCH"/>-->
</bean>
<!-- 配置映射器扫描器,在所设置的包下, 将生成的接口生成动态代理实现类MapperFactoryBean, 并由spring容器管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描所有的mapper接口的实现,为映射器接口文件设置基本的包路径,加入到IOC容器中 -->
<property name="basePackage" value="com.ryze.mapper"/>
</bean>
<!-- ==================END: 整合MyBatis ============== -->
</beans>
GeneratorConfig.xml
<?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>
<!--其中targetRuntime="MyBatis3Simple" 可以生成简单的操作 -->
<context id="generator" targetRuntime="mybatis3">
<commentGenerator>
<!-- 抑制所有(映射文件)注释 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm_crud?useSSL=false"
userId="root"
password="0000">
</jdbcConnection>
<!-- Java类型解析(JDBC解析到Java类型)-->
<javaTypeResolver>
<!--是否使用 bigDecimal,默认false。
false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal-->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 指定JavaBean实体类的生成位置 -->
<!-- 注意,此处的 targetProject 的属性 需要 src\main 开始, 不能 .\src,否则找不到路径-->
<javaModelGenerator
targetPackage="com.ryze.bean"
targetProject="src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 是否修剪(从数据库)返回值至JavaBean的String的前后(空格)-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 指定SQL映射文件(*mapper.xml)的生成位置 -->
<sqlMapGenerator
targetPackage="com.ryze.mapper"
targetProject=".\src\main\resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 指定dao接口(mapper接口.Java文件)的生成位置 -->
<javaClientGenerator
type="XMLMAPPER"
targetPackage="com.ryze.mapper"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定表名; 指定表对应的JavaBean类名-->
<table tableName="user" domainObjectName="User"></table>
</context>
</generatorConfiguration>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--其中targetRuntime="MyBatis3Simple" 可以生成简单的操作 -->
<context id="generator" targetRuntime="mybatis3">
<commentGenerator>
<!-- 抑制所有(映射文件)注释 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm_crud?useSSL=false"
userId="root"
password="0000">
</jdbcConnection>
<!-- Java类型解析(JDBC解析到Java类型)-->
<javaTypeResolver>
<!--是否使用 bigDecimal,默认false。
false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal-->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 指定JavaBean实体类的生成位置 -->
<!-- 注意,此处的 targetProject 的属性 需要 src\main 开始, 不能 .\src,否则找不到路径-->
<javaModelGenerator
targetPackage="com.ryze.bean"
targetProject="src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 是否修剪(从数据库)返回值至JavaBean的String的前后(空格)-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 指定SQL映射文件(*mapper.xml)的生成位置 -->
<sqlMapGenerator
targetPackage="com.ryze.mapper"
targetProject=".\src\main\resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 指定dao接口(mapper接口.Java文件)的生成位置 -->
<javaClientGenerator
type="XMLMAPPER"
targetPackage="com.ryze.mapper"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定表名; 指定表对应的JavaBean类名-->
<table tableName="user" domainObjectName="User"></table>
</context>
</generatorConfiguration>
逆向工程生成代码:
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定逆向工程配置文件
File configFile = new File("GeneratorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
boolean overwrite = true;
//指定逆向工程配置文件
File configFile = new File("GeneratorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
log4j.properties
# +======================================================================+#
log4j.rootLogger=${log4j.log.level},${log4j.log.target}
log4j.addivity.org.apache=true
# +======================================================================+#
# | [target] - Console
# +----------------------------------------------------------------------+#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${log4j.log.level}
log4j.appender.CONSOLE.Encoding=${log4j.log.encoding}
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=${log4j.log.layout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | [target] - FILE
# +----------------------------------------------------------------------+#
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.Threshold=${log4j.log.level}
log4j.appender.FILE.Encoding=${log4j.log.encoding}
log4j.appender.FILE.File=${log4j.log.dir}/runtime.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=2048KB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=${log4j.log.layout}
log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | log4j config
# +----------------------------------------------------------------------+#
log4j.log.dir=logs/
#log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
log4j.log.level=DEBUG
#log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET
log4j.log.target=CONSOLE,FILE
log4j.log.encoding=UTF-8
log4j.log.layout=org.apache.log4j.PatternLayout
log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n
# +======================================================================+#
log4j.rootLogger=${log4j.log.level},${log4j.log.target}
log4j.addivity.org.apache=true
# +======================================================================+#
# | [target] - Console
# +----------------------------------------------------------------------+#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${log4j.log.level}
log4j.appender.CONSOLE.Encoding=${log4j.log.encoding}
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=${log4j.log.layout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | [target] - FILE
# +----------------------------------------------------------------------+#
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.Threshold=${log4j.log.level}
log4j.appender.FILE.Encoding=${log4j.log.encoding}
log4j.appender.FILE.File=${log4j.log.dir}/runtime.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=2048KB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=${log4j.log.layout}
log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | log4j config
# +----------------------------------------------------------------------+#
log4j.log.dir=logs/
#log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
log4j.log.level=DEBUG
#log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET
log4j.log.target=CONSOLE,FILE
log4j.log.encoding=UTF-8
log4j.log.layout=org.apache.log4j.PatternLayout
log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n
# +======================================================================+#
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ryze</groupId>
<artifactId>ssm-crud</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--============= Spring-config, SpringMVC-config START =============-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!--Spring-config-JDBC-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!--Spring-config-面向切面-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!--============= Spring-config+-SpringMVC-config END =============-->
<!--============= MyBatis-config START =============-->
<!-- MyBatis-config -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--============= MyBatis-config END =============-->
<!--============= START:Spring-config-MyBatis整合,注意版本对应 =============-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<!-- 整合适配包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!--============= START:Spring-config-MyBatis整合,注意版本对应 =============-->
<!--============= START:数据源,驱动 =============-->
<!-- 数据源 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
<!-- 驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--============= END:数据源,驱动 =============-->
<!--============= START:其它(JSTL,servlet-api,junit, MyBatis逆向工程MBG,分页插件pagehelper) =============-->
<!--JSTL-->
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--servlet-api-->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--junit-->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MBG核心 mybatis逆向工程-->
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper, Log4j -->
<!--分页插件pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.6</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<!-- Log4j-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0.2</version>
</dependency>
<!--============= END:其它 =============-->
</dependencies>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ryze</groupId>
<artifactId>ssm-crud</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--============= Spring-config, SpringMVC-config START =============-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!--Spring-config-JDBC-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!--Spring-config-面向切面-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<!--============= Spring-config+-SpringMVC-config END =============-->
<!--============= MyBatis-config START =============-->
<!-- MyBatis-config -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--============= MyBatis-config END =============-->
<!--============= START:Spring-config-MyBatis整合,注意版本对应 =============-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<!-- 整合适配包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!--============= START:Spring-config-MyBatis整合,注意版本对应 =============-->
<!--============= START:数据源,驱动 =============-->
<!-- 数据源 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
<!-- 驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--============= END:数据源,驱动 =============-->
<!--============= START:其它(JSTL,servlet-api,junit, MyBatis逆向工程MBG,分页插件pagehelper) =============-->
<!--JSTL-->
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--servlet-api-->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--junit-->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MBG核心 mybatis逆向工程-->
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper, Log4j -->
<!--分页插件pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.6</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<!-- Log4j-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0.2</version>
</dependency>
<!--============= END:其它 =============-->
</dependencies>
</project>
SSM目录
user表
0 条评论
下一页
为你推荐
查看更多