Mybatis插件使用开发指南

 

一、分页插件

1、插件配置

spring 配置文件 中添加  数据库方言可选:mysql, mariadb, sqlite, oracle, hsqldb, postgresql, sqlserver2000, sqlserver2005,sqlserver2008, db2, informix,derby;

  

1.1 配置样例

   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

       <property name="dataSource" ref="dataSource" />

       <property name="plugins">

            <list>

                 <bean class="org.smile.mybatis.page.PageHelper">

                  <property name="properties">

                      <value>dialect =sqlserver2005</value>

                  </property>

                </bean>

            </list>

        </property>

    </bean>

 

1.2、参数说明

在properties中配置的内容可以有以下几个

 

参数名称

描述

参数类型

   必选

默认

dialect

数据库方言

STRING

也可以在smile.properties中配置

mysql

page

当前页参数名

STRING

 

page

pageSize

每页条数参数名

String

 

pageSize

countMethod

自定义count 方法参数名

String

 

countMethod

msCache

是否缓存mappedstatment

Boolean

 

true

paramPage

是否启用查询参数中添加分页参数的方式颁

boolean

 

false

 

 

 

2、插件使用

    插件两种主要使用方法,可以自定义分页条数查询方法,也可以使用框架自动生成的分页查询方法,可以使用代码调用设置分页,也可以在查询参数中添加分页参数。

   

2.1使用 pagehelper 调用进行分页

  在查询语句方法调用之前使用代码,这样就会使用到框架内置自动生成的条数查询方法。

    PageHelper.startPage(page,pageSize);

 

代码示例:

Map<String, Object> queryMap = new HashMap<String, Object>();

//查询条件

queryMap.put("lifnr", lifnr.getLifnr());

queryMap.put("purCode", lifnr.getPurCode());

queryMap.put("deliveryDay", lifnr.getDeliveryDay());

PageHelper.startPage(page, fPage.getPageSize());

PageModel list = (PageModel)lifnrDAO.queryLifnrList(queryMap);

 

以上代码就会插件自动分页了

 

2.1.1 从request中取分页参数

PageHelper.startPage(request);

 

会从request中获取配置文件中配置的 page 对应参数的 值 和 pageSize 对应参数的值 进行分页

 

2.1.2 不自动生成查询条数方法

PageHelper.startPage(page,pageSize,false); 

 

不使进行count 计算 

 

可以在方法参数中 加入countMethod 对应参数指定自定义的mybatis 中 count方法id 进行count 计算

 

 

2.2 使用方法参数中添加分页参数信息

 

paramPage 参数必须设置为true

<value> paramPage =true</value>

 

代码样例:

 Map<String, Object> queryMap = new HashMap<String, Object>();

//查询条件

queryMap.put("lifnr", lifnr.getLifnr());

queryMap.put("purCode", lifnr.getPurCode());

queryMap.put("deliveryDay", lifnr.getDeliveryDay());

queryMap.put(PageHelper.getConfig().getPage(),page);

queryMap.put(PageHelper.getConfig().getPageSize(),pageSize);

//总条数

PageModellist = (PageModel)lifnrDAO.queryLifnrList(queryMap);

 

二、自动生成SQL简单语句

1、插件配置

参数名

描述

packageString

用于扫描与数据库表映射的class 类 ,可以以,;分开多个包

 

 

<bean class="org.smile.mybatis.mapper.AutoSqlHelper">

    <property name="properties">                     <value>packageString=com.mindray.srm.task</value>

    </property>

</bean>

 

2、映射类

需要添加注解 table

 

package com.mindray.srm.task;

 

import java.util.Date;

import java.util.List;

 

import org.smile.commons.ann.Id;

import org.smile.commons.ann.Property;

import org.smile.commons.ann.Table;

/**

*

*@auther Java Code Marker Tool

*@date 2015-12-28 14:14:14

*/

@SuppressWarnings("serial")

@Table(tableName="t_run_job_log")

public class RunJobLog{

 

   /**ID*/

   @Id

   private  String id;

   /**任务名称*/

   @Property

   private  String name;

   /***/

   @Property(column="class_name")

   private  String className;

   /**开始时间*/

   @Property(column="start_time")

   private  Date startTime;

   /**结束时间*/

   @Property(column="end_time")

   private  Date endTime;

   /**花费时长*/

   @Property(column="use_times")

   private  Integer useTimes;

   /**执行次数*/

   @Property

   private  Integer times;

   /**执行信息*/

   @Property

   private  String infos;

   /**执行错误信息*/

   @Property

   private  String error;

   /**结果状态*/

   @Property

   private  String state;

   /***/

   @Property(column="exe_param")

   private  String exeParam;

   /**运行类型(0,定时任务 1,手动调用 )*/

   @Property(column="run_type")

   private  String runType;

 

 

 

3、接口中使用

public void batchInsertAddLog(List<RunJobLog> logs);        

 

xml 中配置就可以不写入sql语句

 

<update id="batchInsertAddLog"  parameterType="java.util.List"></update>

 

 

三、批量操作插件 

 

 

1、插件配置

spring 配置文件 中添加 

1.1 配置样例

   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="plugins">

            <list>

                   <bean class="org.smile.mybatis.batch.BatchHelper">

                    <property name="properties">

                    <value>method=batch((Update)|(Insert)|(Delete))</value>

                    </property>

                  </bean>

            </list>

    </property>

    </bean>

 

 

1.2参数说明

properties 的内容

参数名

描述

类型

必选

默认

method

要使用批量操作插件的方法前匹配

STRING

