步骤:1.导入包 2.配置web.xml 3.spring配置文件 4.spring mvc配置文件 5.mybatis配置文件(也可以不设置,和spring整合在一起)
web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<display-name>springandmybatis</display-name>
<!-- spring begin -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value><!--spring 配置文件名称application.xml-->
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring end -->
<!-- spring mvc begin -->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- spring mvc end -->
说明:Spring提供ServletContentListener的一个实现类ContextLoaderListener监听器,该类可以作为Listener使用,在启动Tomcat容器的时候,该类的作用就是自动装载ApplicationContext(为上文中的application)的配置信息
spring配置文件(这里使用命名application.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: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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- read properties -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<!-- read properties end -->
<!-- dataSource setting -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--dataSource setting end -->
<!-- factory setting -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- factory setting end -->
<!-- 配置声明事务begin -->
<!-- 事务管理器tmange -->
<bean id="tManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="tadivice" transaction-manager="tManager">
<tx:attributes>
<tx:method name="save" propagation="REQUIRED"/>
<tx:method name="get" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置声明事务end -->
<aop:config >
<aop:pointcut expression="execution(* com.czy.serviceimp.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="tadivice" pointcut-ref="pointcut"/>
</aop:config>
<context:component-scan base-package="com.czy"/><!--扫描注解-->
<!-- settings end -->
</beans>
spring mvc配置文件(mvc.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:p="http://www.springframework.org/schema/p"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- json begin -->
<bean id="stringConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringConverter" />
<ref bean="jsonConverter" />
</list>
</property>
</bean>
<!-- json end -->
<!-- spring容器扫描指定包下的所有类,如果类上有注解 那么根据注解产生相应bean对象已经映射信息 -->
<context:component-scan base-package="com.czy.controller"/>
<!-- interceptor begin -->
</beans>
mybatis配置文件(mybatis-config.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>
<typeAliases>
<package name="com.czy.bean"/>
</typeAliases>
<mappers>
<mapper resource="com/czy/mappers/StudentMapper.xml"/>
<!-- <package name="com.czy.bean"/>-->
</mappers>
</configuration>
StudentMapper.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.czy.mappers.StudentMapper">
<select id="list" resultType="Student">
select *from student
</select>
</mapper>
spring mvc中的controller类:
package com.czy.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import com.czy.bean.Student;
import com.czy.service.BaseService;
import com.czy.serviceimp.UserServiceImp;
import com.sun.org.apache.bcel.internal.generic.NEW;
@Controller("firstController")
@Scope("prototype")
public class FirstController {
@Autowired
private UserServiceImp userService;
@RequestMapping("/show.do")
public String showinfo(ModelMap mm){
System.out.println("i am pre");
List<Student> list=userService.list();
System.out.println(list.size()+"size");
mm.addAttribute("list",list);
return "index.jsp";
}
public UserServiceImp getUserService() {
return userService;
}
public void setUserService(UserServiceImp userService) {
this.userService = userService;
}
}
UserDaoImp:
package com.czy.daoimp;
import java.util.List;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.czy.bean.Student;
import com.czy.dao.UserDao;
@Repository("userDao")
public class UserDaoImp extends SqlSessionDaoSupport implements UserDao{
@Autowired
@Override
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
// TODO Auto-generated method stub
super.setSqlSessionFactory(sqlSessionFactory);
}
@Override
public List<Student> list() {
// TODO Auto-generated method stub
return getSqlSession().selectList("com.czy.mappers.StudentMapper.list");
}
}
UserServoceImp
package com.czy.serviceimp;
import java.util.List;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import com.czy.bean.Student;
import com.czy.dao.UserDao;
import com.czy.service.BaseService;
import sun.reflect.generics.tree.BaseType;
@Service("userService")
public class UserServiceImp extends SqlSessionDaoSupport implements BaseService{
@Autowired
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public UserServiceImp() {
System.out.println("new userservice ok");
// TODO Auto-generated constructor stub
}
@Autowired//自动装配,从application.xml中
@Override
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
// TODO Auto-generated method stub
System.out.println("i am sqlsesion");
super.setSqlSessionFactory(sqlSessionFactory);
}
@Override
public List<Student> list() {
// TODO Auto-generated method stub
return userDao.list();
}
}
这个案例的思路其实很简单,客户通过客户端发起请求,请求交由分发器处理,寻找处理器,处理方法中通过dao层来操作数据库,查询出所有学生信息,service层来调用dao层来实现功能,将信息存入数据域中,在调用视图层来实现信息;
注意的问题: spring mvc 使用@Controller注解与struts2中的Action不同,Controller默认为单例模式,如果在单例模式中设置了全局变量,那么就需要将controller设置成原型模式(prototype),当然,应该尽量避免使用全局变量,特别是当中的全局变量使用注入,必须使用原型,否则将会报错,注入失败;
项目图: