Spring MVC
1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、andlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。
SpringMVC常用的注解
@Controller 标识是一个Controller,Spring包扫描创建实例
@RequestMapping 请求后的映射路径
@PathVariable 标识接收单个参数
@ResponseBody 返回对象利用jackson工具类转换为json字符串
@RequestParam 参数名和请求参数名称不同时使用,可以设置默认值
Spring
目的:是为了解决企业应用程序开发复杂性而创建的,解耦
Spring框架两大核心:IoC和DI
概念
IoC(Inversion of Control)简单来说就是将对象Object的创建的权力及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不在需要关注对象的创建和生命周期的管理,而是在需要的时候由Spring框架提供,这个由Spring框架管理对象创建和生命周期的机制称之为控制反转。
在创建对象的过程中Spring可以依据对象的关系,自动把其它对象注入(无需创建对象,直接拿着使用)进来,这个过程称之为DI(Dependency Injection)依赖注入。
总结下Spring核心就干了两件事:
创建对象 就是指将对象的创建,对象的存储(map),对象的管理(依赖查找,依赖注入)交给了spring容器。
设置对象的关联关系
IoC的XML方式
new一个xml文件
ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”);
Hello h1 = new Hello();
System.out.println(h1);
h1.hi();
//根据id获取bean
//Spring就是一个大工厂(容器)专门生成bean,bean就是对象
Hello hello = (Hello)ac.getBean(“Hello”);
System.out.println(hello);
hello.hi();
注解方式
MyBatis持久层框架
简化JDBC的开发
能够更好的完成ORM(对象关系映射)
内部组件结构图
配置xml文件
引入xml文件
测试
在sqlMapConfig.xml配置,在映射文件中直接写对象名称即可
< typeAliases >
< typeAlias type=“cn.mybatis.pojo.User” alias=“User” />
< /typeAliases >
动态传值
#{…}/${…} #更高效
select * from user where name={name}
动态SQL
< sql id=“cols”>
id,title,sell_point,price,num,barcode,image,cid,status,created,updated
< /sql>
< select id=“find” resultType=“Item” parameterType=“Item”>
SELECT < include refid=“cols”/> FROM tb_item
< /select >
if
< select id=“find” resultType=“Item” parameterType=“Item”>
SELECT < include refid=“cols”/> FROM tb_item where
< if test=“title != null”> title like #{title} < /if>
< if test=“sellPoint != null”>and sell_point like #{sellPoint}< /if>
< /select>
where
去掉条件中可能多余的and或者or:
< select id=“find” resultType=“Item” parameterType=“Item”>
SELECT < include refid=“cols”/> FROM tb_item
< where>
< if test=“title != null”> title like #{title} < /if>
< if test=“sellPoint != null”>and sell_point like #{sellPoint}< /if>
< /where>
< /select>
set
<update id="update">
UPDATE teachers
< set>
< if test="tname != null">tname=#{tname},< /if>
< if test="tsex != null">tsex=#{tsex},< /if>
< if test="tbirthday != null">tbirthday=#{tbirthday},< /if>
< if test="prof != null">prof=#{prof},< /if>
< if test="depart != null">depart=#{depart}< /if>
< /set>
WHERE tno=#{tno}
< /update>
foreach
用于in子查询中的多个值的遍历:
<delete id="delete">
DELETE FROM teachers WHERE tno IN
<!--ids是给SQL传递的参数Map里的key,item的值就像是for循环里的i变量名-->
< foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
< /foreach>
< /delete>
调用代码:
Map<String,Object> map = new HashMap<String,Object>();
String[] ps = {"1","22"};
map.put("ids", ps );
mapper.delete(map);
```