 可选

batch

 

 

 

2、插件使用方法

 必须把方法名以配置中method 的值开头  

 如:配置的值为 method=batchUpdate

 那么方法必须以batchUpdate开头 例子:

 

2.1样例

public int batchUpdatePerson(List<Person> persons);

 

<update id="batchUpdatePerson"  parameterType="java.util.List" >     

             <!--

             insert into  student(name,adress,age,id) values(#{name},#{adress},#{age}, #{id})       

         

         delete from student where age=#{age} and id=#{id}

         

         -->

         update student set name =#{name} where id=#{id} and age=#{age}

</update>

 

2.2 支持

可以支持 insert update delete 多种语句  返回更新数据条数

 

四、返回映射插件

mybatis查询返回结果可以使用在类的字段中配置映射实体类

 

1、插件配置

可以在spring中配置,就可以使用插件了

 

1.1 配置样例

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="plugins">

            <list>

             <bean class="org.smile.mybatis.query.OrmQueryHelper">

                    <property name="properties">

                    <props>

                         <prop key="packageString">

                             com.mindray.srm.task,

                             com.mindray.srm.vmi.vo,

                             com.mindray.srm.vo,

                             com.mindray.srm.dac.vo,

                             com.mindray.srm.goods.vo,

                             com.mindray.srm.rdp.vo

                         </prop>

                    </props>

                    </property>

                 </bean>

            </list>

    </property>

    </bean>

1.2 参数说明

packageString  扫描映射类的包目录

 

把使用了映射注解的类放在描述目录的包下面,然后在接口xml文件中配置返回结果类型为映射的类即可。

 

 

配置代码:

<select id="queryPageRequest"  parameterType="java.util.Map"

      resultType="com.mindray.srm.vmi.vo.TVmiPlanRequest">

      select * from t_vmi_plan_request

      where 1 =1

      <if test="matnr !=null">

         and matnr like #{matnr}

      </if>

      order by create_date desc ,matnr

</select>

 

Java代码:

 

可以是表映射也可以不是完整的表映射

 

@Table(tableName="t_vmi_plan_request")

public class TVmiPlanRequest{

 

   /**主键*/

   @Id(autoincrement=true)

   private  int id;

   /**物料编码*/

   @Property

   private  String matnr;

   /**描述规格*/

   @Property

   private  String maktx;

//省略其它属性

}

 

非一个表映射

@Mapper

public class QuotaQuery extends TVmiQuota{

   @Property(column="supplier_name")

   private String supplierName;

 

   public String getSupplierName() {

      return supplierName;

   }

 

   public void setSupplierName(String supplierName) {

      this.supplierName = supplierName;

   }

  

}

 

 

2、插件使用

2.1、样例代码

public interface IVmiRequestDao {

   

    public List<TVmiSupplierRequest> queryPageSupplierRequest(Map params);

   

    public List<TVmiPlanRequest> queryPageRequest(Map params);

}

 

xml 配置

 

<select id="queryPageSupplierRequest" parameterType="java.util.Map"

       resultType="com.mindray.srm.vmi.vo.RequestQuery">

       select r.*,v.id voucher_id,v.voucher_no,quantity,delivery_date,DELIVERY_PLAN,

       voucher_item,v.status voucher_status

       from t_vmi_supplier_request r

       left join T_VMI_VOUCHER v on r.id=v.request_id  and v.enabled=1

       where r.enabled=1

       <if test="lifnr!=null and lifnr !=''">

           and r.lifnr like #{lifnr}

       </if>

       <if test="matnr!=null and matnr !=''">

           and r.matnr like #{matnr}

       </if>

       order by publish_date desc ,matnr

    </select>

 

 

@Mapper

public class RequestQuery extends TVmiSupplierRequest {

   /**项次号*/

   @Property(column="voucher_id")

   private  String voucherId;

   /**项次号*/

   @Property(column="voucher_item")

   private  String voucherItem;

   /**交货日期*/

   @Property(column="delivery_date")

   private  String deliveryDate;

   /**数量*/

   @Property

   private  BigDecimal quantity;

   /**凭证编号*/

   @Property(column="voucher_no")

   private  String voucherNo;

    //省略其它代码

}

 

返回结果就会是映射的类的列表了

 

 

五、多插件共用

1、共用样例配置

多个插件一起配置,需要把org.smile.mybatis.query.OrmQueryHelper 映射插件放在最前面

保证在最后拦截。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <property name="plugins">

            <list>

             <bean class="org.smile.mybatis.query.OrmQueryHelper">

                    <property name="properties">

                    <props>

                         <prop key="packageString">

                             com.mindray.srm.task,

                             com.mindray.srm.vmi.vo,

                             com.mindray.srm.vo,

                             com.mindray.srm.dac.vo,

                             com.mindray.srm.goods.vo,

                             com.mindray.srm.rdp.vo

                         </prop>

                    </props>

                    </property>

                 </bean>

                 <bean class="org.smile.mybatis.mapper.AutoSqlHelper">

                 </bean>

                 <bean class="org.smile.mybatis.page.PageHelper">

                    <property name="properties">

                    <value>dialect=sqlserver2008</value>

                    </property>

                  </bean>

                  <bean class="org.smile.mybatis.batch.BatchHelper">

                    <property name="properties">

                    <value>method=batch((Update)|(Insert)|(Delete))</value>

                    </property>

                  </bean>

            </list>

    </property>

    </bean>

 

转载于:https://my.oschina.net/huzhsh/blog/1816765

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值