一、分页插件
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*/
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>