1.导包:
2搭建包:
3.mybatis.cfg.xml:
<configuration>
<!-- 交给spring配置数据源-->
<!-- <environments default="oracle">
<environment id="oracle">
<transactionManager type="jdbc"></transactionManager>
<dataSource type="pooled">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
<property name="username" value="zhubin"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments> -->
<!--配置映射具体文件 -->
<mappers>
<mapper resource="entity/empMap.xml"/>
</mappers>
</configuration>
4.spring.xml
<!-- 配置数据源 -->
<bean id="comboPooledDataSourceID" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
<property name="user" value="zhubin"/>
<property name="password" value="123"/>
</bean>
<!-- 配置 工厂类,及加载mybatis配置文件,替代工厂的作用-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
<property name="dataSource" ref="comboPooledDataSourceID"/>
</bean>
<!--配置事务管理器 -->
<bean id="dataSourceTransactionManagerID" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- mybatis事务有jdbc管理,配置事务管理器应该由数据源管理,而不是像hibernate交由它的工厂管理-->
<property name="dataSource" ref="comboPooledDataSourceID"/>
</bean>
<!-- 配置事务通知 指定哪些方法需要事务-->
<tx:advice id="tx" transaction-manager="dataSourceTransactionManagerID">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置事务切面 指定哪些方法(一般是service中的方法) -->
<aop:config>
<aop:pointcut expression="execution(* Dao.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="tx" pointcut-ref="pointcut"/>
</aop:config>
<bean id="empDaoID" class="Dao.EmpDao">
<property name="sqlsesionfactory" ref="sqlSessionFactoryBean"/>
</bean>
<bean id="empService" class="service.EmpService">
<property name="empDao" ref="empDaoID"/>
</bean>
<!-- 扫描识别注解 -->
<context:component-scan base-package="action"></context:component-scan>
<!-- 识别注解在empaction中的引入的参数 @Resource(name="empService") -->
<context:annotation-config/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
5.dao层(mapper):
private SqlSessionFactory sqlsesionfactory;
public void setSqlsesionfactory(SqlSessionFactory sqlsesionfactory) {
this.sqlsesionfactory = sqlsesionfactory;
}
public void add(Emp emp){
SqlSession sqlSession = sqlsesionfactory.openSession();
sqlSession.insert("empnamespace.addemp", emp);
//int i=1/0;
sqlSession.close();
}
6.control:
@Controller
@RequestMapping(value="/emp")
public class EmpAction {
private EmpService empService;
@Resource(name="empService")
public void setEmpservice(EmpService empService) {
this.empService = empService;
}
@RequestMapping(value="/register")
public String empRegister(Emp emp,Model model)throws Exception{
empService.registerMethod(emp);
model.addAttribute("message", "messsage");
return "success";
}
}
7.总结:比较复杂的spring.xml配置,理清楚 各层之间的bean引用。