SSM框架(多模块)——Spring+Mybatis

3 篇文章 0 订阅
2 篇文章 0 订阅

项目结构

模块层级关系

- app
    |- app-base
        |- app-base-common
        |- app-base-domain
        |- app-base-dao
        |- app-base-service
    |- app-management
        |- app-management-service
        |- app-management-web

模块的继承关系

app-base-common
            |
    app-base-domain
                |
        app-base-dao
                    |
            app-base-service
                        |   
                app-management-service
                                |   
                    app-management-web

多模块maven项目搭建可参考:
http://blog.csdn.net/qq_232911373/article/details/51381060

使用Maven引入需要的Jar包

app-base-common中引入

    <!--单元测试 start -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <!-- 表示开发的时候引入,发布的时候不会加载此包 -->
        <scope>test</scope>
    </dependency>

app-base-dao中引入

    <!-- mybatis start -->
    <!-- http://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.2.8</version>
    </dependency>
    <!-- mybatis end -->

    <!-- mybatis/spring start -->
    <!-- http://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.2</version>
    </dependency>
    <!-- mybatis/spring end -->

    <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency> 

    <!-- http://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

    <!-- dbcp 数据库连接池 -->
    <!-- http://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

app-base-service中引入

    <!-- log start -->
    <!-- http://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <!-- log end -->  

因为各模块的依赖关系,在首次使用的模块里引入Jar包即可,具体情况可根据实际情况而定。

Spring与MyBatis的整合

准备好数据库和测试数据,如图

这里写图片描述

使用mybatis-generator-core自动生成代码

详细步骤可参考:
http://blog.csdn.net/qq_232911373/article/details/51507900

文件清单

  • AdultVideoStar(app-base-domain)
    private Integer id;
    //中文名
    private String chinesename;
    //英文名
    private String englishname;
    //出生日期
    private Date birthday;
    //身高
    private Integer height;
    //三围
    private String measurements;
    //罩杯
    private String cup;
    //马赛克
    private String mosaic;

    ...
  • IAdultVideoStarDao (app-base-dao)
public interface IAdultVideoStarDao {
    int deleteByPrimaryKey(Integer id);

    int insert(AdultVideoStar record);

    int insertSelective(AdultVideoStar record);

    AdultVideoStar selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(AdultVideoStar record);

    int updateByPrimaryKey(AdultVideoStar record);
}
  • AdultVideoStarMapper.xml (app-base-dao)
<mapper namespace="org.app.base.dao.IAdultVideoStarDao" >
  <resultMap id="BaseResultMap" type="org.app.base.domain.AdultVideoStar" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="chineseName" property="chinesename" jdbcType="VARCHAR" />
    <result column="englishName" property="englishname" jdbcType="VARCHAR" />
    <result column="birthday" property="birthday" jdbcType="TIMESTAMP" />
    <result column="height" property="height" jdbcType="INTEGER" />
    <result column="measurements" property="measurements" jdbcType="VARCHAR" />
    <result column="cup" property="cup" jdbcType="VARCHAR" />
    <result column="mosaic" property="mosaic" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, chineseName, englishName, birthday, height, measurements, cup, mosaic
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from adult_video_star
    where id = #{id,jdbcType=INTEGER}
  </select>
  ...
  1. AdultVideoStarMapper.xml的(mapper)标签的namespace必须是IAdultVideoStarDao接口的全类名,既(mapper namespace=”org.app.base.dao.IAdultVideoStarDao” )
  2. AdultVideoStarMapper.xml的定义操作数据库的(select、delete、update、insert)这些标签的id属性的值必须和IAdultVideoStarDao接口定义的方法名一致且一一对应。

配置文件

  • jdbc.properties (数据库属性文件)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/app
username=root
password=xxxxxxxxx
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
...
  • spring-config-mybatis.xml (主要spring+mybatis整合)
 <!--spring自动扫描-->
    <context:component-scan base-package="org.app"/>
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <!-- dbcp数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.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="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>

   <!--      spring和MyBatis整合 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- <property name="mapperLocations" value="classpath:mapping/*.xml" /> -->
        <property name="configLocation" value="classpath:mybatis-config-sqlmap.xml"></property>
    </bean> 

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

<!-- 采用数据映射器(MapperFactoryBean)的方式,无需DAO实现类 -->
    <bean id="avStarDao" class="org.mybatis.spring.mapper.MapperFactoryBean">  
        <property name="mapperInterface" value="org.app.base.dao.IAdultVideoStarDao"></property>  
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
    </bean>

bean的id(avStarDao) 需与实例名称一致

  • mybatis-config-sqlmap.xml (管理sqlmap)
<configuration>
    <settings>
        <!-- 全局映射器启用缓存 -->
        <setting name="cacheEnabled" value="true" />
        <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!-- 允许使用列标签代替列名 -->
        <setting name="useColumnLabel" value="true" />
        <!-- 数据库超过25000秒仍未响应则超时 -->
        <setting name="defaultStatementTimeout" value="25000" />
    </settings>

    <!-- 映射文件路径 -->
    <mappers>
        <mapper resource="mapping/AdultVideoStarMapper.xml" /> 
    </mappers> 
</configuration>

单元测试

在app-base-service中的test/java里建立测试类

这里写图片描述

文件清单

  • TestMyBatis
/**
 * TestMyBatis
 * This class is used for ...   
 * @author Bdong  
 * @version   
 *       1.0, 2016年5月26日 下午5:52:24
 */
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class TestMyBatis {
    private static Logger logger = Logger.getLogger("TestMyBatis");
    private ApplicationContext ac = null;
    @Autowired
    private IAdultVideoStarService avStarService;

    @Before
    public void before() {
        ac = new ClassPathXmlApplicationContext("spring-config-mybatis.xml");
        avStarService = (IAdultVideoStarService) ac.getBean("avStarService");
    }

    @Test
    public void test() {
        AdultVideoStar avStar = avStarService.selectByPrimaryKey(1);
        logger.info("ChineseName:" + avStar.getChinesename());
        logger.info("EnglishName:" + avStar.getEnglishname());
        logger.info("Birthday:" + avStar.getBirthday());
        logger.info("Height:" + avStar.getHeight());
        logger.info("Measurements:" + avStar.getMeasurements());
        logger.info("Cup:" + avStar.getCup());
        logger.info("Mosaic:" + avStar.getMosaic());
    }
}
  • IAdultVideoStarService
public interface IAdultVideoStarService {
    public AdultVideoStar selectByPrimaryKey(Integer id);
}
  • IAdultVideoServiceImpl
@Service("avStarService")
public class IAdultVideoServiceImpl implements IAdultVideoStarService {
    @Autowired    
    private IAdultVideoStarDao avStarDao;
    @Override
    public AdultVideoStar selectByPrimaryKey(Integer id) {
        // TODO Auto-generated method stub
        return avStarDao.selectByPrimaryKey(id);
    }
}

运行结果

这里写图片描述

源代码github链接:
https://github.com/baidong0228/Study/tree/master/app
祝大家工作顺利

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值