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

首頁 > 程序開發 > 軟件開發 > Java > 正文
SpringMVC,Mybatis,FreeMarker鏈接mycat示例(一)

項目結構如圖:

這裏寫圖片描述

這裏寫圖片描述

首先是各類配置文件,屬性文件

mycat.properties內容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#數據庫鏈接配置
#如下是mycat中間件鏈接
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql: //localhost:8066/SSMDB?useUnicode=true&characterEncoding=UTF-8
jdbc.username=wu
jdbc.password=hello123
 
#如下是mysql鏈接
#jdbc.url=jdbc:mysql: //localhost:3306/MyCAT_DB?useUnicode=true&characterEncoding=UTF-8
#jdbc.username=root
#jdbc.password= 123456
 
#定義初始鏈接數
jdbc.initialPoolSize= 10
 
jdbc.maxPoolSize= 200
jdbc.minPoolSize= 5
jdbc.maxIdleTime= 20
jdbc.acquireIncrement= 10
jdbc.maxStatements= 50
jdbc.idleConnectionTestPeriod= 60
 
jdbc.initialSize= 5
#定義最大空閒 
jdbc.maxIdle= 20
#定義最小空閒
jdbc.minIdle= 5
#定義最大鏈接數
jdbc.maxActive= 200
jdbc.removeAbandonedTimeout= 300
#定義最長等待時間 
jdbc.maxWait= 60000
jdbc.maxOpenPreparedStatements= 10

log4j.xml內容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!--?xml version= '1.0' encoding= 'UTF-8' ?-->
 
 
<log4j:configuration xmlns:log4j= "https://jakarta.apache.org/log4j/" >
 
     
         <layout class = "org.apache.log4j.PatternLayout" ><param name= "ConversionPattern" value= "%d [%7r] %6p - %30.30c - %m \n" >
         </layout>
     </appender>
 
     <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>
 
     <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>
 
     <!--
             <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" />
             
         </category>
     -->
 
     <category additivity= "true" name= "org.cometd" >
         <priority value= "ERROR" >
         
     </appender-ref></priority></category>
 
     <category additivity= "true" name= "org.springframework.orm.ibatis3" >
         <priority value= "INFO" >
         
     </appender-ref></priority></category>
 
     <category additivity= "true" name= "org.apache.ibatis" >
         <priority value= "ERROR" >
         
     </appender-ref></priority></category>
 
     <category additivity= "true" name= "java.sql" >
         <priority value= "ERROR" >
         
     </appender-ref></priority></category>
 
     <category additivity= "true" name= "com.mycat" >
         <priority value= "debug" >
         
     </appender-ref></priority></category>
 
     <root>
         <priority value= "ERROR" >
         
         
     </appender-ref></appender-ref></priority></root>
 
</log4j:configuration>

