Java EE 笔记三

Spring MVC特点

spring mvc是一个基于MVC模式的表现层框架,在spring2.5以后新增了注解功能。和同类的MVC表现层相比,有如下特点:

1.      基于的是servlet/jsp模式

2.      控制权不再需要继承其他类,只需要使用@Controller注解

3.      不需要有formbean之类的对象了,方法参数中需要的页面值,可通过@RequestParam直接从页面请求中获得。

4.      控制器方法签名定义灵活。

5.      返回页面直接在方法中指定,可以是String也可以是其他,比如ModelAndView或void等。

6.      性能也很优秀,和struts1相当,性能高于struts2

 

 

        

请求------------------》前端控制器--------------------》应用控制器---------------》业务组件

前端控制器:负责接收客户端请求,根据请求路径访问应用控制器。将页面参数填充实体bean。负责转发页面和对标签类的支持。org.springframework.web.servlet.DispatcherServlet

业务控制器:负责产生业务组件,调用业务方法完成业务,返回需要转发的路径

 

默认情况下:DispatcherServlet会寻找WEB-INF下,命名规范为[servlet-name]-servlet.xml文件。

也可以通过init-param改变默认配置

<?xml version="1.0"encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <servlet>

  <servlet-name>mvc</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:app*.xml</param-value>

  </init-param>

  <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

  <servlet-name>mvc</servlet-name>

  <url-pattern>*.do</url-pattern>

  </servlet-mapping>

</web-app>

 

   @RequestMapping(value="ps/{id}",method=RequestMethod.GET)

   public void test(@PathVariable("id") int myid){

     

   }

   <a href="ps/1.do">访问</a>

  

 

表示只能处理get方式,利用PathVariable(“id”)得到路径参数

 

 

spring管理整个项目,每个spring组件都由spring容器产生。所以在web容器启动时,要读取spring的配置文件。从而加载spring容器的组件。

 

 

 

 

log4j:日志文件

公共类: Logger

公共接口:Appender

公共抽象类:Layout

 

log4j日志级别:5个级别等级由低到高

debug:调试级别

info:信息级别

warn:警告级别

error:错误级别

fatal:崩溃级别

 

 

 

 

 

MYbatis

1.      mybatis 是一种持久层框架,也熟悉ORM映射,前身是ibatis

2.      相比于hibernate,hibernate为全自动化,配置文件书写后不需要书写SQL语句,但欠缺灵魂,很多时候需要优化

3.      mybatis为半自动化,需要自己写SQL语句,需要自己定义映射,增加了程序员的一些操作,但带来了设计上的灵活,并且也支持了hibernate的一些特点,如延迟加载,缓存,映射等

4.      对数据库的兼容性比hibernate差,移植性不好,但可以编写灵活和高性能的SQL语句

 

 

mybatis组成

核心对象:SqlSessionFactory SqlSession

配置文件: mybatis.cfg.xml相当于 hibernate的hibernate.cfg.xml

多个类配置文件:user.xml相当于hibernate的映射类文件

支持注解配置

 

 

mybatis设置URL时,加上allowMultiQueries=true,表示允许一个语句块中添加多条SQL语句(URL添加多条语句需要使用 &amp; 来转意,而不是仅用 &)

 

mybatis.xml命名空间

在orm文件根目录下就爱如<mapper namespace=”user”> 设置命名空间、

作用:

1.      更好的分类SQL语句块,更好维护

2.      防止SQL语句块重名

 

在设置了命名空间后,那么在相应的程序调用中,方可以使用”命名空间.语句块名”进行调用相应的sql语句

#和$

#在生成SQL时,对于字符类型参数,会拼装引号

$在生成SQL时,不会拼装引号,可用于order by 之类的参数拼装

 

CDATA标签:用于把整段文本解释为纯字符数据而不是标记的其in公开。包含大量< > & 或者“ 字符。CDATA节中的所有字符都会被当作元素字符数据常量部分,而不是XML标记

 

CDATA 是不被解析器解析的文本。文本内标签不会被当作标记

 

 

mybatis的映射:

一对一

bean的xml文件

<?xml version="1.0"encoding="UTF-8" ?>

