spring与mybatis整合实例

来源:互联网 发布:数据分析的方法 编辑:程序博客网 时间:2024/06/05 16:55
spring与mybatis整合实例
        在接触了一个后台需求之后,自己搭建了一个spring与mybatis框架项目,这里就与大家分享一下,所搭建的工程为maven工程,首先来看下代码结构,还是不太规范,对于配置文件的包有需要童鞋可自行建立规范的方式。
一、代码结构


二、所搭建的项目是maven工程,pom.xml包配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.starit.collection</groupId><artifactId>gzzc-spring-mybatis</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>5.0.0.Alpha2</version></dependency><!--与日志相关的jar -->        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.7.2</version>        </dependency>        <dependency>            <groupId>ch.qos.logback</groupId>            <artifactId>logback-core</artifactId>            <version>1.0.13</version>        </dependency>        <dependency>            <groupId>ch.qos.logback</groupId>            <artifactId>logback-classic</artifactId>            <version>1.0.13</version>        </dependency>                <!--与kafka相关jar -->        <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>0.10.0.1</version></dependency><!-- json相关包 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency><!-- spring相关包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.3.7.RELEASE</version><scope>test</scope></dependency><!-- 数据库包 --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.1.0</version></dependency><dependency><groupId>proxool</groupId><artifactId>proxool</artifactId><version>0.9.1</version></dependency><dependency><groupId>proxool</groupId><artifactId>proxool-cglib</artifactId><version>0.9.1</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><configuration><executable>java</executable><mainClass>com.starit.ipran.socket.ServerStart</mainClass></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><excludes><exclude>*.xml</exclude></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><descriptors><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build></project>
三、spring与mybatis集成,spring-mybatis.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans                                http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                                http://www.springframework.org/schema/context                                http://www.springframework.org/schema/context/spring-context-3.1.xsd                                http://www.springframework.org/schema/mvc                                http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.cn.hnust" /><!-- 加载配置源数据库信息--><context:property-placeholder location="classpath:jdbc.properties" /><!-- 配置数据源 --><bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">        <property name="driver" value="${db.driverName}" />        <property name="driverUrl" value="${db.url}" />        <property name="user" value="${db.username}" />        <property name="password" value="${db.password}" />        <property name="alias" value="${db.alias}" />        <property name="houseKeepingTestSql" value="${db.testSql}" />        <property name="trace" value="true" />        <property name="testBeforeUse" value="true" />    </bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 自动扫描mapping.xml文件 --><property name="mapperLocations" value="classpath:IpranAlarmInfoMapper.xml"></property></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.starit.ipran.dao" /><property name="sqlSessionFactory" ref="sqlSessionFactory"></property></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean></beans>  
      ps:jdbc.properties数据库信息文件的内容格式为:
db.driverName=oracle.jdbc.OracleDriver db.url=jdbc:oracle:thin:@127.0.0.1:8765:gzzcdb.username=spiritsdb.password=spirits2017testdb.alias=spiritsdb.maxActiveTime=3600000db.maxConnCount=50db.minConnCount=1db.testSql=select 'x' from DUALhibernate.dialect=org.hibernate.dialect.OracleDialecthibernate.show_sql=true
四、IpranAlarmInfoDao.java dao层
package com.starit.ipran.dao;import java.util.List;import org.apache.ibatis.annotations.Param;import com.starit.ipran.model.IpranAlarm;public interface IpranAlarmInfoDao {/** * 插入告警 * @param ipranAlarm * @return */public boolean insertAlarm(IpranAlarm ipranAlarm);/** * 查询告警 * @param serialId * @param alarmStatus * @return */public List<IpranAlarm> queryAlarm(IpranAlarm ipranAlarm);/** * 查询告警 与当前告警状态不一样的 * @param serialId * @param alarmStatus * @return */public List<IpranAlarm> queryAlarmStatusNotCurrent(IpranAlarm ipranAlarm);/** * 更新告警状态 更新与当前告警状态不相同的 * @param serialId * @param alarmStatus * @return */public boolean updateAlarmStatusNotCurrent(IpranAlarm ipranAlarm);/** * 更新告警次数 * @param serialId * @param alarmCount * @return */public boolean updateAlarmCount(IpranAlarm ipranAlarm);}
        需要注意的是dao层的方法名应该与mapper.xml里面的sql语句的id相对应一致,在mapper.xml里面相应地也会标红。
