一、首先搭建Spring框架
1.引入Spring相应的jar包以及一些common包。并添加log4j.properties及log4j.jar。
2.创建jdbc.properties文件及dataSource.xml(关于数据库的配置也可以整合到applicationContext.xml中)
jdbc.properties
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
reg.jdbc.acquireIncrement=2
reg.jdbc.driverClass=com.mysql.jdbc.Driver
reg.jdbc.initialPoolSize=1
reg.jdbc.maxIdleTime=1800
reg.jdbc.maxPoolSize=20
reg.jdbc.minPoolSize=1
reg.jdbc.password=root
reg.jdbc.url=jdbc\:mysql\://localhost\:3306/ksc
reg.jdbc.user=root
dataSource.xml(使用c3p0配置数据源,需要引入c3p0.jar)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <!--加载数据库信息-->
<property name="locations">
<list>
<value>classpath:/spring/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${reg.jdbc.driverClass}"/>
<property name="jdbcUrl" value="${reg.jdbc.url}"/>
<property name="user" value="${reg.jdbc.user}"/>
<property name="password" value="${reg.jdbc.password}"/>
<property name="acquireIncrement" value="${reg.jdbc.acquireIncrement}"/>
<property name="initialPoolSize" value="${reg.jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${reg.jdbc.maxIdleTime}"/>
<property name="maxPoolSize" value="${reg.jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${reg.jdbc.minPoolSize}"/>
<property name="acquireRetryDelay" value="1000"></property>
<property name="acquireRetryAttempts" value="60"></property>
<property name="breakAfterAcquireFailure" value="false"></property>
</bean>
</beans>
3.创建Spring配置文件applicationContext.xml。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com"/>
<import resource="dataSource.xml"/> <!--引进上面配置好的数据库配置信息-->
</beans>
4.在web.xml添加Spring监听器及配置文件的位置,以及log4j配置。
<!-- log4j配置 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath*:log4j.xml</param-value>
</context-param>
<!--Spring配置 默认Spring配置文件位置在WEB-INF/-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
二、在Spring框架的基础上,搭建SpringMVC框架
1.引入跟SpringMVC有关的jar包。
spring-webmvc-3.2.0.RELEASE.jar
spring-webmvc-portlet-3.2.0.RELEASE.jar
2.在web.xml中添加SpringMVC配置信息
<!-- Spring MVC配置 默认SpringMVC配置文件位置在WEB-INF/,并且文件名默认命名规则为(servlet-name)-servlet.xml -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/springmvc/springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.创建springmvc-servlet.xml配置文件(下面SpringMVC使用Annotation方式)
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.controller"/>
<!-- 页面解析,主要解析控制类传入的ModelAndView,即模型数据和视图名 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
三、在Spring、SpringMVC框架基础上,搭建mybatis框架
1.引入mybatis相关的jar
mybatis-3.2.7.jar
mybatis-spring-1.1.1.jar
mysql-connector-java-5.0.8-bin.jar
2.创建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>
</configuration>
3.建立Spring与mybatis的关联,创建mybatis操作数据库需要的sqlSessionFactory对象。
将关联性添加到applicationContext.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:/mybatis/SqlMapConfig.xml"></property>
</bean>
四、上面的步骤基本上完成了框架的搭建与整合。下面是在这框架的基础上添加查询学生的功能。
1.创建mybatis接口及mapper来操作数据库
IStudentDAO.java
@Component("studentDAO")
public interface IStudentDAO {
public Student selectStudentById(int stuId);
public List<Student> selectAll();
public List<Student> selectStudentByCondition(Student student);
public void insertStudent(Student student);
public void updateStudent(Student student);
}
IStudentDAO.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">
<mapper namespace="com.dao.IStudentDAO"> <!--namespace必须是接口的package+类名,才能将mapper与接口绑定-->
<resultMap type="Student" id="studentMap">
<result property="stuId" column="stuId"/>
<result property="stuName" column="stuName"/>
<association property="classes" javaType="Classes">
<result property="classesId" column="classesId"/>
<result property="className" column="className"/>
</association>
</resultMap>
<resultMap type="Student" id="studentMap2">
<result property="stuId" column="stuId"/>
<result property="stuName" column="stuName"/>
<association property="classes" select="selectClassesById" column="classesId"></association>
</resultMap>
<sql id="selectSQL">
select s.*,c.* from student s,classes c where s.classesId = c.classesId
</sql>
<select id="selectClassesById" parameterType="int" resultType="Classes">
select * from classes where classesId = #{classesId}
</select>
<select id="selectStudentById" parameterType="int" resultMap="studentMap2">
select * from student where stuId = #{stuId}
</select>
<select id="selectAll" resultMap="studentMap">
<include refid="selectSQL"/>
</select>
<select id="selectStudentByCondition" parameterType="Student" resultMap="studentMap">
<include refid="selectSQL"/>
<where>
<if test="stuId != null">
and stuId = #{stuId}
</if>
<if test="stuName != null">
and stuName like #{stuName}
</if>
</where>
</select>
<insert id="insertStudent" parameterType="Student">
insert into student(stuName,classesId) values (#{stuName},#{classes.classesId})
</insert>
<update id="updateStudent" parameterType="Student">
update student set stuName = #{stuName} where stuId = #{stuId}
</update>
</mapper>
2.将操作数据库的IStudentDAO.xml文件添加到mybatis配置文件中,并设置为实体类设置别名
<configuration>
<!-- typeAliases为model设置别名 -->
<typeAliases>
<typeAlias alias="Student" type="com.model.Student" />
<typeAlias alias="Classes" type="com.model.Classes" />
</typeAliases>
<!-- 添加映射文件,主要是映射SQL语句到数据库表 -->
<mappers>
<mapper resource="com/dao/IStudentDAO.xml"/>
</mappers>
</configuration>
3.创建IStudentDAO.java的实例,并交给Spring进行管理。(自动创建,只需在applicationContext.xml中配置)
第一种方法:
<!--单个bean注册 -->
<bean id="studentDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.dao.IStudentDAO"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
第二种方法:(默认bean为首字母小写,也可以通过@Component("studentDAO")在接口中设置bean的id)
<!--整个package包进行扫描注册 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao" />
</bean>
4.创建Controller类,(这里通过Annotion来配置web访问url)
MainController.java
@Controller
public class MainController {
private IStudentDAO studentDAO;
public IStudentDAO getStudentDAO() {
return studentDAO;
}
@Resource //通过@Resource来获取第3步骤注册的bean
public void setStudentDAO(IStudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
@RequestMapping(value="/main",method=RequestMethod.GET)
public ModelAndView main(){
ModelAndView mv = new ModelAndView();
mv.setViewName("main");
mv.addObject("message", "main test");
System.out.println("========"+studentDAO.selectAll().size());
return mv;
}
}
5.创建main.jsp
内容:test main
五、事务管理(经测试在Controller类上通过XML配置事务没有效果,但是使用Annotation注解可以。下面例子是在Service层添加事务)
1.XML配置事务(在applicatinoContext.xml中添加)
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<aop:pointcut expression="execution(* com.service..*.*(..))"/> <!--这里是过滤需要添加事务的类及其方法 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="mainController"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception"/>
<tx:method name="select*" read-only="true"/>
</tx:attributes>
</tx:advice>
2.Annotation注解添加事务
<!-- 基于注释的事务,当注释中发现@Transactional时,使用id为“transactionManager”的事务管理器 -->
<!-- 如果没有设置transaction-manager的值,则spring以缺省默认的事务管理器来处理事务,默认事务管理器为第一个加载的事务管理器 -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
StudentServiceImpl.java //代码需要添加@Transactional来表示事务
@Component("studentService")
public class StudentServiceImpl implements StudentService{
private IStudentDAO studentDAO;
private IClassesDAO classesDAO;
public IStudentDAO getStudentDAO() {
return studentDAO;
}
@Resource
public void setStudentDAO(IStudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
public IClassesDAO getClassesDAO() {
return classesDAO;
}
@Resource
public void setClassesDAO(IClassesDAO classesDAO) {
this.classesDAO = classesDAO;
}
@Transactional(rollbackFor=Exception.class)
public void insert() {
Classes classes = new Classes();
classes.setClassName("B1111");
classesDAO.insertClasses(classes);
Student student = new Student();
Classes classes2 = new Classes();
student.setClasses(classes2);
student.setStuName("vvvv");
studentDAO.insertStudent(student);
System.out.println("classes====="+classesDAO.selectAll().size());
System.out.println("student====="+studentDAO.selectAll().size());
}
@Transactional(readOnly=true)
public void selectAll(){
}
}
1.引入Spring相应的jar包以及一些common包。并添加log4j.properties及log4j.jar。
2.创建jdbc.properties文件及dataSource.xml(关于数据库的配置也可以整合到applicationContext.xml中)
jdbc.properties
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
reg.jdbc.acquireIncrement=2
reg.jdbc.driverClass=com.mysql.jdbc.Driver
reg.jdbc.initialPoolSize=1
reg.jdbc.maxIdleTime=1800
reg.jdbc.maxPoolSize=20
reg.jdbc.minPoolSize=1
reg.jdbc.password=root
reg.jdbc.url=jdbc\:mysql\://localhost\:3306/ksc
reg.jdbc.user=root
dataSource.xml(使用c3p0配置数据源,需要引入c3p0.jar)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <!--加载数据库信息-->
<property name="locations">
<list>
<value>classpath:/spring/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${reg.jdbc.driverClass}"/>
<property name="jdbcUrl" value="${reg.jdbc.url}"/>
<property name="user" value="${reg.jdbc.user}"/>
<property name="password" value="${reg.jdbc.password}"/>
<property name="acquireIncrement" value="${reg.jdbc.acquireIncrement}"/>
<property name="initialPoolSize" value="${reg.jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${reg.jdbc.maxIdleTime}"/>
<property name="maxPoolSize" value="${reg.jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${reg.jdbc.minPoolSize}"/>
<property name="acquireRetryDelay" value="1000"></property>
<property name="acquireRetryAttempts" value="60"></property>
<property name="breakAfterAcquireFailure" value="false"></property>
</bean>
</beans>
3.创建Spring配置文件applicationContext.xml。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com"/>
<import resource="dataSource.xml"/> <!--引进上面配置好的数据库配置信息-->
</beans>
4.在web.xml添加Spring监听器及配置文件的位置,以及log4j配置。
<!-- log4j配置 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath*:log4j.xml</param-value>
</context-param>
<!--Spring配置 默认Spring配置文件位置在WEB-INF/-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
二、在Spring框架的基础上,搭建SpringMVC框架
1.引入跟SpringMVC有关的jar包。
spring-webmvc-3.2.0.RELEASE.jar
spring-webmvc-portlet-3.2.0.RELEASE.jar
2.在web.xml中添加SpringMVC配置信息
<!-- Spring MVC配置 默认SpringMVC配置文件位置在WEB-INF/,并且文件名默认命名规则为(servlet-name)-servlet.xml -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/springmvc/springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.创建springmvc-servlet.xml配置文件(下面SpringMVC使用Annotation方式)
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.controller"/>
<!-- 页面解析,主要解析控制类传入的ModelAndView,即模型数据和视图名 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
三、在Spring、SpringMVC框架基础上,搭建mybatis框架
1.引入mybatis相关的jar
mybatis-3.2.7.jar
mybatis-spring-1.1.1.jar
mysql-connector-java-5.0.8-bin.jar
2.创建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>
</configuration>
3.建立Spring与mybatis的关联,创建mybatis操作数据库需要的sqlSessionFactory对象。
将关联性添加到applicationContext.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:/mybatis/SqlMapConfig.xml"></property>
</bean>
四、上面的步骤基本上完成了框架的搭建与整合。下面是在这框架的基础上添加查询学生的功能。
1.创建mybatis接口及mapper来操作数据库
IStudentDAO.java
@Component("studentDAO")
public interface IStudentDAO {
public Student selectStudentById(int stuId);
public List<Student> selectAll();
public List<Student> selectStudentByCondition(Student student);
public void insertStudent(Student student);
public void updateStudent(Student student);
}
IStudentDAO.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">
<mapper namespace="com.dao.IStudentDAO"> <!--namespace必须是接口的package+类名,才能将mapper与接口绑定-->
<resultMap type="Student" id="studentMap">
<result property="stuId" column="stuId"/>
<result property="stuName" column="stuName"/>
<association property="classes" javaType="Classes">
<result property="classesId" column="classesId"/>
<result property="className" column="className"/>
</association>
</resultMap>
<resultMap type="Student" id="studentMap2">
<result property="stuId" column="stuId"/>
<result property="stuName" column="stuName"/>
<association property="classes" select="selectClassesById" column="classesId"></association>
</resultMap>
<sql id="selectSQL">
select s.*,c.* from student s,classes c where s.classesId = c.classesId
</sql>
<select id="selectClassesById" parameterType="int" resultType="Classes">
select * from classes where classesId = #{classesId}
</select>
<select id="selectStudentById" parameterType="int" resultMap="studentMap2">
select * from student where stuId = #{stuId}
</select>
<select id="selectAll" resultMap="studentMap">
<include refid="selectSQL"/>
</select>
<select id="selectStudentByCondition" parameterType="Student" resultMap="studentMap">
<include refid="selectSQL"/>
<where>
<if test="stuId != null">
and stuId = #{stuId}
</if>
<if test="stuName != null">
and stuName like #{stuName}
</if>
</where>
</select>
<insert id="insertStudent" parameterType="Student">
insert into student(stuName,classesId) values (#{stuName},#{classes.classesId})
</insert>
<update id="updateStudent" parameterType="Student">
update student set stuName = #{stuName} where stuId = #{stuId}
</update>
</mapper>
2.将操作数据库的IStudentDAO.xml文件添加到mybatis配置文件中,并设置为实体类设置别名
<configuration>
<!-- typeAliases为model设置别名 -->
<typeAliases>
<typeAlias alias="Student" type="com.model.Student" />
<typeAlias alias="Classes" type="com.model.Classes" />
</typeAliases>
<!-- 添加映射文件,主要是映射SQL语句到数据库表 -->
<mappers>
<mapper resource="com/dao/IStudentDAO.xml"/>
</mappers>
</configuration>
3.创建IStudentDAO.java的实例,并交给Spring进行管理。(自动创建,只需在applicationContext.xml中配置)
第一种方法:
<!--单个bean注册 -->
<bean id="studentDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.dao.IStudentDAO"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
第二种方法:(默认bean为首字母小写,也可以通过@Component("studentDAO")在接口中设置bean的id)
<!--整个package包进行扫描注册 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao" />
</bean>
4.创建Controller类,(这里通过Annotion来配置web访问url)
MainController.java
@Controller
public class MainController {
private IStudentDAO studentDAO;
public IStudentDAO getStudentDAO() {
return studentDAO;
}
@Resource //通过@Resource来获取第3步骤注册的bean
public void setStudentDAO(IStudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
@RequestMapping(value="/main",method=RequestMethod.GET)
public ModelAndView main(){
ModelAndView mv = new ModelAndView();
mv.setViewName("main");
mv.addObject("message", "main test");
System.out.println("========"+studentDAO.selectAll().size());
return mv;
}
}
5.创建main.jsp
内容:test main
五、事务管理(经测试在Controller类上通过XML配置事务没有效果,但是使用Annotation注解可以。下面例子是在Service层添加事务)
1.XML配置事务(在applicatinoContext.xml中添加)
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<aop:pointcut expression="execution(* com.service..*.*(..))"/> <!--这里是过滤需要添加事务的类及其方法 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="mainController"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception"/>
<tx:method name="select*" read-only="true"/>
</tx:attributes>
</tx:advice>
2.Annotation注解添加事务
<!-- 基于注释的事务,当注释中发现@Transactional时,使用id为“transactionManager”的事务管理器 -->
<!-- 如果没有设置transaction-manager的值,则spring以缺省默认的事务管理器来处理事务,默认事务管理器为第一个加载的事务管理器 -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
StudentServiceImpl.java //代码需要添加@Transactional来表示事务
@Component("studentService")
public class StudentServiceImpl implements StudentService{
private IStudentDAO studentDAO;
private IClassesDAO classesDAO;
public IStudentDAO getStudentDAO() {
return studentDAO;
}
@Resource
public void setStudentDAO(IStudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
public IClassesDAO getClassesDAO() {
return classesDAO;
}
@Resource
public void setClassesDAO(IClassesDAO classesDAO) {
this.classesDAO = classesDAO;
}
@Transactional(rollbackFor=Exception.class)
public void insert() {
Classes classes = new Classes();
classes.setClassName("B1111");
classesDAO.insertClasses(classes);
Student student = new Student();
Classes classes2 = new Classes();
student.setClasses(classes2);
student.setStuName("vvvv");
studentDAO.insertStudent(student);
System.out.println("classes====="+classesDAO.selectAll().size());
System.out.println("student====="+studentDAO.selectAll().size());
}
@Transactional(readOnly=true)
public void selectAll(){
}
}