SpringMVC,Mybatis,FreeMarker连接mycat示例(一)

来源:互联网 发布:在职软件工程硕士2018 编辑:程序博客网 时间:2024/05/29 10:38

人生最重要的一点是,永远不要迷失自己。

项目结构如图:

这里写图片描述
这里写图片描述

首先是各种配置文件,属性文件

mycat.properties内容:

#数据库连接配置#以下是mycat中间件连接jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:8066/SSMDB?useUnicode=true&characterEncoding=UTF-8jdbc.username=wujdbc.password=hello123#以下是mysql连接#jdbc.url=jdbc:mysql://localhost:3306/MyCAT_DB?useUnicode=true&characterEncoding=UTF-8#jdbc.username=root#jdbc.password=123456#定义初始连接数jdbc.initialPoolSize=10jdbc.maxPoolSize=200jdbc.minPoolSize=5jdbc.maxIdleTime=20jdbc.acquireIncrement=10jdbc.maxStatements=50jdbc.idleConnectionTestPeriod=60jdbc.initialSize=5#定义最大空闲  jdbc.maxIdle=20#定义最小空闲 jdbc.minIdle=5#定义最大连接数 jdbc.maxActive=200jdbc.removeAbandonedTimeout=300#定义最长等待时间  jdbc.maxWait=60000jdbc.maxOpenPreparedStatements=10

log4j.xml内容:

<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">        <layout class="org.apache.log4j.PatternLayout">            <param name="ConversionPattern" value="%d [%7r] %6p - %30.30c - %m \n"/>        </layout>    </appender>    <appender name="FILE-DEBUG" class="org.apache.log4j.FileAppender">        <param name="Append" value="false"/>        <param name="file" value="mycatDemo-debug.log"/>        <layout class="org.apache.log4j.PatternLayout">            <param name="ConversionPattern" value="%d [%7r] %6p - %30.30c - %m \n"/>        </layout>    </appender>    <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">        <param name="DatePattern" value="'.'yyyy-MM-dd"/>        <param name="Append" value="true"/>        <param name="file" value="mycatDemo.log"/>        <layout class="org.apache.log4j.PatternLayout">            <param name="ConversionPattern" value="%d [%7r] %6p - %30.30c - %m \n"/>        </layout>        <filter class="org.apache.log4j.varia.LevelRangeFilter">            <param name="LevelMin" value="DEBUG"/>        </filter>    </appender>    <!--<appender name="FILE-ZOOKEEPER" class="org.apache.log4j.DailyRollingFileAppender">            <param name="DatePattern" value="'.'yyyy-MM-dd"/>            <param name="file" value="${las-im-scheduler.log.path}/las-report-zookeeper.log"/>            <layout class="org.apache.log4j.PatternLayout">                <param name="ConversionPattern" value="%d [%7r] %6p - %30.30c - %m \n"/>            </layout>        </appender>        <category name="org.apache.zookeeper" additivity="false">            <priority value="debug"/>            <appender-ref ref="FILE-ZOOKEEPER"/>        </category>    -->    <category name="org.cometd" additivity="true">        <priority value="ERROR"/>        <appender-ref ref="FILE"/>    </category>    <category name="org.springframework.orm.ibatis3" additivity="true">        <priority value="INFO"/>        <appender-ref ref="CONSOLE"/>    </category>    <category name="org.apache.ibatis" additivity="true">        <priority value="ERROR"/>        <appender-ref ref="CONSOLE"/>    </category>    <category name="java.sql" additivity="true">        <priority value="ERROR"/>        <appender-ref ref="CONSOLE"/>    </category>    <category name="com.mycat" additivity="true">        <priority value="debug"/>        <appender-ref ref="FILE"/>    </category>    <root>        <priority value="ERROR"/>        <appender-ref ref="CONSOLE"/>        <appender-ref ref="FILE-DEBUG"/>    </root></log4j:configuration>

