提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
SpringMVC
1工作流程:
1.1开发流程
1.2常用的注解
2 Mybatis 是什么?
2.1 关联关系的配置
2.2 mapper.xml配置的常用标签有哪些?
2.3Mybatis中的二级缓存默认关闭的
2.4 #{...}与${...}传参的区别
2.5如何执行批量插入
2.6 Mybatis 的一级、二级缓存
SpringMVC
1.1工作流程:
①DispatcherServlet:接受到浏览器端发送的所有请求
②HandlerMapper处理器映射器:找到@requestMapping对应值
③HandlerAdapter处理器适配器:适配对应的方法调用执行
④modelAndView模型视图对象:方法的返回值
⑤viewResolver解析模型视图对象,得到view,返回给浏览器用户展示;
1.1开发流程
①导入pom依赖
②web.xml中添加核心类配置,DispatcherServlet,指向框架Springmvc.xml的配置文件析
③配置Springmvc.xml
<!--3) ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
④controller层,正常开发即可
要通过@controller标记当前类被spring所管理
写方法:@requestMapping
方法会有返回值:“bookList” --> /bookList.jsp
1.2常用的注解
@controller @requestMapping @getMapping @putMapping @deleteMapping @postMapping 若依
@responseBody-返回json数据 @requestBody-接受json数据 @pathvariable @requestParam
controller requestMapping putMapping delelteMapping postMapping若依 responseBody返回json数据 requestBody接受json数据 pathvariable requesParam
2Mybatis
是什么?ORM Object reference Mapping,数据库层面的框架
2.1关联关系的配置
一对一:association javatype
一对多:Collection oftype
2.2mapper.xml配置的常用标签有哪些?
if/for
<![CDATA[ ... ]]> 用于解决特殊字符转义的,没有CDATA的话,> < & 等会被当成HTML标签,而不是sql语句的组成部分;
2.3Mybatis中的二级缓存默认关闭的
二级缓存:Mapper级别的缓存,默认关闭
一级缓存:session级别的缓存,默认就是开启的;
2.4#{...}与${...}传参的区别
#传递参数会自带引号
S不带引号:存在SQL注入的问题,但是也有优点,可以用来做动态列/动态SQL
上述的不同,也就决定了$存在SQL注入的风险
UserMapper.xml 前提uid是varchar
UserMapper.xml 前提uid是varchar
select * from user where uid = #{uid} uid='abc' or uid is not null
select * from user where uid = ''abc' or uid is not null'
select * from user where uid = ${uid} uid='abc' or uid is not null
select * from user where uid = 'abc' or uid is not null
<select>
select * from user where uid = #{uid}
</select>
<select id="execute">
${executeSQL}
</select>
<select id="execute">
select ${fieldName} form ${tableName}
</select>
UserMapper.execute("select * from book")
2.5如何执行批量插入
sqlsession sqlsession = sqlsessionfactory.opensession(executortype.batch);
try {
namemapper mapper = sqlsession.getmapper(namemapper.class);
for (string name : names) {
mapper.insertname(name);
}
sqlsession.commit();
}catch(Exception
e){ e.printStackTrace(
);
sqlSession.rollback();
throw e;
}
finally {
sqlsession.close();
}
2.6 Mybatis 的一级、二级缓存
一级缓存作用域是sqlsession级别的,同一个sqlsession中执行相同的sql查询(相同的sql和参数),第一次会去查询数据库并写到缓存中,第二次从一级缓存中取。
一级缓存是基于 PerpetualCache 的 HashMap 本地缓存,默认打开一级缓存。
二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。