2019-06-04 SSM复习要点
SSM复习要点
Spring
Spring是一个管理Bean的容器
三个重要概念:IOC,DI,AOP
bean标签的作用及特点
这个对象在Spring容器加载时即创建该对象
默认是单例的,可以修改scope属性修改为非单例
scope="prototype"
class是必须指定的,id不是
Autowired注解的作用
可以注入一个对象,默认是按照类型匹配,所以要求实现类只能有一个,如果有多个需要使用@Qulifier
public class GuanYu{
@Autowired
@Qulifier("test2") // 指定test2作为装配对象
private Weapon weapon;
}
@Component("test1")
public class QingLong implements Weapon {
private int dps;
public void setDps(int dps) {
this.dps = dps;
}
public int getDps() {
return dps;
}
public void showInfo() {
System.out.println("青龙偃月,攻击力很高");
}
}
@Component("test2")
public class Fang implements Weapon {
private int dps;
public void setDps(int dps) {
this.dps = dps;
}
public int getDps() {
return dps;
}
public void showInfo() {
System.out.println("方天画戟,攻击力很高");
}
}
依赖注入DI的方式有几种
-
构造器注入
<bean id="guanyu" class="com.neuedu.test.GuanYu"> <constructor-arg name="name" value="关羽"></constructor-arg> <constructor-arg name="weapon" ref="fang"></constructor-arg> <constructor-arg name="name"> <value>关羽</value> </constructor-arg> <constructor-arg name="weapon"> <ref bean="fang"></ref> </constructor-arg> </bean> <bean id="fang" class="com.neuedu.test.Fang"></bean>
-
setter注入
<bean id="guanyu" class="com.neuedu.test.GuanYu"> <property name="name" value="关羽"></property> <property name="weapon" ref="fang"></property> <property name="name"> <value>关羽</value> </property> <property name="weapon"> <ref bean="fang"></ref> </property> </bean> <bean id="fang" class="com.neuedu.test.Fang"></bean>
- 接口注入(Spring不支持)
AOP面向切面编程
其中使用了代理模式
提供了一些注解,如@Before,@Around,@AfterThrowing等
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源dataSource在spring-db.xml中已经配置-->
<property name="dataSource" ref="dbcpDS" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!--
第一个 * - 通配 返回值类型
第二个 * - 通配包com.neuedu.service.impl下的class
第三个 * - 通配包com.neuedu.service.impl下的class的方法
第四个 .. - 通配 方法可以有0个或多个参数
-->
<!-- advice-ref的值是上面tx:advice标签的id属性的值 -->
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.neuedu.service.impl.*.*(..))"/>
</aop:config>
Mybatis
mybatis是一个持久层框架
别名设置
<configuration>
<typeAlias type="com.neuedu.pojo.Userinfo1" alias="user1">
<typeAlias type="com.neuedu.pojo.Userinfo2" alias="user2">
<package name="com.neuedu.pojo"></package>
<package name="com.neuedu.utils"></package>
</configuration>
log4j日志,默认的输出级别是DEBUG
表与表之间的关系
- 一对一
<assosiation>
- 多对一
<collection>
- 多对多
<collection>
在mapper文件中,常见的标签select,insert,where,if,set,update,delete,sql,include等,没有group标签
<!-- 返回主键 -->
<insert id="addEmp" parameterType="Emp">
/*
keyProperty="empno" 主键列
mysql order=before oracle order=after
*/
insert into emp(empno,ename,deptno,job) values(#{empno},#{ename},#{deptno},#{job})
<selectKey order="BEFORE" keyProperty="empno" resultType="Integer"></selectKey>
</insert>
mapper文件中namespace对应接口
<mapper namespace="com.neuedu.mapper.UserinfoMapper"></mapper>
mapper文件中#{}和${}的区别
- #{}会被解析成?,然后使用数据绑定,${}是直接把数据拼在SQL中
- #{}有单引号,${}没有
mapper文件中resultType和resultMap的区别
-
resultType表示SQL的返回值类型,会把查询结果直接绑定在该类型的同名属性上
<select id="serchByEmpno" parameterType="Integer" resultType="Emp"> select * from emp where empno = #{value} </select>
public class Emp{ private int empno; private double sal; ... }
-
resultMap表示SQL返回的map映射,需要一一设置对应属性
<select id="serchByEmpno" parameterType="Integer" resultMap="test"> select empno,sal from emp where empno = #{value} </select> <resultMap id="test" type="Emp"> <id property="a" column="empno"></id> <result property="b" column="sal"></result> </resultMap>
public class Emp{ private int a; private double b; }
SpringMVC
SpringMVC中有个负责处理HTTP请求和响应的DispatcherServlet,它叫中央控制器(前端控制器),在web中配置映射
<!--配置springmvc中央控制器(前端控制器)DispatcherServlet-->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<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>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
SpringMVC处理器方法需要返回数据需要添加注解:@ResponseBody
SpringMVC中,ModelAndView可以保存数据并完成转发,但不能获取数据
@RequestMapping({"/user/add","/user/insert"})映射多个请求
参数绑定时不能直接绑定java.util.Date类型
处理器方法是用String类型作为返回值,使用forward
进行转发,使用redirect
进行重定向
RESTFUL风格的URL如何获取参数
@Controller
public class TestController{
@RequestMapping("/user/{id}")
public void getInfo(@PathVariable("id") int uid){
}
}