由于学完mybatis和spring的大概内容之后,想对知识做一个大概的总结以及一些拓展,提供一个较为常见的模型,故写了这篇博客,利用一个javaweb项目(使用maven)与其结合,这里主要提供配置文件的内容以及基础的文件结构,而不提供具体代码
梗概
实现一个简单的条目查询的功能,布局在一个jsp页面上
pom.xml
<dependencies>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.bundles</groupId>
<artifactId>jstl</artifactId>
<version>1.2_1</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>cn.easyproject</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
前端结构
只有一个item_list.jsp界面用于显示信息
后端结构
主要类:
ItemInfo——数据库映射类
ItemController——数据查询处理类(返回数据给jsp)
ItemMapper——与ItemMapper.xml映射文件相关联
ItemService及其实现类——业务处理类
配置文件:
ItemMapper.xml——mybatis映射文件
SpringConfig.xml——Spring配置文件
文件内容
SpringConfig.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 开启组件扫描-->
<context:component-scan base-package="com.wfh"/>
这里连接池使用的是c3p0
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置数据库连接池-->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
启用了默认的事务核心管理器类
<!-- 事务核心管理器-->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven/>
配置SQLSessionFactoryBean来代替之前mybatis中的SQLSessionFactoryBuilder和SQLSessionFactory类,内配置数据库映射类的别名设置、数据库连接池对象以及mybatis映射文件位置(注意放在resources下的文件路径需要加classpath),相当于原先我们mybatis配置文件的作用,这样我们就可以不用写sqlMapperConfig.xml文件了
<!-- 配置SqlSessionFactoryBean-->
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.wfh.bean"/>
<property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean>
而上面这个bean我们自己不会拿来用而是拿来做MapperScannerConfigurer的参数引用,其中basePackage参数用于配置Mapper.xml对应的Mapper接口所在的包路径,然后spring会为这些接口配置bean,自动用xml文件中的sql语句来实例化接口方法;
<!-- 配置Mapper扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wfh.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
ItemServiceImpl:
@Service
public class ItemServiceImpl implements ItemService{
@Autowired
private ItemMapper itemMapper;
public List<ItemInfo> selectAllItem() {
return itemMapper.selectAllItem();
}
public ItemInfo selectById(String id){
return itemMapper.selectById(id);
}
public void deleteById(String id) {
itemMapper.deleteById(id);
}
}