Spring3.2+Struts2.3+Mybatis3.2整合使用(注解使用)

0.包结构:

配置文件结构:

1.spring配置文件

applicationContext-dao.xml  (配置连接池,mybatis会话工厂,扫描mybatis文件的包,扫描action包与扫描service包,事务的控制)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 0.连接池属性设置读取指定的properties文件 -->
    <context:property-placeholder location="classpath:db.properties" />

    <!-- 1.将连接池放入spring容器 -->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--2. 配置 Mybatis的会话工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置Mybatis的核心 配置文件所在位置 -->
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
    </bean>

    <!-- 3.1 mapper代理配置方法一 这种方法需要大量重复的配置代理对象 MapperFactoryBean:根绝mapper接口生成代理对象
        <bean id="selectUser" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="cn.qlq.core.dao.SelectUser"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> -->

    <!-- 3.2通过MapperScannerConfigurer扫描进行批量生成代理对象 遵循规范:mapper.java和mapper.xml名字一样且在同一个目录下
        自动扫描出来的代理对象的id为mapper类类名(首字母小写) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 指定扫描的包名,如果有多个,用半角逗号分隔 -->
        <property name="basePackage" value="danger.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- 4.配置事务管理器 -->
    <!-- 事务核心管理器,封装了事务操作,依赖于连接池 -->
    <bean name="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 5.开启注解管理aop事务 -->
    <tx:annotation-driven />

    <!-- 与struts2整合的配置 -->
    <!-- 扫描Action基本包 -->
    <context:component-scan base-package="danger.action"></context:component-scan>

    <!-- 扫描service -->
    <context:component-scan base-package="danger.service"></context:component-scan>

    <!-- 事务模板对象,依赖于事务核心管理器 -->
    <bean name="transactionTemplate"
        class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager"></property>
    </bean>

    <!-- ················开始使用XML管理事务························ -->
    <!-- 配置事务通知(无论哪种方式都要用到事务的核心管理器) -->
    <tx:advice transaction-manager="transactionManager" id="firstTx">
        <tx:attributes>
            <!--以方法为单位,指定方法应用事务什么属性 isolation:隔离级别 read-only:只读属性 propagation:传播行为 -->
            <!-- 企业中运用通配符命名规则。两套增删改查(8种) -->
            <tx:method name="save*" isolation="DEFAULT" read-only="false"
                propagation="REQUIRED" />
            <tx:method name="persist*" isolation="DEFAULT" read-only="false"
                propagation="REQUIRED" />
            <tx:method name="delete*" isolation="DEFAULT" read-only="false"
                propagation="REQUIRED" />
            <tx:method name="remove*" isolation="DEFAULT" read-only="false"
                propagation="REQUIRED" />
            <tx:method name="update*" isolation="DEFAULT" read-only="false"
                propagation="REQUIRED" />
            <tx:method name="modify*" isolation="DEFAULT" read-only="false"
                propagation="REQUIRED" />
            <tx:method name="get*" isolation="DEFAULT" read-only="true"
                propagation="REQUIRED" />
            <tx:method name="find*" isolation="DEFAULT" read-only="true"
                propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>

    <!-- 配置织入 -->
    <aop:config>
        <!-- 配置切点表达式 -->
        <aop:pointcut expression="execution(* cn.xm.exam.service.*.*.*ServiceImpl.*(..))"
            id="texPc" />
        <!-- 配置切面:切点+通知 advice-ref:通知名称 pointcut-ref:切点名称 -->
        <aop:advisor advice-ref="firstTx" pointcut-ref="texPc" />
    </aop:config>
</beans>

2.struts配置:

struts.xml (主配置文件,需要放在src下)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="devMode" value="true"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.action.extension" value="action" />
    <constant name="struts.objectFactory" value="spring"></constant>

    <!-- 解决还乱全被struts拦截没匹配的action -->
    <package name="error" extends="struts-default">
        <default-action-ref name="notFound" />
        <action name="notFound" class="danger.action.sys.ErrorAction">
            <result>/404.jsp</result>
        </action>
    </package>

    <!-- 乔利强写的 -->
    <include file="struts/struts_json.xml"></include>
    <include file="struts/queryView.xml"></include>
    <!-- 马非写的 -->
    <include file="struts/struts_rechecktable.xml"></include>
    <include file="struts/struts_sys.xml"></include>

