欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC+mybatis+DWR3注解 博客分类: 框架整合Spring springMVC注解SpringMVC+mybatis+DWR3SpringMVC+DWR3注解配置框架整合

程序员文章站 2024-03-24 10:17:28
...
框架整合中需要各个软件版本
Spring : spring-flex-1.0.3.RELEASE.zip
DWR: dwr-3.0.0.116.rc1-src.zip
mybatis: mybatis-3.0.6-bundle.zip
框架整合后的配置文件结构图

SpringMVC+mybatis+DWR3注解
            
    
    博客分类: 框架整合Spring springMVC注解SpringMVC+mybatis+DWR3SpringMVC+DWR3注解配置框架整合


说明:
mybatis-config.xml 放置在src目录下,配置mybatis的参数
applicationContext.xml 放置WEB-INF目录下,配置spring的基础配置和数据源等
db.properties 放置WEB-INF目录下,配置数据库的连接参数
web.xml 配置web应用,如springMVC中的前端控制器DispatcherServlet和ContextLoaderListener  spring监听器等。
Web.xml详细配置和说明
配置Spring的启动监听
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
配置SpringMVC
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
配置DWR前端控制器

<servlet-mapping> 
        <servlet-name>springmvc</servlet-name> 
        <url-pattern>/dwr/*</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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

applicationContext.xml配置
配置 以注解方式扫描springBean
<!—以注解方式扫描Spring Bean -->
<context:annotation-config />
<!—配置扫描SpringBean的时候 都需要扫描哪些目录下 -->
<context:component-scan base-package="com"></context:component-scan>
配置数据源

<!-- 这个bean 由spring提供,用来加载properties文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>WEB-INF/db.properties</value>
</property>
</bean>
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
<!-- 数据库驱动类 -->
<property name="driverClassName">
<value>${driverClassName}</value>
</property>
<!-- 连接池的最大数据库连接数。设为0表示无限制。 -->
<property name="maxActive">
<value>${maxActive}</value>
</property>
<!-- 最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制。 -->
<property name="maxIdle">
<value>${maxIdle}</value>
</property>
<!-- 最大建立连接等待时间(毫秒)。如果超过此时间将接到异常。设为-1表示无限制 -->
<property name="maxWait">
<value>${maxWait}</value>
</property>
<!--指定数据库的默认自动提交 -->
<property name="defaultAutoCommit">
<value>${defaultAutoCommit}</value>
</property>
<!--是否自动回收超时连接 -->
<property name="removeAbandoned">
<value>${removeAbandoned}</value>
</property>
<!--超时时间(以秒数为单位) -->
<property name="removeAbandonedTimeout">
<value>${removeAbandonedTimeout}</value>
</property>
<property name="logAbandoned">
<value>${logAbandoned}</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>
db.properties文件
# dataSource config
#Oracle
#url=jdbc:oracle:thin:@localhost:1521:orcl
#MySql
url=jdbc:mysql://127.0.0.1:3306/framework
username=root
password=root
#Oracle
#driverClassName=oracle.jdbc.driver.OracleDriver
#MySql
driverClassName=com.mysql.jdbc.Driver
maxActive=100
maxIdle=30
maxWait=3000
defaultAutoCommit=true
removeAbandoned=true
removeAbandonedTimeout=60
logAbandoned=true

配置mybstis SqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="dataSource" ref="dataSource" />
<property  name="mapperLocations"  value="classpath*:com/**/*.xml"/> 
</bean>
说明:
<property  name="mapperLocations"  value="classpath*:com/**/*.xml"/>
指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件。
配置事务
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<aop:advisor pointcut="execution(* com.sanling..*Service.*(..))" advice-ref="txAdvice" />
<aop:advisor pointcut="execution(* com.sanling.utils..*Service.*(..))" advice-ref="txAdvice" />
</aop:config>

<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="is*" read-only="true" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

springmvc.xml
配置springMVC的调转规则

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
配置DWR

<context:annotation-config />
<context:component-scan base-package="com" />
<dwr:annotation-scan scanRemoteProxy="true" scanDataTransferObject="true" base-package="com" /> 
<dwr:annotation-config /> 
<dwr:url-mapping /> 
<dwr:controller id="dwrController" debug="true" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
<property name="order" value="1" /> 
</bean> 
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> 
<property name="order" value="2" /> 
</bean> 
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="order" value="3" />  
      <property value="true" name="alwaysUseFullPath"></property> 
      <property name="mappings"> 
        <props> 
          <prop key="/dwr/**">dwrController</prop> 
        </props> 
     </property> 
    </bean>  
