Spring+Mybatis整合

一、简介

  Spring和Mybatis是两个非常出名的框架,Spring主要用于Java服务器端的开发,而MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、整合步骤

  现假设我们已经建好了一个Web项目,并且导入了相关的包,并且已经创建了一个数据库。下面开始整合Mybatis的部分。

1、修改Spring配置文件ApplicationContext.xml

  第一步首先要Mybatis链接数据库,需要用到jdbc的包中的Driver类,我本地用的是mysql数据库,3306是mysql的默认端口。下面是Mybatis链接数据库的配置方式:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

  那么完成了数据库的链接,下一步需要什么呢?Mybatis中访问数据库是通过sqlSession对象来访问的,而sqlSession对象是由sqlSessionFactory生成的。在Spring+Mybatis中,就需要把这两个对象封装到bean中。

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--在sqlSessionFactory的bean中要指定数据源-->
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:com/phone/api/mapper/*Mapper.xml" />
    </bean>

    <!-- 配置SQLSession模板 -->  
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 
        <!--需要往sqlSessionFactory注入依赖--> 
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

  接下来是化腐朽为神奇的一步,使用MapperScannerConfigurer来创建数据映射器,这样程序会自动检测你的项目,自动注册Mapper对应的MapperFactoryBean对象。(其实每个映射都是一个MapperFactoryBean,当你有多个Mapper的时候,使用MapperScannerConfigurer会更加方便!)其中basePackage指的就是你的Mapper所在的包的位置。

    <!-- mybatis mapper 扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.phone.api.mapper"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

  到此配置文件已经配置结束了,接下来我们去看看我们的Mapper。

2、Mapper接口与XML文件

  Mybatis相较于JDBC更便捷的地方就在于,它大部分的过程都在XML文件中完成了。我们一般会写一个Mapper的接口,里面是你需要用到的函数;另外在XML文件中写上与接口中同名的标签,在标签里写sql语句,当你调用Mapper接口中的函数的时候,实际上执行的是相应的sql语句。
  下面来看两段接口与XML的代码:

GSearchTopMapper.Java

package com.phone.api.mapper;
//……各种包我就不放上来占空间了
public interface GSearchTopMapper {
        public List<Data> getSearch(@Param("keyword")String keyword,int page,int pageSize);
}

GSearchTopMapper.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.phone.api.mapper.GSearchTopMapper">

      <select id="getSearch"  resultType="com.phone.api.entity.Data">
        SELECT
          skuname1    AS phoneName,
          url        AS url,
          imgurl     AS imageUrl,
          IFNULL(FORMAT(min(phoneprice+0),2),'0')  price,
          (goodsay*100)   score
        FROM `tb`
        WHERE 1 =1
        <if test="#{keyword}!=''"> and skuname like CONCAT('%', #{keyword}, '%') </if>
    </mapper>

  可以看到接口在com.phone.api.mapper下,也就是MapperScannerConfigurer的basePackage下。里面有个getSearch方法,里面用到@Param注解,把调用该方法时传入的参数“keyword”传到keyword中。
  再来看看XML文件,有一个mapper标签,其namespace属性写的是它的mapper接口的名称,同时也是该XML文件的名称(mapper的接口和XML文件必须同名)。里面有个select标签,其id与Mapper中的getSearch方法同名,而它返回的类型resultType是一个Data对象。其中有一个if标签,因为Mybatis中没有if语句,所以要用if标签。#{keyword}是XML中使用传进来的参数的方式。这些和框架整合没太大关系就不赘述了。
  重要的有三点:
  a.Mapper的接口和XML文件必须同名
  b.接口的方法与标签的id要同名
  c.mapper标签的namespace要指明所在的位置

  当你用接口中的方法传入参数去查询数据库的时候,就能返回相应的数据啦!在这里返回的结果是List< Data>类型的数据。
  从这里我们也可以知道,简介中所说的“MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(普通的 Java对象)映射成数据库中的记录”是怎样的情况了,其返回的结果就是对象Data的List。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值