sqlmap文件下的TestMapper.xml实体映射文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mycat.test.model.Test">    <resultMap type="com.mycat.test.model.Test" id="testResultMap">        <result property="id" column="id_"/>        <result property="name" column="name_"/>        <result property="userId" column="user_id"/>    </resultMap>    <select id="selectAll" resultMap="testResultMap">        select * from sam_test    </select>    <select id="selectSome" parameterType="java.util.Map" resultMap="testResultMap">        select * from sam_test limit #{offset},#{limit}    </select>    <select id="getObject" resultMap="testResultMap" parameterType="java.lang.Object">        select * from sam_test where id_ = #{id}    </select>    <insert id="insert" keyProperty="id_" parameterType="com.mycat.test.model.Test">        INSERT INTO sam_test(        name_,        user_id        )        VALUES(            #{name,jdbcType=VARCHAR},            #{userId,jdbcType=BIGINT}        )        <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">            select last_insert_id() as id        </selectKey>    </insert>    <update id="update" parameterType="com.mycat.test.model.Test">        update sam_test        <set>            <if test="name != null and name != ''">              name_ = #{name},            </if>            <if test="userId != null">              user_id = #{userId},            </if>        </set>        where id_=#{id}    </update>    <!-- #{}中的参数名与方法中的参数的复杂数据类型的属性名一致 -->    <delete id="delete" parameterType="java.lang.Integer">        delete from sam_test where id_ = #{id}    </delete>    <select id="findOneByMap" resultMap="testResultMap">        select * from sam_test where 1=1 AND        <foreach item="param" index="key" collection="list"  open="" separator="AND" close="">            ${param.name} = #{param.value}        </foreach>        limit 0, 1    </select>    <select id="findOneByObject" parameterType="com.mycat.test.model.Test" resultMap="testResultMap">        select * from sam_test        <where>                <if test="name != null">                    and name_=#{name}                </if>                <if test="userId != null">                    and user_id=#{userId}                </if>        </where>        limit 0, 1    </select>    <select id="findByMap" resultMap="testResultMap">        select * from sam_test where 1=1 AND        <foreach item="param" index="key" collection="list" open="" separator="AND" close="">            ${param.name} = #{param.value}        </foreach>    </select>    <select id="findByObject" parameterType="com.mycat.test.model.Test" resultMap="testResultMap">        select * from sam_test        <where>            <if test="name != null">                and name_=#{name}            </if>            <if test="userId != null">                and user_id=#{userId}            </if>        </where>    </select>    <select id="findByIn" resultMap="testResultMap">        select * from sam_test where 1=1 AND        <foreach item="param" index="key" collection="list"  open="" separator="AND" close="">            ${param.name} IN (#{param.value})        </foreach>    </select>    <select id="findByLike" resultMap="testResultMap">        select * from sam_test where 1=1 AND        <foreach item="param" index="key" collection="list"  open="" separator="AND" close="">            ${param.name} LIKE #{param.value}        </foreach>    </select>    <select id="getTotalCount" resultType="int">        select count(1) from sam_test    </select>    <select id="getCount" parameterType="java.util.Map" resultType="int">        select count(1) from sam_test where 1=1        <if test="whereClause != null">        ${whereClause}        </if>    </select>    <select id="query" parameterType="java.util.Map" resultMap="testResultMap">        select ${fieldsClause} from sam_test where 1=1        <if test="whereClause != null">        ${whereClause}        </if>        <if test="orderClause != null">        ${orderClause}        </if>        limit ${limit} offset ${offset}    </select></mapper>