说明:
DWR配置
<dwr:annotation-scan>
扫描JavaBean的转换,@DataTransferObject对JavaBean进行转换,@RemoteProperty,必须加在get方法上。
<context:annotation-config /> 
要求DWR在Spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。
<dwr:url-mapping />
要求DWR将util.js和engine.js映射到dwrController
<dwr:configuration />
此标签在这个例子中不是必须的,如果你想配置Spring容器之外的类,就需要它了
<dwr:controller id="dwrController" debug="true" /> 
部署项目时, 请把debug设为false
<context:component-scan base-package="com.myapp.web.controller" />
多个包名用逗号隔开, 但不能有空格
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
添加下面的Bean,就可以通过http://localhost:8080/myApp/dwr来访问test page
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
order值越小, 优先级越高,必须有这项配置,否则SpringMVC和DWR就不能同时使用注解
对于<context:annotation-config /> 在applicationContext.xml中已经有过配置,则可以把applicationContext.xml中的去掉,保留springmvc.xml中的就可以。

BaseDao

@Repository
public class BaseDao extends SqlSessionDaoSupport{
private SqlSessionFactory sqlSessionFactory;
@Resource
public void setSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
public BaseDao() {
System.out.println("--BaseDao---------");
}

说明:
BaseDao 为dao层,定义了基础的数据库操作
BaseDao层,自动注入了mybatis的SqlSessionFactory,BaseDao层中数据库的相关操作,都可以通过SqlSessionFactory来完成
JavaBean
@DataTransferObject
public class Region implements Serializable {

private int id;
private int pid;
private String name;
private String code;
}
说明:
注解@DataTransferObject的作用是在DWR调用Java,返回JavaBean对象的时候,JavaBean对象和JS对象进行转换。
JavaBean的映射文件region.mapper.xml

<mapper namespace="region">
<resultMap type="com.sanling.business.region.entity.Region" id="resultMap">
<id property="id" column="id" />
<result property="pid" column="pid" />
<result property="code" column="code" />
<result property="name" column="name" />
<result property="codeOrder" column="codeOrder" />
<result property="treeLevel" column="treeLevel" />
<result property="innerCode" column="innerCode" />
</resultMap>
<insert id="save" parameterType="com.sanling.business.region.entity.Region">
<selectKey resultType="int" keyProperty="id">   
<!--
要返回保存数据的ID
orcale:SELECT LOGS_SEQ.nextval AS ID FROM DUAL
MYSQL: SELECT LAST_INSERT_ID()
-->
     SELECT LAST_INSERT_ID()    
</selectKey>
insert into
tb_region(pid,code,name,codeOrder,treeLevel,innerCode)
values(#{pid},#{code},#{name},#{codeOrder},#{treeLevel},#{innerCode})
</insert>
</mapper>
Service
@Service
public class RegionService {

private IDao dao;
@Resource
public void setDao(BaseDao dao) {
this.dao = dao;
}
public int saveRegion(Region bean) throws Exception{
this.dao.save("region.save", bean);
return bean.getId();
}

说明:
RegionService层自动注入dao层,提供数据库访问操作
Action
@Controller
@RemoteProxy
@RequestMapping("/regionAction")
public class RegionAction {
private RegionService regionService ;

@Resource
public void setRegionService(RegionService regionService) {
this.regionService = regionService;
}

@RequestMapping("/testHttp")
public void testHttp(){
System.out.println(" http test !");
}
@RemoteMethod
public Region addRegion(Region bean){
if(bean!=null){
String innerCode = bean.getInnerCode()+bean.getCode();
bean.setInnerCode(innerCode);
try {
int id = this.regionService.saveRegion(bean);
bean.setId(id);
} catch (Exception e) {
e.printStackTrace();
}
}
return bean ;
}
}
说明:
类注解@RemoteProxy:表明允许DWR框架调用该后台类
方法注解@RemoteMethod:表明允许DWR调用后台java类中的方法
类注解和方法注解@RequestMapping("/regionAction"):表明该类为SpringMVC类,访问路径/regionAction/testHttp.action 就能访问到类RegionAction中的testHttp方法(页面怎么调转,这里不做详细说明)
测试
测试SpringMVC是否能正常访问:
http://localhost:8080/项目名/regionAction/testHttp.action 看看程序是否能进入到testHttp()方法即可。
测试DWR是否正常
访问:http://localhost:8080/项目名/dwr 能看到如下界面

注意,只要在类上注解@RemoteProxy,则在测试DWR的时候,都能看到这些类名。
  • SpringMVC+mybatis+DWR3注解
            
    
    博客分类: 框架整合Spring springMVC注解SpringMVC+mybatis+DWR3SpringMVC+DWR3注解配置框架整合
  • 大小: 5.7 KB