sqlmap文件下的TestMapper.xml實體映射文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!--?xml version= "1.0" encoding= "UTF-8" ?-->
 
 
<mapper namespace= "com.mycat.test.model.Test" >
 
     <resultmap id= "testResultMap" type= "com.mycat.test.model.Test" >
         <result column= "id_" property= "id" >
         <result column= "name_" property= "name" >
         <result column= "user_id" property= "userId" >
     </result></result></result></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" parametertype= "java.lang.Object" resultmap= "testResultMap" >
         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 keyproperty= "id" order= "AFTER" resulttype= "java.lang.Integer" >
             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
         
             ${param.name} = #{param.value}
         
         limit 0 , 1
     </select>
 
     <select id= "findOneByObject" parametertype= "com.mycat.test.model.Test" resultmap= "testResultMap" >
         select * from sam_test
         
                 
                     and name_=#{name}
                 
                 
                     and user_id=#{userId}
                 
         
         limit 0 , 1
     </select>
 
     <select id= "findByMap" resultmap= "testResultMap" >
         select * from sam_test where 1 = 1 AND
         
             ${param.name} = #{param.value}
         
     </select>
 
     <select id= "findByObject" parametertype= "com.mycat.test.model.Test" resultmap= "testResultMap" >
         select * from sam_test
         
             
                 and name_=#{name}
             
             
                 and user_id=#{userId}
             
         
     </select>
 
     <select id= "findByIn" resultmap= "testResultMap" >
         select * from sam_test where 1 = 1 AND
         
             ${param.name} IN (#{param.value})
         
     </select>
 
     <select id= "findByLike" resultmap= "testResultMap" >
         select * from sam_test where 1 = 1 AND
         
             ${param.name} LIKE #{param.value}
         
     </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
         
         ${whereClause}
         
     </select>
 
     <select id= "query" parametertype= "java.util.Map" resultmap= "testResultMap" >
         select ${fieldsClause} from sam_test where 1 = 1
         
         ${whereClause}
         
         
         ${orderClause}
         
         limit ${limit} offset ${offset}
     </select>
</mapper>

spring-config-db.xml配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<!--?xml version= "1.0" encoding= "UTF-8" ?-->
        https: //www.springframework.org/schema/beans/spring-beans-3.1.xsd
        https: //www.springframework.org/schema/tx
        https: //www.springframework.org/schema/tx/spring-tx.xsd
        https: //www.springframework.org/schema/aop
        https: //www.springframework.org/schema/aop/spring-aop.xsd">
 
     <!-- 配置Mybatis會話工廠 -->
     <bean class = "org.mybatis.spring.SqlSessionFactoryBean" id= "sqlSessionFactory" >
 
         <!-- 注入DataSource -->
         <!-- 數據源 -->
         <property name= "dataSource" ref= "druidDataSource" >
 
         <!-- 須要加載的mapper.xml,該bean被建立後,會自動加載這些文件。 -->
         <property name= "mapperLocations" >
             <list>
                   <!-- 自動匹配Mapper映射文件  --> 
                 <value>classpath*:sqlmap/*Mapper.xml</value>
             </list>
         </property>
     </property></bean>
 
     <bean class = "org.mybatis.spring.SqlSessionTemplate" id= "sqlSession" >
         <constructor-arg ref= "sqlSessionFactory" >
     </constructor-arg></bean>
 
     <!-- Druid集鏈接池,首先spring配置DataSource -->
     <bean class = "com.alibaba.druid.pool.DruidDataSource" destroy-method= "close" id= "druidDataSource" init-method= "init" >
         <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" />   -->
 
     </property></property></property></property></property></property></property></property></property></property></property></property></property></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>   -->
 
 
      <!-- 配置事物管理器 -->
     <!-- 事務管理器 對mybatis操做數據庫事務控制,spring使用jdbc的事務控制類 -->
     <bean class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" id= "transactionManager" >
          <!-- 數據源 dataSource在上面配置了 -->
         <property name= "dataSource" ref= "druidDataSource" >
     </property></bean>
     <!-- 配置聲明式事務 -->
     <tx:annotation-driven transaction-manager= "transactionManager" >
 
</tx:annotation-driven></beans>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!--?xml version= "1.0" encoding= "UTF-8" ?-->
<!--suppress ALL -->
             https: //www.springframework.org/schema/beans
             https: //www.springframework.org/schema/beans/spring-beans-3.1.xsd
             https: //www.springframework.org/schema/context
             https: //www.springframework.org/schema/context/spring-context-3.1.xsd
             https: //www.springframework.org/schema/mvc
             https: //www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
             https: //www.springframework.org/schema/util
             https: //www.springframework.org/schema/util/spring-util-3.1.xsd">
 
      <!-- spring 自動掃描組件 -->
      <!-- 自動掃描 controller 包下的全部類 --> 
      <!-- mvc controller -->
     <context:component-scan base- package = "com.mycat" >
         <context:include-filter expression= ".*.controller.*" type= "regex" >
         <context:include-filter expression= ".*.service.*" type= "regex" >
         <context:include-filter expression= ".*.dao.*" type= "regex" >
     </context:include-filter></context:include-filter></context:include-filter></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 class = "org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" id= "freemarkerConfig" >
         <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>
     </property></bean>
     <bean class = "org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" id= "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" >
     </property></property></property></property></property></property></property></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" >
             </entry></entry></entry></map>
         </property>
         <property name= "viewResolvers" >
             <list>
                 <ref bean= "freeMarkerViewResolver" >
             </ref></list>
         </property>
         <property name= "defaultViews" >
             <list>
                 <!-- for application/json -->
                 <bean class = "org.springframework.web.servlet.view.json.MappingJacksonJsonView" >
             </bean></list>
         </property>
     </property></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" >
             </ref></util:list>
         </property>
     </bean>
     <bean class = "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" id= "mappingJacksonHttpMessageConverter" >
         <property name= "supportedMediaTypes" >
             <list>
                 <value>text/html;charset=UTF- 8 </value>
             </list>
         </property>
     </bean>
 
</bean></mvc: default -servlet-handler></mvc:annotation-driven></beans>

spring-config.xml配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--?xml version= "1.0" encoding= "UTF-8" ?-->
        https: //www.springframework.org/schema/beans/spring-beans-3.1.xsd
        https: //www.springframework.org/schema/context https://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" >
 
</ import ></ import ></context:property-placeholder></beans>

暫時先到這裏

相關文章
相關標籤/搜索