码迷,mamicode.com
首页 > 编程语言 > 详细

spring mvc + mybatis的实际应用

时间:2017-03-10 20:30:05      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:upd   3.0   mat   sel   autowired   允许   增删改查   property   响应   

一.mybatis

    mybatis为我们封装了对数据库的操作,只需要我们编写sql,便能实现对数据库的访问;

    同时也为我们封装了返回的数据类型,只需要在配置文件中指定好,mybatis会自动帮我们遍历数据并封装。

    mybatis封装数据时需要我们提供一个容器,也就是模型,其本质就是一个实体类。所以mybatis的使用是依赖模型的。

    下面开始介绍mybatis使用方法:

   

    1.创建模型(实体类)

      技术分享    

public class TestEntity {
    
    private int id;
    private String name;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}


     2.定义接口(mapper类)

       技术分享

public interface TestMapper {
    
    List<TestEntity> queryAll();

}


     3.实现接口(mapper.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="com.qthh.flyl.app.test.mapper.TestMapper">

  <resultMap type="com.qthh.flyl.app.test.model.TestEntity" id="testMap">
      <id property="id" column="id" />
      <result property="name" column="name"/>
  </resultMap>

 <select id="queryAll" resultMap="testMap">
     select * from test
 </select>
    
</mapper>

      说下个人的理解: 这里的TestMapper.xml可以理解成  TestMapperImpl,就是TestMapper的实现类,只不过是以xml的方式进行的。
      namespace(命名空间)表示要实现哪个接口,<select>标签中的id表示要实现的方法。

 

      到这里,mybatis部分的编写已经完成。命名sql的编写规范可以参考mybatis的帮助文档,我们这里列举一些常用的标签:

      <resultMap>:可以理解成orm(对象关系映射),模型中的属性和数据表中的字段映射。

      <select><update><insert><delete>:增删改查

      <if>:条件判断

      #{}:获取参数值

 

二.spring mvc

 

       1.定义服务接口并实现

        技术分享

public interface TestService {
    
    List<TestEntity> queryAll();

}
@Service("testService")
public class TestServiceImpl implements TestService {
    
    @Autowired
    private TestMapper testMapper;

    @Override
    public List<TestEntity> queryAll() {
        return testMapper.queryAll();
    }

}

 

       2.创建控制器 

@Controller
@RequestMapping("/test")
public class TestController {
    
    @Autowired
    private TestService testService;
    
    @RequestMapping(value="/list",method=RequestMethod.GET)
    @ResponseBody
    public Object list(@RequestParam int userid){
        return testService.queryAll();
    }

}

      到这里,一个简单的spring mvc 应用就算完成了。      

      里面的注解,大家肯定都很熟悉,整理一下:

      @Service:表明是一个服务类

      @Controller:表明是一个控制类

  @RequestMapping:注册映射路径

      @Autowired:自动装配

      @RequestParam:请求参数

      @PathVariable:获取地址栏的参数

      @ResponseBody:申明响应体

 

三.spring mvc 的核心组件

      大家都知道,java web中最核心是servlet,它不仅仅是一个class,更是一个标准。所以围绕java web的就是servlet和servlet容器(现在主流的servlet容器有tomcat、jetty、weblogic、jboos),

      而servlet容器就是我们常说的服务器。

  也就是说,所有j2ee框架必须基于servlet去实现。spring mvc 也不列外。

       

      1.DispatcherServlet

        它是spring 实现mvc的核心。看名字就知道,是负责转发的servlet,转发客户端发来的请求。  

<!-- spring MVC -->
  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

 

     2.RequestMappingHandlerMapping 

        spring mvc 通过DispatcherServlet,拦截所有请求,然后交给自己的bean容器去处理;通过解析请求报文,获取请求信息,然后通知对应的bean去处理。

        那么,如何才能实现此机制呢?

    对,就是通过RequestMappingHandlerMapping。它不仅仅帮我启用注解功能映射url并且负责请求的调度。

        每当有请求来,它根据映射路径去找到对应的类、对应的方法去处理。         

<bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

 

     3.RequestMappingHandlerAdapter

        在处理请求的过程中,会涉及到一些数据格式问题。假如我们现在要做一个接口,需要返回json格式的数据,但是请求报文里面默认传递的是字节流

       为了满足我们的要求,spring mvc 又是如何处理的呢 ?

       spring mvc 允许我们定义一个适配器,可以对消息(数据)进行类型转换,也就是messageConverters这个类 

<bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>

        messageConverters中,我们可以自定义一个类型转换的bean

<bean id="mappingJackson2HttpMessageConverter"
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
                <value>text/json;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
        <property name="objectMapper">
            <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                <property name="dateFormat">
                    <bean class="java.text.SimpleDateFormat">
                        <constructor-arg type="java.lang.String" value="yyyy-MM-dd" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

 

四.spring mvc 常用功能

      后面会陆续更新...

 

     1.ModelAndView

       帮我们添加要返回的数据(模型),然后指定返回的页面(视图)

ModelAndView mav = new ModelAndView();        
mav.setViewName("页面");
mav.addObject("数据", testService.queryAll());
return mav;

 

spring mvc + mybatis的实际应用

标签:upd   3.0   mat   sel   autowired   允许   增删改查   property   响应   

原文地址:http://www.cnblogs.com/qthh/p/6532827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!