<!DOCTYPE mapper   

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="message">

   <!-- 定义查询的属性和列名的映射关系 -->

   <resultMap type="message"id="messageMap">

      <!-- 如果属性名和列名一致,可以不写 -->

      <result property="m_id"column="m_id"/>

  

  

   </resultMap>

  

   <!-- 添加语句块,id表示给该语句块起的名称,parameterType="message"表示参数类型

       useGeneratedKeys="true"表示运行使用自动增长列

       keyProperty="m_id"表示将自动增长列的内容填充添加对象的属性名 -->

   <insert id="add"parameterType="message" useGeneratedKeys="true"keyProperty="m_id">

      <!-- #{xx} 表示从实参对象里取出该属性,填充数据库,属性可以和数据库字段不一致 -->

      insert intot_message(m_name,m_tel)values(#{m_name},#{m_tel});

   </insert>

   <!-- 删除语句块 -->

   <delete id="del"parameterType="int">

      delete from t_message where m_id=#{id};

   </delete>

   <!-- 修改语句块 -->

   <update id="update">

      update t_message set m_tel=#{ppp}where m_id=#{mid};

   </update>

   <!-- 查询语句块 -->

   <!-- 如果字段不一样方法1select m_id,m_name,m_tel as phone fromt_message;通过别名做映射 -->

   <!-- 方法2:映射集合(就不能使用resultType="message",而是 resultMap="messageMap" -->

   <select id="findAll"resultMap="messageMap">

      select * from t_message;

   </select>

   <!-- id查询 -->

   <select id="findById"parameterType="int" resultMap="messageMap">

      select * from t_message where m_id=#{id};

   </select>

   <!-- 按姓名查询,如果在java代码中传值没有加上%模糊查询,则sql语句需要这么写-->

   <!-- select * from t_message where m_name like '%${name}%'; -->

   <select id="findByName"parameterType="String" resultMap="messageMap">

      select * from t_message where m_name like#{name};

   </select>

  

   <!-- 按姓名和电话查询(传多个参,必然是map集合,不需要写parameterType) -->

   <select id="findByItem"resultMap="messageMap">

      select * from t_message where m_name like'%${name}%' and m_tel like '%${tel}%'

   </select>

   <!-- 如果SQL语句中有 < > & 等特殊字符,建议书写在CDATA标签中,XML解析器都当作文本处理,不会认为是标签 -->

   <!-- ID范围查询大于小于符号需要用转义符 &gt; &lt;或者使用<![CDATA[..]]>-->

   <select id="findRangeId"resultMap="messageMap">

      <!-- <![CDATA[select * from t_message where m_id>=#{start} andm_id<#{end};]]>

       -->

       <!-- 当查询条件需要动态生成时,需要使用动态SQL,模糊查询可以不使用 -->

      select * from t_message where 1=1

      <if test="start!=0">

          and m_id&gt;=#{start}

      </if>

       andm_id&lt;#{end};

   </select>

  

   <!-- 动态查询当前页面集合 -->

   <select id="findByPage"resultMap="messageMap">

      select * from t_message where 1=1

      <include refid="cutSql"/>

      limit #{start},#{pageSize};

   </select>

   <!-- 将条件抽象出来 -->

   <sql id="cutSql">

      <if test="name!=null andname!=''">

         and m_name like '%${name}%'

      </if>

      <if test="tel!=null andtel!=''">

         and m_tel like '%${tel}%'

      </if>

   </sql>

  

   <!-- 查询总记录数 -->

   <select id="cutCount"resultType="int" >

      select count(*) from t_message where 1=1

      <include refid="cutSql"/>

   </select>

  

   <!-- 批量添加 -->

   <select id="addList">

      insert into t_message(m_name,m_tel) values

      <!-- collection="mlist" 遍历集合的名称,item为每次循环中取出的元素,separator为分隔符 -->

      <foreach collection="mlist"item="bean" separator=",">

         (#{bean.m_name},#{bean.m_tel})

      </foreach>        

   </select>

  

   <!-- 批量删除 -->

   <select id="delMore">

      delete from t_message where m_id in (

      <foreach collection="idArray"item="id" separator=",">

         #{id}

      </foreach>

      );

   </select>

  

</mapper>

 

mybatis.cfg.xml配置

<?xml version="1.0"encoding="UTF-8"?> 

<!DOCTYPE configuration  PUBLIC   "-//mybatis.org//DTDConfig 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd"> 

<configuration>   

   <typeAliases>

      <!-- 给指定类型取别名 -->

      <typeAlias type="com.lovo.bean.MessageBean"alias="message"/>

   </typeAliases>

 

   <environments default="dev"> 

        <environment id="dev"> 

            <transactionManager type="JDBC"></transactionManager> 

         <!-- 设置数据库的连接 -->

            <dataSource type="POOLED"> 

            <property name="driver"value="org.gjt.mm.mysql.Driver"/>

            <!-- allowMultiQueries=true 表示允许在一个语句块中执行多条SQL语句 -->

            <property name="url"value="jdbc:mysql://localhost:3306/classtrain2?characterEncoding=utf-8&amp;allowMultiQueries=true"/>

            <property name="username"value="root"/>

            <property name="password"value="111111"/>

            </dataSource> 

        </environment> 

    </environments> 

  

   <mappers>

      <mapper resource="orm/MessageBean.xml"/>

   </mappers>

</configuration> 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值