zoukankan      html  css  js  c++  java
  • spring4.3+mybatis3.4+freemark+log4j2+fastjson整合

    2017-7-1 更新 spring 版本 4.3.9  更新mybatis 为3.4.3

    0、先写下文件结构防止配置放错地方

    1、首先发下maven配置

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
            <!--依赖版本-->
            <spring.version>4.3.9.RELEASE</spring.version>
            <mybatis.version>3.4.4</mybatis.version>
            <javax.servlet.version>3.1.0</javax.servlet.version>
            <freemarker.version>2.3.23</freemarker.version>
            <junit.version>4.12</junit.version>
            <mybatis-spring.version>1.3.1</mybatis-spring.version>
            <log4j2.version>2.8.2</log4j2.version>
            <slf4j.version>1.7.21</slf4j.version>
            <fastjson.version>1.2.35</fastjson.version>
            <guava.version>22.0</guava.version>
            <druid-version>1.0.31</druid-version>
        </properties>
    
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-framework-bom</artifactId>
                    <version>${spring.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <!--spring框架相关配置 begin-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${javax.servlet.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
            </dependency>
            <!--<dependency>-->
            <!--<groupId>com.fasterxml.jackson.core</groupId>-->
            <!--<artifactId>jackson-databind</artifactId>-->
            <!--<version>2.6.4</version>-->
            <!--</dependency>-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <!--spring框架相关配置 end-->
            <!--freemarker begin-->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
            <!--freemarker end-->
            <!--orm and db begin-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.42</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>sqljdbc4</artifactId>
                <version>4.0</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid-version}</version>
            </dependency>
            <!--orm and db end-->
            <!--日志 begin-->
            <dependency> <!-- 桥接:告诉Slf4j使用Log4j2 -->
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
            <dependency> <!-- 桥接:告诉commons logging使用Log4j2 -->
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-jcl</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-web</artifactId>
                <version>${log4j2.version}</version>
            </dependency>
            <!--日志 end-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.6</version>
            </dependency>
            <!--工具包 begin-->
            <!--<dependency>-->
            <!--<groupId>org.apache.commons</groupId>-->
            <!--<artifactId>commons-collections4</artifactId>-->
            <!--<version>4.1</version>-->
            <!--</dependency>-->
            <!--<dependency>-->
            <!--<groupId>joda-time</groupId>-->
            <!--<artifactId>joda-time</artifactId>-->
            <!--<version>2.9.1</version>-->
            <!--</dependency>-->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>
    
            <!--工具包 end-->
    
            <!--测试包 begin-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--测试包 end-->
        </dependencies>
    
    
        <build>
            <!--<finalName>test</finalName>-->
            <plugins>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <executions>
                        <execution>
                            <id>Generate MyBatis Artifacts</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>utf8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    View Code

    简单说明以下包的作用:

    spring-web 是对servlet的封装 核心包

    spring-webmvc 是在spring-web的基础上添加mvc支持 例如v层适配,这里freemark模板引擎就用到了其中的 org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver类

    spring-context-support 是对常用bean的扩展 其中 FreeMarkerConfigurer会依赖此包的 org.springframework.ui.freemarker.FreeMarkerConfigurationFactory

    javax.servlet-api 是核心api这里使用3.1

    spring-aspects 提供对AspectJ的支持

    spring-tx 对事物支持 @Transactional 就在此包中

    spring-jdbc 对jdbc的封装,方便spring管理jdbc 该项目中事物的管理便是使用了 org.springframework.jdbc.datasource.DataSourceTransactionManager

    fastjson 这个包是用来处理返回json数据问题 来自阿里值得信赖

    2、然后是 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_3_1.xsd"
             version="3.1">
    
        <!-- 区分项目名称,防止默认重名 -->
        <context-param>
            <param-name>webAppRootKey</param-name>
            <param-value>maven.xxl_web.root</param-value>
        </context-param>
    
        <!-- 字符集 过滤器  -->
        <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>
    
        <!-- 设置Spring容器加载配置文件路径 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext-*.xml</param-value>
        </context-param>
    
        <!-- Spring view分发器 -->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
            <!--拦截/*,这是一个错误的方式,请求可以走到Action中,但转到jsp时再次被拦截,不能访问到jsp。
                拦截/,restful风格 弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。解决办法看dispatcher-->
        </servlet-mapping>
    
        <!-- Spring会创建一个WebApplicationContext上下文,称为父上下文(父容器) ,保存在 ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值。
        可以使用Spring提供的工具类取出上下文对象:WebApplicationContextUtils.getWebApplicationContext(ServletContext);
    
        DispatcherServlet是一个Servlet,可以同时配置多个,每个 DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器),子上下文可以访问父上下文中的内容,
        但父上下文不能访问子上下文中的内容。 它也保存在 ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。当一个Request对象产生时,
        会把这个子上下文对象(WebApplicationContext)保存在Request对象中,key是DispatcherServlet.class.getName() + ".CONTEXT"。
        可以使用工具类取出上下文对象:RequestContextUtils.getWebApplicationContext(request);-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
    
           <!-- log4j2-begin --> <!-- 注意! 由于使用3.1版本web.xml log4j2 会自动注册 如果使用2.5版本xml 需要手动注册 以下代码-->
        <!--<listener>-->
            <!--<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>-->
        <!--</listener>-->
    
        <!--<filter>-->
            <!--<filter-name>log4jServletFilter</filter-name>-->
            <!--<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>-->
        <!--</filter>-->
        <!--<filter-mapping>-->
            <!--<filter-name>log4jServletFilter</filter-name>-->
            <!--<url-pattern>/*</url-pattern>-->
            <!--<dispatcher>REQUEST</dispatcher>-->
            <!--<dispatcher>FORWARD</dispatcher>-->
            <!--<dispatcher>INCLUDE</dispatcher>-->
            <!--<dispatcher>ERROR</dispatcher>-->
        <!--</filter-mapping>-->
        <!-- log4j2-end -->
    
    </web-app>
    View Code

    ps:没什么说的 使用restfull风格 因为这样可以灵活控制以什么结尾

    3、下面是dispatcher的spring配置(这个配置是view层相关的,配置了freemark模板引擎和静态文件)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:p="http://www.springframework.org/schema/p"
           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
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--配置json适配器-->
        <mvc:annotation-driven>
            <mvc:message-converters>
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4" p:fastJsonConfig-ref="fastJsonConfig">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json</value>
                        </list>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
    
        <bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig">
            <property name="serializerFeatures">
                <list>
                    <value>WriteMapNullValue</value>
                    <value>QuoteFieldNames</value>
                </list>
            </property>
        </bean>
        
        <!--注解说明
        <context:annotation-config />-->
    
        <!--  @Controller 声明Action组件
         @Service    声明Service组件    @Service("myMovieLister")
         @Repository 声明Dao组件
         @Component   泛指组件, 当不好归类时.
         @RequestMapping("/menu")  请求映射
         @Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")
         @Autowired 用于注入,(spring提供的) 默认按类型装配
         @Transactional( rollbackFor={Exception.class}) 事务管理
         @ResponseBody
         @Scope("prototype")   设定bean的作用域 -->
        <context:component-scan base-package="com.test.app.controller" />
    
        <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
        <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>
        <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>
    
        <!-- freemarker的配置 -->
        <bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
            <property name="templateLoaderPath" value="/WEB-INF/view/" />
            <property name="defaultEncoding" value="UTF-8" />
            <property name="freemarkerSettings">
                <props>
                    <prop key="template_update_delay">10</prop>
                    <prop key="locale">zh_CN</prop>
                    <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                    <prop key="date_format">yyyy-MM-dd</prop>
                    <prop key="number_format">#.##</prop>
                </props>
            </property>
        </bean>
        <!-- FreeMarker视图解析 在这里配置后缀名ftl和视图解析器。。 -->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
            <property name="suffix" value=".ftl" />
            <property name="contentType" value="text/html;charset=UTF-8" />
            <property name="exposeRequestAttributes" value="true" />
            <property name="exposeSessionAttributes" value="true" />
            <property name="exposeSpringMacroHelpers" value="true" />
        </bean>
    
        <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
              p:basename="i18n/messages" />
        
    </beans>
    View Code

    4、下面发下applicationContext-bean.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:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <context:component-scan base-package="com.test.app">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
    
        <!-- 使用annotation注解方式配置事务 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
        <!-- 使用JDBC事务 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <!-- 引入配置文件 -->
        <context:property-placeholder location="classpath:ini.properties"/>
    
        <!--创建jdbc数据源 -->
        <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
            <property name="maxIdle" value="${maxIdle}"/>
            <property name="minIdle" value="${minIdle}"/>
        </bean>
    
        <!-- 配置SqlSessionFactoryBean -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="configLocation" value="classpath:mybatis.xml"/>
            <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        </bean>
    
        <!-- 配置mybatis dao注册,所有dao都继承sqlMapper
        annotationClass:当指定了annotationClass的时候,MapperScannerConfigurer将只注册使用了annotationClass注解标记的接口。
        markerInterface:markerInterface是用于指定一个接口的,当指定了markerInterface之后,MapperScannerConfigurer将只注册继承自markerInterface的接口。
              如果上述两个属性都指定了的话,那么MapperScannerConfigurer将取它们的并集,而不是交集。即使用了annotationClass进行标记或者继承自markerInterface
              的接口都将被注册为一个MapperFactoryBean。
              除了用于缩小注册Mapper接口范围的属性之外,我们还可以指定一些其他属性,如:
        sqlSessionFactory:这个属性已经废弃。当我们使用了多个数据源的时候我们就需要通过sqlSessionFactory来指定在注册MapperFactoryBean的时候需要使用的SqlSessionFactory,
            因为在没有指定sqlSessionFactory的时候,会以Autowired的方式自动注入一个。换言之当我们只使用一个数据源的时候,即只定义了一个SqlSessionFactory的时候我们就可以不给
            MapperScannerConfigurer指定SqlSessionFactory。
        sqlSessionFactoryBeanName:它的功能跟sqlSessionFactory是一样的,只是它指定的是定义好的SqlSessionFactory对应的bean名称。
        sqlSessionTemplate:这个属性已经废弃。它的功能也是相当于sqlSessionFactory的,因为就像前面说的那样,MapperFactoryBean最终还是使用的SqlSession的getMapper
        方法取的对应的Mapper对象。当定义有多个SqlSessionTemplate的时候才需要指定它。对于一个MapperFactoryBean来说SqlSessionFactory和SqlSessionTemplate只需要其中一个就可以了,
        当两者都指定了的时候,SqlSessionFactory会被忽略。
        sqlSessionTemplateBeanName:指定需要使用的sqlSessionTemplate对应的bean名称。-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.test.app.dao"/>
        </bean>
    
    
    </beans>
    View Code

    5、ini.properties就不发了

    6、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>
    
        <!-- !!!! Driver Class Path !!!! -->
        <classPathEntry location="E:.m2
    epositorycommicrosoftsqlservermssql-jdbc6.2.0.jre8mssql-jdbc-6.2.0.jre8.jar"/>
    
        <context id="context" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
                <property name="suppressDate" value="true"/>
            </commentGenerator>
    
            <!-- !!!! Database Configurations !!!! -->
            <jdbcConnection driverClass="${datasource.driver}"
                            connectionURL="${datasource.url}"
                            userId="${datasource.username}"
                            password="${datasource.password}"/>
    
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!-- !!!! Model Configurations !!!! -->
            <javaModelGenerator targetPackage="com.hmc.crm.entity" targetProject="srcmainjava">
                <property name="enableSubPackages" value="false"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
    
            <!-- !!!! Mapper XML Configurations !!!! -->
            <sqlMapGenerator targetPackage="com.hmc.crm.dao" targetProject="srcmainjavamapper">
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>
    
            <!-- !!!! Mapper Interface Configurations !!!! -->
            <javaClientGenerator targetPackage="com.hmc.crm.dao" targetProject="srcmainjava" type="XMLMAPPER">
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
    
            <!-- !!!! Table Configurations !!!! -->
            <table tableName="UserType" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
                   enableUpdateByExample="false"/>
        </context>
    </generatorConfiguration>
    View Code

    ps:在pom中配置过mybatis的generator插件 会自动读取 resources下的generatorConfig.xml 只需要双击插件即可如下图:

     7、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>
    <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
    <setting name="cacheEnabled" value="false"/>
    <!-- Sets the number of seconds the driver will wait for a response from the database -->
    <setting name="defaultStatementTimeout" value="3000"/>
    <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- Allows JDBC support for generated keys. A compatible driver is required.
    This setting forces generated keys to be used if set to true,
    as some drivers deny compatibility but still work -->
    <setting name="useGeneratedKeys" value="true"/>
    <setting name="logImpl" value="LOG4J2"/>
    </settings>

    <!-- Continue going here -->

    </configuration>

    8、log4j2.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="off" monitorInterval="1800">
    
        <properties>
            <property name="LOG_HOME">/logs/sample</property>
            <property name="FILE_NAME">mylog</property>
        </properties>
    
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
    
            <RollingRandomAccessFile name="running-log"
                                     fileName="${LOG_HOME}/${FILE_NAME}.log"
                                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
                <PatternLayout
                        pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="10 MB"/>
                </Policies>
                <DefaultRolloverStrategy max="20"/>
            </RollingRandomAccessFile>
        </Appenders>
    
        <Loggers>
            <!--<Logger name="com.test.app" level="trace" additivity="true">-->
                <!--<AppenderRef ref="running-log"/>-->
            <!--</Logger>-->
            <Logger name="com.test.app.dao" level="DEBUG" additivity="true">
                <AppenderRef ref="Console"/>
            </Logger>
            <Root level="error">
                <AppenderRef ref="Console"/>
            </Root>
        </Loggers>
    </Configuration>
    View Code

    ps: 在mybatis.xml中红色部分配置了日志实现方式。在log4j2中配置了dao层日志 为DEBUG且为 console 方式 方便调试时查看sql

    接下来就是代码部分:

    1、将generator生成的XXXXMapper.java拷贝到dao层下

    2、新建HelloService.java和HelloServiceImpl.java 在service层下

    public interface HelloService {
        public List<testModel> getAll();
    
    }
    
    @Service
    public class HelloServiceImpl implements HelloService {
    
        @Autowired
        private XXXMapper dao;
    
        public List<testModel> getAllLabels() { return dao.selectAll(); } 
    }

    3、新建HelloController.java 在controller层下

    @Controller
    @RequestMapping("/hello")
    public class HelloController {
    
        @Autowired
        private HelloService service;
    
        @RequestMapping("/index.html")
        public String index(Model model) {
            model.addAttribute("title", "hello spring mvc");
            model.addAttribute("model","正常显示");
            return "index";
        }
    
        @RequestMapping("/list.html")
        public String test(Model model, @RequestParam(defaultValue = "") String key) {
            List<testModel> ans=service.getAll();
            model.addAttribute("all", ans);
            return "list";
        }
    
        @RequestMapping("/list")
        @ResponseBody
        public List<testModel> list(){
            List<testModel> ans=service.getAll(); return ans; } 
    }

    4、在webapp/WEB-INF/view下新建list.ftl

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <table border="1">
        <tr>
            <th>名字</th>
            <th>年龄</th>
        </tr>
    <#list all as label>
        <tr>
            <td>${label.name}</td>
            <td>${label.age}</td>
        </tr>
    </#list>
    </table>
    
    </body>
    </html>

    5.运行尝试

     

    2017-7-16号更新  还是用spring boot 吧反正都帮你配好了 为什么不用呢  而且还可以打包成war 手动doge

  • 相关阅读:
    MFC的序列化的一点研究.
    一次LoadRunner的CPC考试经历
    LAMP架构上(一)
    文件和目录管理
    如何在Linux上清理内存缓存、缓冲与交换空间
    Linux Shell基础(下)
    防火墙(上)
    LAMP架构(三)
    LNMP(二)
    LNMP(一)
  • 原文地址:https://www.cnblogs.com/rufus-hua/p/5088528.html
Copyright © 2011-2022 走看看