</struts>

struts_sys.xml    (普通struts配置)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="user" extends="struts-default" namespace="/">
        <action name="user_*" class="userAction" method="{1}">
            <result name="login_success">/main/hdReview.jsp</result>
            <result name="login_error">/login/login.jsp</result>
        </action> 

    </package>

</struts>

struts_json.xml  (JSON格式的配置)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true"></constant>
    <package name="json_package" extends="json-default">

        <!-- 查询隐患详细信息 -->
        <action name="queryDetailInfo" class="danger.action.queryView.QueryDetailInfo">
            <result name="success" type="json">
                <param name="root">result</param>
            </result>
        </action>

        <!-- 查询统计隐患信息 -->
        <action name="queryDangerTongji" class="danger.action.queryView.TongjiDangerAction">
            <result name="success" type="json">
                <param name="root">result</param>
            </result>
        </action>

    </package>
</struts>

3.mybatis配置

sqlMapConfig.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>

    <!-- 只需要定义个别名,这个应该有 -->
    <typeAliases>
        <package name="danger.mapper" />
    </typeAliases>
    <!-- 动态代理也不需要配置这个扫描,留着也行 -->
    <mappers>
        <!-- 原始DAO开发使用这个手动加载xml -->
        <package name="danger.mapper" />
    </mappers>

</configuration>

4.使用方法:

mapper层

接口与xml放在同一包下

接口:

package danger.mapper.dangerManage.custom;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import danger.bean.dangerManage.Danger;

public interface DangerCustomMapper {

    /**
     * 组合条件查询隐患
     *
     * @param map
     * @return
     * @throws Exception
     */
    public List<Danger> findDangerByCondition(Map<String, Object> map) throws SQLException;

    /**
     * 根据条件查询满足条件的总数
     *
     * @param map
     * @return
     * @throws Exception
     */
    public Integer getDangerCountByCondition(Map<String, Object> map) throws SQLException;

    /**
     * 统计信息的时候根据开始时间和结束时间,单位和级别,类型查询满足条件的总数
     *
     * @param map
     *            开始时间,结束时间,单位,级别,类型查询
     * @return
     * @throws SQLException
     */
    public Integer getDangerCountByCondition2(Map<String, Object> map) throws SQLException;

    /**
     * 统计信息的时候根据开始时间和结束时间,单位和级别,类型查询满足条件的记录
     *
     * @param map
     *            开始时间,结束时间,单位,级别,类型查询
     * @return
     * @throws Exception
     */
    public List<Danger> findDangerByCondition2(Map<String, Object> map) throws SQLException;

}

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">

<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
<mapper namespace="danger.mapper.dangerManage.custom.DangerCustomMapper">

    <!-- 查询分页 -->
    <sql id="query_page_limit">
        <if test="index!=null">
            LIMIT #{index},#{currentCount}
        </if>
    </sql>
    <!-- 查询隐患的条件 -->
    <sql id="query_danger_where">
        <if test="checkunit!=null">
            and checkunit=#{checkunit}
        </if>
        <if test="manager!=null">
            and manager=#{manager}
        </if>
        <if test="startTime!=null">
            and findTime > #{startTime}
        </if>
        <if test="endTime!=null">
            and findTime&lt;#{endTime}
        </if>
        <if test="dangergrade!=null">
            and dangergrade=#{dangergrade}
        </if>
        <if test="address!=null">
            and address like ‘%${address}%‘
        </if>
        <if test="content!=null">
            and content like ‘%${content}%‘
        </if>
        <if test="type!=null">
            and type=#{type}
        </if>
        <if test="dangerstatus!=null">
            and dangerstatus=#{dangerstatus}
        </if>
    </sql>

    <select id="findDangerByCondition" resultType="danger.bean.dangerManage.Danger"
        parameterType="hashmap">
        SELECT * FROM `danger`.`danger`
        <where>
            <include refid="query_danger_where"></include>
        </where>
        <include refid="query_page_limit"></include>
    </select>

    <select id="getDangerCountByCondition" resultType="int"
        parameterType="hashmap">
        SELECT count(dangerId) FROM `danger`.`danger`
        <where>
            <include refid="query_danger_where"></include>
        </where>
    </select>

