可以了解,但没啥用了,直接学springboot吧
XML配置方式:
优:容易编辑,配置比较集中,方便修改,在大业务量的系统里面,通过xml配置会方便后人理解整个系统的架构,修改之后直接重启应用即可
缺:比较繁琐,配置形态丑陋, 配置文件过多的时候难以管理
注解方式:
优:方便,简洁,配置信息和 Java 代码放在一起,有助于增强程序的内聚性。
缺:分散到各个class文件中,所以不宜维护, 修改之后你需要重新打包,发布,重启应用。
小项目,参与人数不多不复杂的, 用注解开发快速。
复杂项目,多人交互,配置量大维护复杂度高的,用配置文件。
Spring+Spring MVC + Mybatis
Spring MVC:负责分发请求,处理数据,返回视图
Spring:IOC容器,可以装载bean(也就是我们Java中的类,当然也包括service dao里面的)
Mybatis:围绕sqlSessionFactory实例展开。通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
项目目录:
src
| ——com.bean
| ——USER.java 【实体类】
| ——com.dao
| ——userDAO.java 【CRUD接口】 实现dao接口不用编写daoImpl, mybatis会给我们动态实现
| ——userDAO.xml 【配置CRUD实现】 只需要在xml中编写相应的mapper
| ——com.servise
| ——Service.java 【Service接口】
| ——ServiceImpl.java 【Service实现】
| ——com.controller
| ——Controller.java 【控制器】
| ——applicationContext.xml 【Mybatis配置】
| ——springMVC.xml 【springMVC配置】
WEB-INF
| ——web.xml
| ——jsp
| ——listUser.jsp
运行步骤:
1. 首先浏览器上访问路径 /listUser
2. tomcat根据web.xml上的配置信息,拦截到了/listUser,并将其交由DispatcherServlet处理。
3. DispatcherServlet 根据springMVC.xml的配置,将这次请求交由Controller类进行处理,所以需要进行这个类的实例化
4. 在实例化Controller的时候,注入ServiceImpl
5. 在实例化ServiceImpl的时候,又注入DAO
6. 根据ApplicationContext.xml中的配置信息,将DAO和DAO.xml关联起来了。
7. 这样拿到了实例化好了的Controller,并调用listUser()方法
8. 在listUser方法中,访问Service,并获取数据,并把数据放在"user"上,接着服务端跳转到springMVC.xml配置视图定位的路径去
9. 最后在/WEB-INF/jsp/listUser.jsp 中显示数据
准备数据库表User_
src目录下
com.bean包
创建实体类User
com.dao包
DAO.xml和DAO.java放在同一个包下面,并且namespace必须写DAO.java的完整类名
DAO.java【CRUD接口】
import cpm.bean.User
public interface userDAO {
public void add(User user);
public void delete(int id);
public User get(int id);
public void update(User user);
public List<User> list();
public int count();
}
DAO.xml【CRUD实现】
<!-- namespace是该xml对应的接口全名 -->
<mapper namespace="com.dao.userDAO">
<!-- id对应方法名;parameterType是参数类型;resultType是返回值类型;#{...}中填写的是方法的参数 -->
<select id="get" parameterType="_int" resultType="User">
select * from user_ where id= #{id}
</select>
<insert id="add" parameterType="User" >
insert into user_ ( name ) values (#{name})
</insert>
<delete id="delete" parameterType="User" >
delete from user_ where id= #{id}
</delete>
<update id="update" parameterType="User" >
update user_ set name=#{name} where id=#{id}
</update>
<select id="list" resultType="User">
select * from user_
</select>
</mapper>
com.servise包
Service.java【Service接口】
public interface Service {
List<User> list();
}
@Service标示为一个Service,表示它被Spring管理起来了
ServiceImpl.java【Service实现】
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ServiceImpl implements Service{
@Autowired
userDAO dao;//装配userDAO
public List<User> list(){
return dao.list();
};
}
com.controller包
@Controller:标示为控制器。
@RequestMapping("XXX"):把访问路径XXX映射到注释的方法上
Controller.java【Controller控制器类】
// 告诉spring mvc这是一个控制器类
@Controller
@RequestMapping("")
public class Controller {
@Autowired
Service service;//找到实现了Service接口的类,并装配进来(就是装配ServiceImpl)
@RequestMapping("listUser") // 表示listUser请求由这里处理
public ModelAndView listUser(){
ModelAndView mav = new ModelAndView();
List<User> user= service.list();
// 放入转发参数
mav.addObject("user", user);
// 放入视图定位的路径
mav.setViewName("listUser");
return mav; //带着user数据返回给视图定位 前缀+listUser+后缀
}
}
applicationContext.xml
<!-- 将Service的生命周期纳入Spring的管理:扫描com.service下的注释,生成对应的bean -->
<context:annotation-config />
<context:component-scan base-package="com.service" />
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/user?characterEncoding=UTF-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>admin</value>
</property>
</bean>
<!-- 扫描com/dao/下存放SQL语句的DAO.xml -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="typeAliasesPackage" value="com.bean" />
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/dao/*.xml"/>
</bean>
<!-- 扫描DAO,并将其生命周期纳入Spring的管理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao"/>
</bean>
springMVC.xml
<!-- 扫描Controller,并将其生命周期纳入Spring管理 -->
<context:annotation-config/>
<!-- 表示从包controller下扫描有@Controller注解的类 -->
<context:component-scan base-package="com.controller">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 注解驱动,以使得访问路径与方法的匹配可以通过注解配置 -->
<mvc:annotation-driven />
<!-- 静态页面,如html,css,js,images可以访问 -->
<mvc:default-servlet-handler />
<!-- 视图定位到 /WEB-INF/jsp/*.jsp 这个位置 -->
<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>
WEB-INF下
web.xml配置
1. 通过ContextLoaderListener在web app启动的时候,获取contextConfigLocation配置文件的文件名applicationContext.xml,并进行Spring相关初始化工作
2. 有任何访问,都被DispatcherServlet所拦截,这就是Spring MVC工作机制了
<web-app ······>
<!-- spring的配置文件。【启动时获取applicationContext.xml】 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring mvc核心:分发servlet。【拦截配置的请求提交到DispatcherServlet】 -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- spring MVC需要加载的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern> <!-- / 表示全部拦截; *.do 只拦截.do结尾的,过滤静态资源 -->
</servlet-mapping>
</web-app>
jsp目录
listUser.jsp
<c:forEach items="${user}" var="c" varStatus="st">
<tr>
<td>${c.id}</td>
<td>${c.name}</td>
</tr>
</c:forEach>
1. 首先浏览器上访问路径 /listUser
2. tomcat根据web.xml上的配置信息,拦截到了/listUser,并将其交由DispatcherServlet处理。
3. DispatcherServlet 根据springMVC的配置,将这次请求交由Controller类进行处理,所以需要进行这个类的实例化
4. 在实例化Controller的时候,注入ServiceImpl
5. 在实例化ServiceImpl的时候,又注入DAO
6. 根据ApplicationContext.xml中的配置信息,将DAO和DAO.xml关联起来了。
7. 这样拿到了实例化好了的Controller,并调用listUser()方法
8. 在listUser方法中,访问Service,并获取数据,并把数据放在"user"上,接着服务端跳转到listUser.jsp去
9. 最后在listUser.jsp 中显示数据