MyBatis Plus是MyBatis功能增强ORM框架,完全兼容MyBatis,优点是编程简化,提供一些预定义的方法,可以直接使用;缺点是每一实体类都需要提供一套Mapper,Service,多表关联操作还需要使用Mybatis。
编程步骤如下:
一,修改POM依赖
去掉Mybatis依赖,添加Mybatis-plus依赖
<!--
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.5</version>
</dependency>
二、修改SpringBoot配置文件
添加Mybatis-plus的配置
#Mybatis实体类配置
#mybatis.mapper-locations=classpath:mapper/*.xml
#MybatisPlus实体类配置
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
三、定义SQL
create table gf_expense(id varchar(32),
name varchar(100),
company varchar(100),
bank varchar(100),
bankaccount varchar(100),
amount decimal(10,2),
userId varchar(100)
);
四、定义实体类ExpenseInfo
注意需要使用注解表明对应的数据库表名,主键字段,非数据库字段
package com.gf.model;
import java.io.Serializable;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
@TableName("gf_expense")
public class ExpenseInfo implements Serializable{
@TableId
private String id = null;
private String name = null;
private String company = null;
private String bank = null;
private String bankAccount = null;
private BigDecimal amount = null;
private String userId = null;
@TableField(exist=false)
private String userName = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getBank() {
return bank;
}
public void setBank(String bank) {
this.bank = bank;
}
public String getBankAccount() {
return bankAccount;
}
public void setBankAccount(String bankAccount) {
this.bankAccount = bankAccount;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
五、Mapper.xml
定义一个空的Mapper.xml,如果需要自定义数据库操作或多表关联查询,可以向Mybatis那样定义方法,如果不定义任何方法,Mybatis-plus提供默认操作单表的所有方法。
<?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.gf.mapper.ExpenseMapper">
</mapper>
六、定义Mapper接口
package com.gf.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.gf.model.ExpenseInfo;
@Mapper
public interface ExpenseMapper extends BaseMapper<ExpenseInfo>{
}
七、定义服务接口
package com.gf.service;
import com.baomidou.mybatisplus.service.IService;
import com.gf.model.ExpenseInfo;
public interface ExpenseService extends IService<ExpenseInfo>{
}
八、定义服务实现类
package com.gf.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.gf.mapper.ExpenseMapper;
import com.gf.model.ExpenseInfo;
import com.gf.service.ExpenseService;
@Service
public class ExpenseServiceImpl extends ServiceImpl<ExpenseMapper,ExpenseInfo>
implements ExpenseService
{
}
九、测试数据库操作
package com.gf;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.gf.model.ExpenseInfo;
import com.gf.model.FunctionInfo;
import com.gf.service.ExpenseService;
import com.gf.service.FunctionService;
import com.gf.statusflow.IOrg;
import com.gf.statusflow.IOrgModel;
import com.gf.statusflow.StatusFlowMng;
import com.gf.statusflow.StatusFlowWAPI;
import com.gf.statusflow.StatusMsg;
import com.gf.statusflow.UUID;
import com.gf.statusflow.def.DefWorkItem;
@RunWith(SpringRunner.class)
@SpringBootTest(classes=Starter.class)
public class Tester
{
@Autowired
private StatusFlowWAPI wapi;
@Autowired
private IOrgModel orgmodel;
@Autowired
private StatusFlowMng sfmng;
@Autowired
private ExpenseService exps;
@Test
public void testMethod()
{
try
{
ExpenseInfo eps = new ExpenseInfo();
eps.setId(UUID.create("exps"));
eps.setName("Test");
eps.setBank("Bank");
eps.setBankAccount("0000");
eps.setUserId("1");
eps.setCompany("Hk");
eps.setAmount(new BigDecimal(1.22));
exps.insert(eps);
Wrapper<ExpenseInfo> wrap = new EntityWrapper<ExpenseInfo>();
wrap.eq("bank","Bank").and("userid", "1");
List<ExpenseInfo> lst = exps.selectList(wrap);
for(ExpenseInfo ei:lst)
{
System.out.println("id==="+ei.getId());
System.out.println("name==="+ei.getName());
System.out.println("bank==="+ei.getBank());
System.out.println("bankAccount==="+ei.getBankAccount());
System.out.println("userId==="+ei.getUserId());
}
/**
IOrg org = orgmodel.getOrgById("1");
System.out.println("org="+org);
String defProcessId = "testwf";//工作流模板名称
String startUserId = "1";//流程实例启动用户
userId = "1";//操作工作流实例当前用户
String instanceId = "order1";//业务模块ID
String type = "请假单";//流程类型,通常取流程模板名称
String title = "UserA的请假单";//流程实例标题
nexttask = "account";//下一办理环节
String url = "/holidayapply?id="+instanceId;//业务模块应用链接
hmap = new HashMap();//工作流实例相关数据
hmap.put("days", 5);
String flag = "gf";//区分客户标识,每一个用户分配统一的标识
String testMode = "no";//是否进入测试模式
//wapi.startWorkflow(defProcessId, startUserId, userId, instanceId, type, title, nexttask, url, hmap, flag, testMode);
nexttask = "draft";
String instProcessId = "proc5bfe5bb88e25";//流程实例ID
String instActivityId = "acti5bfea9d88e25";//流程Activity实例ID
instWorkitemId= "work5bfea9d98e25";//待办件实例ID
List<String> userIdLst = new ArrayList<String>();
userIdLst.add("2");//下一办理人
//wapi.submitWorkflow(instProcessId, instActivityId, instWorkitemId, userIdLst, instanceId, type, title, nexttask, url, hmap, flag, testMode);
//获取某用户办结件列表
List lst = wapi.getWorkitemList("2", testMode);
System.out.println("list="+lst);
for(Iterator it=lst.iterator();it.hasNext();)
{
DefWorkItem dwi = (DefWorkItem)it.next();
System.out.println("instProcessId="+dwi.getInstProcessId());
System.out.println("instActivityId="+dwi.getInstActivityId());
System.out.println("instWorkitem="+dwi.getId());
System.out.println("title="+dwi.getTitle());
System.out.println("url="+dwi.getUrl());
}
*/
}
catch(Exception e)
{
e.printStackTrace();
}
}
}