spring-config-db.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:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd       http://www.springframework.org/schema/tx       http://www.springframework.org/schema/tx/spring-tx.xsd       http://www.springframework.org/schema/aop       http://www.springframework.org/schema/aop/spring-aop.xsd">    <!-- 配置Mybatis会话工厂 -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <!-- 注入DataSource -->        <!-- 数据源 -->        <property name="dataSource" ref="druidDataSource" />        <!-- 需要加载的mapper.xml,该bean被创建后,会自动加载这些文件。 -->        <property name="mapperLocations">            <list>                  <!-- 自动匹配Mapper映射文件  -->                  <value>classpath*:sqlmap/*Mapper.xml</value>            </list>        </property>    </bean>    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">        <constructor-arg ref="sqlSessionFactory" />    </bean>    <!-- Druid集连接池,首先spring配置DataSource -->    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">        <property name="driverClassName" value="${jdbc.driverClassName}" />         <!-- 基本属性 url、user、password -->          <property name="url" value="${jdbc.url}" />        <property name="username" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />        <!--initialSize: 初始化连接-->        <property name="initialSize" value="${jdbc.initialSize}"/>        <!--minIdle: 最小空闲连接-->        <property name="minIdle" value="${jdbc.minIdle}"/>        <!--maxActive: 最大连接数量-->        <property name="maxActive" value="${jdbc.maxActive}"/>         <!--removeAbandoned: 对泄漏的连接,是否自动回收超时连接-->        <property name="removeAbandoned" value="true"/>        <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->        <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>        <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->        <property name="maxWait" value="${jdbc.maxWait}"/>        <property name="defaultAutoCommit">            <value>false</value>        </property>        <property name="validationQuery" value="select 1"/>        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->          <!-- 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false -->          <property name="poolPreparedStatements" value="true" />        <property name="maxOpenPreparedStatements" value="${jdbc.maxOpenPreparedStatements}" />         <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->          <!--<property name="filters" value="stat"/>-->         <!-- 慢日志查询  缺省为3秒  修改为10秒 10000 -->          <!-- <property name="connectionProperties" value="druid.stat.slowSqlMillis=5000" />   -->    </bean>    <!-- druid 监控  spring  -->      <!--  <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"/> -->    <!-- 按类型拦截配置 -->    <!-- <bean id="druid-type-proxyCreator" class="com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator"> -->    <!-- 所有ABCInterface的派生类被拦截监控  -->    <!-- <property name="targetBeanType" value="xxxx.ABCInterface" />          <property name="interceptorNames">        <list>            <value>druid-stat-interceptor</value>        </list>    </property>    </bean> -->    <!-- 按照BeanId来拦截配置 -->    <!-- <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    <property name="proxyTargetClass" value="true" />    <property name="beanNames">        <list> -->            <!-- 这里配置需要拦截的bean id列表 -->            <!-- <value>xxx-dao</value>            <value>xxx-service</value>        </list>    </property>    <property name="interceptorNames">        <list>            <value>druid-stat-interceptor</value>        </list>    </property>    </bean> -->    <!-- 方法名正则匹配拦截配置 -->    <!--    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">   -->    <!--         <property name="patterns">   -->    <!--             <list>   -->    <!--                 <value>com.xinnet.*.service.*</value>   -->    <!--                <value>com.mycompany.service.*</value> -->    <!--                 <value>com.mycompany.dao.*</value> -->    <!--             </list>   -->    <!--         </property>   -->    <!--     </bean>   -->    <!--     <aop:config>   -->    <!--         <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />   -->    <!--     </aop:config>   -->     <!-- 配置事物管理器 -->    <!-- 事务管理器 对mybatis操作数据库事务控制,spring使用jdbc的事务控制类 -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">         <!-- 数据源 dataSource在上面配置了 -->        <property name="dataSource" ref="druidDataSource" />    </bean>    <!-- 配置声明式事务 -->    <tx:annotation-driven transaction-manager="transactionManager"/></beans>

spring-config-mvc.xml配置:

<?xml version="1.0" encoding="UTF-8"?><!--suppress ALL --><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xmlns:util="http://www.springframework.org/schema/util"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="            http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd            http://www.springframework.org/schema/context            http://www.springframework.org/schema/context/spring-context-3.1.xsd            http://www.springframework.org/schema/mvc            http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd            http://www.springframework.org/schema/util            http://www.springframework.org/schema/util/spring-util-3.1.xsd">     <!-- spring 自动扫描组件 -->     <!-- 自动扫描 controller 包下的所有类 -->       <!-- mvc controller -->    <context:component-scan base-package="com.mycat">        <context:include-filter type="regex" expression=".*.controller.*"/>        <context:include-filter type="regex" expression=".*.service.*"/>        <context:include-filter type="regex" expression=".*.dao.*"/>    </context:component-scan>     <!-- 开启注解的功能 -->     <!-- 启动支持 mvc 的注解,比如  @Controller, @RequestMapping 等-->      <mvc:annotation-driven/>    <!--<bean id="conversionService"-->    <!--class="org.springframework.format.support.FormattingConversionServiceFactoryBean">-->    <!--<property name="formatterRegistrars">-->    <!--<bean class="com.jd.common.springmvc.converter.DefaultFormatterRegistrar"/>-->    <!--</property>-->    <!--</bean>-->    <!-- 解决静态资源被拦截的问题 -->    <mvc:default-servlet-handler/>    <!-- static resources -->    <!--<mvc:resources location="/static/" mapping="/static/**" cache-period="864000"/>-->    <!--<mvc:resources location="/js/" mapping="/js/**" cache-period="864000"/>-->     <!-- 配置视图解析器,使得在JSP中能够使用完整的JSTL功能 -->    <!-- 设置视图解析工具 -->      <!-- template view -->     <bean id="freemarkerConfig"          class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">        <property name="templateLoaderPath" value="/WEB-INF/views/"/>        <property name="freemarkerSettings">            <props>                <prop key="template_update_delay">0</prop>                <prop key="default_encoding">UTF-8</prop>                <prop key="number_format">0.##########</prop>                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>                <prop key="classic_compatible">true</prop>                <prop key="template_exception_handler">ignore</prop>            </props>        </property>    </bean>    <bean id="freeMarkerViewResolver"          class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">        <!--<property name="layoutUrl" value="layout/default.ftl"/>-->        <property name="cache" value="false"/>        <property name="suffix" value=".ftl"/>        <property name="requestContextAttribute" value="request"/>        <property name="exposeSpringMacroHelpers" value="true"/>        <property name="exposeRequestAttributes" value="true"/>        <property name="exposeSessionAttributes" value="true"/>        <property name="contentType" value="text/html;charset=UTF-8"/>    </bean>    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">        <property name="defaultContentType" value="text/html"/>        <!-- not by accept header -->        <property name="ignoreAcceptHeader" value="true"/>        <!-- by extension -->        <property name="mediaTypes">            <map>                <entry key="html" value="text/html"/>                <entry key="xml" value="application/xml"/>                <entry key="json" value="application/json"/>            </map>        </property>        <property name="viewResolvers">            <list>                <ref bean="freeMarkerViewResolver"/>            </list>        </property>        <property name="defaultViews">            <list>                <!-- for application/json -->                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>            </list>        </property>    </bean>    <!-- locale related -->    <!--<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">-->    <!--<property name="cookieName" value="_clientlocale"/>-->    <!--<property name="defaultLocale" value="zh_CN"/>-->    <!--<property name="cookieMaxAge" value="2147483647"/>-->    <!--</bean>-->    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">        <property name="messageConverters">            <util:list id="beanList">                <ref bean="mappingJacksonHttpMessageConverter"/>            </util:list>        </property>    </bean>    <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">        <property name="supportedMediaTypes">            <list>                <value>text/html;charset=UTF-8</value>            </list>        </property>    </bean></beans>

spring-config.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-3.1.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <!-- spring容器中最多只能定义一个context:property-placeholder spring中 context:property-placeholder         导入多个独立的 .properties配置文件 Spring容器仅允许最多定义一个PropertyPlaceholderConfigurer(或<context:property-placeholder/>),其余的会被Spring忽略掉         通配符解决 -->    <!-- 引入项目配置文件 -->    <!-- 加载db.properties文件中的内容,db.properties文件中的key要有一定的特殊规则 -->    <context:property-placeholder location="classpath*:mycat.properties" />    <import resource="spring-config-mvc.xml" />    <!--文件中主要负责配置:加载db.properties、配置数据源、配置SqlSessionFactoryBean、Mapper扫描器-->    <import resource="spring-config-db.xml" /></beans>

暂时先到这里

0 0
原创粉丝点击