</mapper>

2.service使用

实现类上声明service层,内部注入mapper。接口声明service也可以@service("queryService")   相当于给service起个名字,注入可以用autowired,也可以用resource

3.action层使用(声明action,注入service对象,action要是多例)

时间: 2024-11-07 16:49:19

Spring3.2+Struts2.3+Mybatis3.2整合使用(注解使用)的相关文章

struts2.3+spring3.2+mybatis3.2整合及示例代码

原文:struts2.3+spring3.2+mybatis3.2整合及示例代码 源代码下载地址:http://www.zuidaima.com/share/1550463649778688.htm struts2.3+spring3.2+mybatis3.2整合及示例代码 lib包没放里面 lib包下载地址 https://code.google.com/p/searchengineone/downloads/list  源码截图:

开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3

一:项目下载地址(点击 Source code(zip)) https://github.com/fzxblgong/frame_2014-12-15/releases 版本:v1.2大小:20M 二:ssm(mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3) version v1.3 功能 新增:+8.框架在支持mybatis-3.2.8基础上又整合进hibernate4,并支持注释.+9.使用注释ssh方式实现JqueryMiniUi多选树.实例

Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合

java教程|Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合教程并测试成功一.创建项目二.搭建struts-2.3.4.11.struts2必须的Jar包(放到WEB-INF/... Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合教程并测试成功 一. 创建项目 二. 搭建struts-2.3.4.1 1.struts2必须的Jar包(放到WEB-INF/lib目录下): 2.配置struts2.3的过滤器 web.xml

[SSH] Eclipse+Struts2+Hibernate4+Spring4的整合

在前面Struts2和Hibernate4的整合基础上,对Spring4进行整合,网上参考的大概都是Spring4+Hibernate3或者基于MyEclispe的,这里把自己研究后的配置和大家分享一下. 本次相关的版本如下: Spring : spring-framework-4.0.1.RELEASE 1.将相关的jar包导入: 1.1libs目录下包含所有的jar包(不需要复制结尾为sources和javadoc的jar包)到SSHProject项目的lib目录 1.2 Hibernate

struts2+hibernate-jpa+Spring+maven 整合(2)

之前的一篇已经讲到了 spring 与struts2 的整合, 其实对于struts2+hibernate-jpa+Spring 之间的整合的文章已经相当多了, 也相当成熟了,只要不是各自的版本不兼容之外,其他的几乎没啥问题, 不行mybatis那样是不是的冒点让人头疼的事情来 下面修改pom.xml ,把hibernate 的jar 关联进来; <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="

spring+hibernate+Struts2 整合(全注解及注意事项)

最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar包如下 3.首先是spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

【Struts2】如何实现Struts2与Spring的整合 外加 MyBatis 框架

1,简介 一般没有人会用Spring+Struts2+MyBatis这样的框架了,可不能简称为SSM.因为SSM是Spring+SpringMVC+Mybatis的简称.SSH是Spring+Struts2+Hibernate,不过现在SSH用的人也不多了.这里笔者把Sping+Struts2+Mybatis放在一起就是纯粹的实现一下功能.主要讨论的还是Struts2和Spring. 如果不使用Spring框架,Struts2框架内部还是有机制可以利用反射创建对象,之所以要把Spring+Str

struts2+hibernate-jpa+Spring+maven 整合(1)

1.0.0 struts2 与 spring 的整合. 1.1.0 新建maven工程 , 编写pom.xml ,这里只需要简单的添加 一个组件就够了: 在myeclipse 生成的pom.xml 添加如下代码: <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.16

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)

前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及MyBatis的一些简单介绍. 本文不会对MyBatis作详细说明,大象还是假定阅读本文的朋友对MyBatis(ibatis)有最基本的了解,只有这样才能较好的理解本文的内容.关于MyBatis请查看它的官方文档及其它参考资料,本文不作详细讨论. 一.工程结构图      上面这是典型的Maven项目