五、IpranAlarmInfoMapper.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.starit.ipran.dao.IpranAlarmInfoDao" >  <resultMap id="BaseResultMap" type="com.starit.ipran.model.IpranAlarm" >    <result column="ID" property="id" jdbcType="DECIMAL" />    <result column="SERIAL_ID" property="serialId" jdbcType="VARCHAR" />    <result column="NE_ID" property="neId" jdbcType="VARCHAR" />    <result column="NECITY" property="necity" jdbcType="VARCHAR" />    <result column="NE_IP" property="neIp" jdbcType="VARCHAR" />    <result column="ALARM_CAT" property="alarmCat" jdbcType="VARCHAR" />    <result column="ALARM_NAME" property="alarmName" jdbcType="VARCHAR" />    <result column="ALARM_LEVEL" property="alarmLevel" jdbcType="VARCHAR" />    <result column="ALARM_STATUS" property="alarmStatus" jdbcType="VARCHAR" />    <result column="ALARM_DETAIL" property="alarmDetail" jdbcType="VARCHAR" />    <result column="ALARM_AFFECTION" property="alarmAffection" jdbcType="VARCHAR" />    <result column="ALARM_TIME" property="alarmTime" jdbcType="VARCHAR" />    <result column="UPDATE_TIME" property="updateTime" jdbcType="VARCHAR" />    <result column="CLEARED_TIME" property="clearedTime" jdbcType="VARCHAR" />    <result column="ALARM_COUNT" property="alarmCount" jdbcType="DECIMAL" />    <result column="FLAG" property="flag" jdbcType="DECIMAL" />    <result column="BATCH" property="batch" jdbcType="DECIMAL" />    <result column="ENTRY_TIME" property="entryTime" jdbcType="VARCHAR" />    <result column="COMPARE_ID" property="compareId" jdbcType="VARCHAR" />  </resultMap>      <insert id="insertAlarm" parameterType="com.starit.ipran.model.IpranAlarm" >    insert into STG_INM.IN_IPRAN_ALARM (ID, SERIAL_ID, NE_ID,       NECITY, NE_IP, ALARM_CAT,       ALARM_NAME, ALARM_LEVEL, ALARM_STATUS,       ALARM_DETAIL, ALARM_AFFECTION, ALARM_TIME,       UPDATE_TIME, CLEARED_TIME, ALARM_COUNT,       FLAG, BATCH, ENTRY_TIME,       COMPARE_ID)    values (STG_INM.IN_IPRAN_ALARM_SEQ.nextval, #{serialId,jdbcType=VARCHAR}, #{neId,jdbcType=VARCHAR},       #{necity,jdbcType=VARCHAR}, #{neIp,jdbcType=VARCHAR}, #{alarmCat,jdbcType=VARCHAR},       #{alarmName,jdbcType=VARCHAR}, #{alarmLevel,jdbcType=VARCHAR}, #{alarmStatus,jdbcType=VARCHAR},       #{alarmDetail,jdbcType=VARCHAR}, #{alarmAffection,jdbcType=VARCHAR}, #{alarmTime,jdbcType=VARCHAR},       #{updateTime,jdbcType=VARCHAR}, #{clearedTime,jdbcType=VARCHAR}, #{alarmCount,jdbcType=DECIMAL},       #{flag,jdbcType=DECIMAL}, #{batch,jdbcType=DECIMAL}, #{entryTime,jdbcType=VARCHAR},       #{compareId,jdbcType=VARCHAR})  </insert>    <select id="queryAlarm" parameterType="com.starit.ipran.model.IpranAlarm" resultMap="BaseResultMap">  select * from STG_INM.IN_IPRAN_ALARM t where t.SERIAL_ID = #{serialId} and t.ALARM_STATUS = #{alarmStatus}  </select>     <select id="queryAlarmStatusNotCurrent" parameterType="com.starit.ipran.model.IpranAlarm" resultMap="BaseResultMap">  select * from STG_INM.IN_IPRAN_ALARM t where t.SERIAL_ID = #{serialId} and t.ALARM_STATUS != #{alarmStatus}  </select>     <update id="updateAlarmStatusNotCurrent" parameterType="com.starit.ipran.model.IpranAlarm">  UPDATE stg_inm.in_ipran_alarm t SET t.alarm_status = #{alarmStatus} WHERE t.serial_id = #{serialId}                 and t.alarm_status != #{alarmStatus}  </update>    <update id="updateAlarmCount" parameterType="com.starit.ipran.model.IpranAlarm">  UPDATE stg_inm.In_Ipran_Alarm t SET t.alarm_count = #{alarmCount,jdbcType=DECIMAL}                 WHERE t.serial_id = #{serialId,jdbcType=VARCHAR} and t.ALARM_STATUS = #{alarmStatus,jdbcType=VARCHAR}  </update>  </mapper>
    此处标红id应该与dao层方法名一致,标蓝部分表示mapper.xml关联的是哪个dao层,标绿色部分表示返回的结果是model里面的哪些字段。
六、程序现在只需要加载spring-mybatis.xml然后获取bean,得到相应的dao对象之后就可以调用各种crud方法进行操作了,因为是介绍spring与mybatis集成,其他就不介绍了。