SpringMVC和Mybatis的整合

来源:互联网 发布:淘宝信誉提升 编辑:程序博客网 时间:2024/05/01 15:09

SpringMVC和Mybatis的整合

1、 在maven中需要添加的依赖:

这里写图片描述

这里需要万分小心的一个问题:
mybatis-spring和mybatis这两个依赖的版本必须要匹配,否则会有意想不到的错误。曾经折腾我一下午~

mybatis-spring官网的说明:

RequirementsBefore starting with MyBatis-Spring integration, it is very important that you are familiar with both MyBatis and Spring terminology. This document does not attempt to provide background information or basic setup and configuration tutorials for either MyBatis or Spring.MyBatis-Spring requires Java 5 or higher and the following MyBatis and Spring versions:MyBatis-Spring  MyBatis             Spring1.0.0 and 1.0.1     3.0.1 to 3.0.5      3.0.0 or higher1.0.2               3.0.6               3.0.0 or higher1.1.0 or higher     3.1.0 or higher     3.0.0 or higher1.3.0 or higher     3.4.0 or higher     3.0.0 or higher 

2、目录结构:

这里写图片描述


3、配置文件的内容:

(1)mybatis-config.xml,即mybatis的配置文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <mappers>        <mapper resource="mybatis-mapper.xml" />    </mappers></configuration>

只需要指定映射文件的位置即可

(2)mybatis-mapper.xml,即mybatis的映射文件:
定义了sql语句和对应的接口中方法的映射关系,可以减少工作量,也可以在接口的定义中使用注解的方式实现相同的功能。

<?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="dao.ProductDao">    <select id="getProductInfo" parameterType="int" resultMap="productMap">        SELECT c.id,c.price,c.title,c.abstract FROM content c WHERE c.id=#{id}    </select>    <resultMap type="dao.Product" id="productMap">        <result property="m_id" column="id" />        <result property="m_price" column="price" />        <result property="m_title" column="title" />        <result property="m_abstract" column="abstract" />    </resultMap></mapper>

注意:
mapper标签的namespace属性,需要填写接口的完整名称;
select标签的id属性,需要填写接口的对应方法名称;
resultMap是比较强大的功能之一,定义了类的属性和数据库表的列的对应关系;

(3)appcontext.xml,Spring的配置文件:
以下是最基本的配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <!-- 定义sqlsessionFactory -->    <bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="configLocation" value="mybatis-config.xml"></property>        <property name="dataSource" ref="dataSource"></property>    </bean>    <!-- 定义mapper的bean -->    <bean id="productDao" class="org.mybatis.spring.mapper.MapperFactoryBean">        <property name="sqlSessionFactory" ref="sqlsessionFactory"></property>        <property name="mapperInterface" value="dao.ProductDao"></property>    </bean>    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>        <property name="url" value="jdbc:mysql://localhost/webDB"></property>        <property name="username" value="root"></property>        <property name="password" value="123456"></property>    </bean></beans>

使用Spring为了整合Mybatis,有对应的sqlsessionFactoryBean和MapperBean。
(4)web.xml文件:
其中包含了一个dispatcherServlet的配置。

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app>  <display-name>Archetype Created Web Application</display-name>    <servlet>        <servlet-name>api</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>api</servlet-name>        <url-pattern>/api/*</url-pattern>    </servlet-mapping></web-app>

根据Spring的要求,每个dispatcherServlet都在WEB-INF下有一个[servlet-name]-servlet.xml的配置文件,在该文件中指定要扫描的包(包含了对应的controller)、配置视图解析相关内容。
(5)api-servlet.xml文件:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">    <context:component-scan base-package="controller"></context:component-scan></beans>

注意:这里没配置视图解析相关的内容,仅仅指定了这个dispatcherServlet对应的controller所在的包路径。


4、Java文件的内容:

(1)Product.java,对应数据库的一张表:

package dao;public class Product {    private String m_id;    private String m_price;    private String m_title;    private String m_abstract;    @Override    public String toString() {        return "Product [m_id=" + m_id + ", m_price=" + m_price + ", m_title=" + m_title + ", m_abstract=" + m_abstract                + "]";    }}

(2)ProductDao.java,定义了一个接口,对应了对数据库表的操作:

package dao;public interface ProductDao {    Product getProductInfo(int id);}

(3)Hello.java,它是名字为“api”的dispatcherServlet的一个controller:

package controller;import java.io.IOException;import javax.servlet.http.HttpServletResponse;import org.springframework.context.ApplicationContext;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import dao.Product;import dao.ProductDao;@Controllerpublic class Hello {    @RequestMapping("/find")    public void get(@RequestParam String id,HttpServletResponse response) throws IOException {        ApplicationContext context=new ClassPathXmlApplicationContext("appcontext.xml");        ProductDao pDao=(ProductDao) context.getBean("productDao");        Product product=pDao.getProductInfo(Integer.valueOf(id));        response.getWriter().print(product);        ((ConfigurableApplicationContext)context).close();    }}

实现的功能就是根据id在数据库表中查询数据,将结果显示在浏览器中。


5、运行效果:

这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新申请的qq号忘了怎么办 刚申请的qq号忘了怎么办 以前申请的qq号忘了怎么办 小孩玩手机游戏扣费了怎么办 手机qq好友头像显示不出来怎么办 qq的一些重要数据被清理怎么办 华为p9微信听筒声音小怎么办 win10我的电脑图标没了怎么办 小米5x里的微信头像不清楚怎么办 微信头像换了总是模糊怎么办 找到老公暧昧对象的微信怎么办 朋友欠我钱一直拖找借口怎么办 陌陌附近的人不按距离排序怎么办 老婆一直要管我的钱怎么办 老公不肯把钱交给老婆管怎么办 愿意和做朋友不愿意做情侣怎么办 欠信用卡碰到第三方不愿协调怎么办 qq密码忘记了申诉不回来怎么办 当你老公烦你了你该怎么办 自己有漂亮媳妇还经常想去嫖怎么办 微信号封了找不到好友解封怎么办 别人总是提起你的黑历史怎么办 换了手机微信登录不上怎么办 qq不小心清空了聊天记录怎么办 人家介绍了外地媳妇跑了怎么办 火锅想吃香菜牛肉没有签子串怎么办 想读外省大学但家人反对怎么办 13岁被同学忽视他不知道怎么办 老婆发现老公在微信暧昧聊天怎么办 老婆微信和别人聊天暧昧我该怎么办 淘宝修改标题宝贝被删了怎么办 百度网盘上的相片变的模糊怎么办 微信2不小心删了怎么办 房屋没交接前给钥匙出现问题怎么办 微信银行卡注销零钱没了怎么办 贴小广告电话被城管上报停机怎么办 没有id密码怎么办已经锁死了屏幕 电信电话卡注销了里面的钱怎么办 支付宝绑定的手机号成空号了怎么办 支付宝绑定的手机号空号了怎么办 支付宝绑定的手机号码空号了怎么办