美文网首页
2019-06-04 SSM复习要点

2019-06-04 SSM复习要点

作者: 卡布奇诺_7828 | 来源:发表于2019-06-04 13:03 被阅读0次

    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){
            
        }
    }
    

    相关文章

      网友评论

          本文标题:2019-06-04 SSM复习要点

          本文链接:https://www.haomeiwen.com/subject/apulxctx.html