天天看點

springMVC + Mybatis通用Mapper使用

通用Mapper基于Mybatis的插件。開發人員不需要編寫SQL,隻要寫好實體類,就能支援相應的單表增删改查,根據ids批量查詢、新增、删除方法。

直接上代碼

Maven依賴:

<!-- 通用Mapper -->
      <dependency>
          <groupId>tk.mybatis</groupId>
          <artifactId>mapper</artifactId>
          <version>3.3.9</version>
      </dependency>
           

SpringMVC配置:

<!-- mybatis 通用 mapper 整合-->
    <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="markerInterface" value="com.example.dao.BaseDao"/>
        <!-- 通用Mapper通過屬性注入進行配置,預設不配置時會注冊Mapper<T>接口 -->
        <property name="properties">
            <value>
            <!--配置參數-->
                ORDER=BEFORE
            </value>
        </property>
    </bean>
           

可配屬性參數介紹:

UUID:設定生成UUID的方法,需要用OGNL方式配置,不限制傳回值,但是必須和字段類型比對

IDENTITY:取回主鍵的方式

ORDER:seletKey中的order屬性,可選值為BEFORE和AFTER

catalog:資料庫的catalog,如果設定該值,查詢的時候表名會帶catalog設定的字首

schema:同catalog,catalog優先級高于schema

seqFormat:序列的擷取規則,使用{num}格式化參數,預設值為 {0}.nextval,針對Oracle,可選參數一共4個,對應0,1,2,3分别為 SequenceName,ColumnName, PropertyName,TableName

notEmpty:insert和update中,是否判斷字元串類型!=’’,少數方法會用到

style:實體和表轉換時的規則,預設駝峰轉下劃線,可選值為normal用實體名和字段名;camelhump是預設值,駝峰轉下劃線;uppercase轉換為大寫;lowercase轉換為小寫

建立DAO層:

package com.example.dao;

import com.example.entity.DemoUser;

public interface DemoUserMapper extends BaseDao<DemoUser> {

}
           

每個dao都必須繼承BaseDao

建立一個公共的接口繼承Mapper:

package com.example.dao;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.ids.DeleteByIdsMapper;
import tk.mybatis.mapper.common.ids.SelectByIdsMapper;
import tk.mybatis.mapper.common.special.InsertListMapper;

public interface BaseDao<T> extends Mapper<T>, InsertListMapper<T>, SelectByIdsMapper<T>, DeleteByIdsMapper<T> {

}
           

Mapper接口:通用mapper,繼承了BaseMapper, ExampleMapper, RowBoundsMapper三個組合接口。

InsertListMapper接口:批量插入,支援批量插入的資料庫可以使用,另外該接口限制實體包含id屬性并且必須為自增列。

SelectByIdsMapper接口:通過操作ids字元串進行查詢,ids 如 “1,2,3” 這種形式的字元串。

DeleteByIdsMapper接口:根據主鍵字段進行删除,方法參數必須包含完整的主鍵屬性,通過操作ids字元串進行操作,ids 如 “1,2,3” 這種形式的字元串

繼承的Mapper就擁有了Mapper所有的通用方法:

/**
     * 根據主鍵查詢
     *
     */
      T selectByPrimaryKey(Object var1);

    /**
     * 根據實體中字段值進行查詢
     */
    List<T> select(T var1);

    /**
     * 通過id批量查詢
     * <p>
     * 通過操作ids字元串進行操作,ids 如 "1,2,3" 這種形式的字元串,
     * <p>
     * 這個方法要求實體類中有且隻有一個帶有@Id注解的字段,否則會抛出異常。
     */
    List<T> selectByIds(String var1);

    /**
     * 根據Example條件進行查詢
     *
     * @param example 任意類型參數
     */
    List<T> selectByExample(Object var1);


    /**
     * 儲存一個實體,null的屬性也會儲存,不會使用資料庫預設值
     */
    int insert(T var1);

    /**
     * 儲存一個實體,null的屬性不會儲存,會使用資料庫預設值
     */
    int insertSelective(T var1);


    /**
     * 批量插入,支援批量插入的資料庫可以使用,
     * 例如MySQL,H2等,
     * 另外該接口限制實體包含id屬性并且必須為自增列
     *
     */
     int insertList(List<T> var1);



    /**
     * 根據主鍵字段進行删除,方法參數必須包含完整的主鍵屬性
     */
    int deleteByPrimaryKey(Object var1);


    /**
     * 根據主鍵字段進行批量删除,方法參數必須包含完整的主鍵屬性
     * 通過操作ids字元串進行操作,ids 如 "1,2,3" 這種形式的字元串
     */
    @Override
    int deleteByIds(String var1);
    
    /**
     * 根據實體屬性作為條件進行删除,查詢條件使用等号
     */
    int delete(T var1);


    /**
     * 根據主鍵更新實體全部字段,null值會被更新
     * (對象中必須有主鍵id)
     */
   int updateByPrimaryKey(T var1);

    /**
     * 根據主鍵更新屬性不為null的值
     * (對象中必須有主鍵id)
     */
     int updateByPrimaryKeySelective(T var1);
           

這裡展示一部分方法,需要别的方法可以看api。

在service層中使用:

package com.example.service.impl;

import com.example.dao.DemoUserMapper;
import com.example.entity.DemoUser;
import com.example.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;

public class DemoServiceImpl implements DemoService {

    @Autowired
    DemoUserMapper demoUserMapper;


    public void save(DemoUser user){
        demoUserMapper.insert(user);
    }
}
           

最後這是項目結構:

springMVC + Mybatis通用Mapper使用

繼續閱讀