项目结构
模块层级关系
- 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>
...
- AdultVideoStarMapper.xml的(mapper)标签的namespace必须是IAdultVideoStarDao接口的全类名,既(mapper namespace=”org.app.base.dao.IAdultVideoStarDao” )
- 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
祝大家工作顺利