MyBatis_Generator_Eclipse 插件安装使用
下载安装
1、下载MyBatis_Generator_Eclipse_1.3.1。
2、解压压缩文件,将features中的jar包复制到eclipse的features中,将plugins中的jar包复制到eclipse中plugins中
3、重启eclipse
生成代码
新建generatorConfig.xml文件
和pom.xml放在同一层
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration >
<!-- location的值为本地数据库驱动 -->
<classPathEntry location="F:/oracle11g/ojdbc6.jar"
/>
<context id="context1" >
<!-- jdbc:oracle:thin:@Oracle服务的地址:开放的接口:服务名
userId="用户名" password="密码" -->
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:Orcl"
userId="root" password="root" />
<!-- bean类的地址 -->
<javaModelGenerator targetPackage="com.trade.bean" targetProject="trade/src/main/java"
/>
<!-- mapper.xml的地址 -->
<sqlMapGenerator targetPackage="sql.oracle.trade" targetProject="trade/src/main/resources"
/>
<!-- mapper接口的地址 -->
<javaClientGenerator targetPackage="com.trade.dao" targetProject="trade/src/main/java"
type="XMLMAPPER" />
<!-- 对应的表 -->
<table schema="Student" tableName="TMP_CHENKAIXIN_20171031"></table>
</context>
</generatorConfiguration>
写好上述文件后,在目录中右键generatorConfig.xml文件出现下图
generator
选择”Generate MyBatis/iBATIS Artifact”
example类中方法简单介绍
package com.miracle.trade.bean;
import java.util.ArrayList;
import java.util.List;
public class TmpChenkaixin20171031Example {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public TmpChenkaixin20171031Example() {
oredCriteria = new ArrayList<Criteria>();
}
/**
* 添加升序条件 String为"DESC"或"ESC"
*/
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
/**
* 去重,false为去重,true为不去重
*/
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
/**
* andXXXNull,添加XXX为null
*/
public Criteria andIdIsNull() {
addCriterion("ID is null");
return (Criteria) this;
}
/**
* andXXXNotNull,添加XXX不为null
*/
public Criteria andIdIsNotNull() {
addCriterion("ID is not null");
return (Criteria) this;
}
/**
* 以下同类型的止留一个做例子
*/
/**
* andXXXEqualTo,where语句 判断XXX字段等于value
* @param value:判断条件
* @return 符合条件的对象
*/
public Criteria andIdEqualTo(Integer value) {
addCriterion("ID =", value, "id");
return (Criteria) this;
}
/**
* andIdGreater/lessThan 等于where</<=/>/>=
*/
public Criteria andIdGreaterThan(Integer value) {
addCriterion("ID >", value, "id");
return (Criteria) this;
}
/**
* where id in{select id ......}
*/
public Criteria andIdIn(List<Integer> values) {
addCriterion("ID in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<Integer> values) {
addCriterion("ID not in", values, "id");
return (Criteria) this;
}
/**
* where id between value1 and value2
*/
public Criteria andIdBetween(Integer value1, Integer value2) {
addCriterion("ID between", value1, value2, "id");
return (Criteria) this;
}
/**
* 后面的是对其他列进行以上操作,为了不占地方,所以删掉了
*/
}
}
/**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table B2B_TBTC.TMP_CHENKAIXIN_20171031
*
* @mbggenerated do_not_delete_during_merge Wed Nov 01 09:41:53 CST 2017
*/
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
/**
* 后面两个内部类始终没读懂,留着希望大大们给点解释
* @mbggenerated Wed Nov 01 09:41:53 CST 2017
*/
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}
mapper接口中的方法介绍
package com.miracle.trade.dao;
import com.miracle.trade.bean.TmpChenkaixin20171031;
import com.miracle.trade.bean.TmpChenkaixin20171031Example;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface TmpChenkaixin20171031Mapper {
/**
* 按条件计数,条件为example初始化时添加的条件
*/
int countByExample(TmpChenkaixin20171031Example example);
int deleteByExample(TmpChenkaixin20171031Example example);
/**
* 按主键删除
*/
int deleteByPrimaryKey(Integer id);
/**
* 插入数据,返回值为ID
*/
int insert(TmpChenkaixin20171031 record);
/**
* 如果某些值为null,则不插入那些null值对应的列
* 也就是会过滤,
* 这个方法很常用
*/
int insertSelective(TmpChenkaixin20171031 record);
/**
* 按条件查询
*/
List<TmpChenkaixin20171031> selectByExample(TmpChenkaixin20171031Example example);
/**
* 根据主键查询
*/
TmpChenkaixin20171031 selectByPrimaryKey(Integer id);
/**
* 按条件更新传入值不为null的字段
*/
int updateByExampleSelective(@Param("record") TmpChenkaixin20171031 record, @Param("example") TmpChenkaixin20171031Example example);
/**
* 根据条件更新
*/
int updateByExample(@Param("record") TmpChenkaixin20171031 record, @Param("example") TmpChenkaixin20171031Example example);
/**
* 按主键更新传入值值不为null字段
*/
int updateByPrimaryKeySelective(TmpChenkaixin20171031 record);
/**
* 按主键更新
*/
int updateByPrimaryKey(TmpChenkaixin20171031 record);
}
分页的Mapper.xml及mapper接口
mapper.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.trade.dao.TmpCKX20171031PagMapper" >
<!-- 对应bean文件 -->
<resultMap id="BaseResultMap" type="com.rade.bean.TmpChenkaixin20171031" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Wed Nov 01 09:41:53 CST 2017.
-->
<id column="ID" property="id" jdbcType="DECIMAL" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="AGE" property="age" jdbcType="DECIMAL" />
</resultMap>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="java.util.Map">
<!--这是分页的判断,如果分页则添加这据SQL-->
<if test="pagination != null" >
select * from ( select row_.*, rownum rownum_ from (
</if>
<!--这是普通的select语句-->
select * from TMP_CHENKAIXIN_20171031 WHERE ID BETWEEN #{idStart} and #{idEnd}
<!-- 如果分页则加上这句SQL -->
<if test="pagination != null" >
<![CDATA[ ) row_ ) where rownum_ > #{pageBegin,jdbcType=DECIMAL} and rownum_ <= #{pageEnd,jdbcType=DECIMAL} ]]>
</if>
</select>
</mapper>
分页mapper接口
package com.miracle.trade.dao;
import java.util.List;
import java.util.Map;
import com.miracle.trade.bean.TmpChenkaixin20171031;
public interface TmpCKX20171031PagMapper {
List<TmpChenkaixin20171031> selectByExample(Map map);
}
使用Spring创建Service and controller
在pom.xml中配置Spring_mybatis集成的相关依赖。
Service接口
import java.util.Map;
public interface TmpChenkaixin20171031Svc {
public Map getCKX(Integer begin,Integer end,Integer pageNum,Integer pageSize);
}
Service实现类
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.trade.bean.TmpChenkaixin20171031;
import com.trade.bean.TmpChenkaixin20171031Example;
import com.trade.dao.TmpCKX20171031PagMapper;
/**
* 如果不分页应使用这个mapper注入
*/
import com.trade.dao.TmpChenkaixin20171031Mapper;
import com.wsserver.tem.controller.TmpChenkaixin20171031Controller;
import com.wsserver.tem.service.TmpChenkaixin20171031Svc;
@Service
public class TmpChenkaixin20171031SvcImpl implements TmpChenkaixin20171031Svc {
private static Logger log = Logger.getLogger(TmpChenkaixin20171031Controller.class);
/**
* 使用Autowired注解注入Mapper
*/
@Autowired
private TmpCKX20171031PagMapper TCkxMapper;
@Override
public Map getCKX(Integer begin,Integer end,Integer pageNum,Integer pageSize) {
if(begin>=end){
log.error("begin必须小于end");
throw new RuntimeException();
}
TmpChenkaixin20171031Example example = new TmpChenkaixin20171031Example();
//WHERE ID BETWEEN #{BEGIN} AND #{END};
example.createCriteria().andIdBetween(begin, end);
Map<String,Object> parameter = new HashMap<>();
/**
* 这一段时为了分页做的参数传入
*/
parameter.put("pagination", true);
parameter.put("pageBegin",pageNum);
parameter.put("pageEnd",pageSize+pageNum);
parameter.put("idStart", begin);
parameter.put("idEnd", end);
log.error("pageBegin:"+pageNum);
log.error("xml参数:"+parameter);
List<TmpChenkaixin20171031> lists = TCkxMapper.selectByExample(parameter );
/**
* 不分页则用这个返回结果集
* List<TmpChenkaixin20171031> lists = TCkxMapper.selectByExample(example);
*/
Map<String,Object> map = new HashMap<>();
int total = (end - begin) + 1;
map.put("rows", lists);
map.put("total", total);
return map;
}
}
Controller
package com.miracle.wsserver.tem.controller;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.miracle.controller.BaseController;
import com.miracle.wsserver.tem.service.TmpChenkaixin20171031Svc;
@Controller
@RequestMapping("/temC")// "/temc"是js,ajax中的地址
public class TmpChenkaixin20171031Controller extends BaseController{
@Autowired
private TmpChenkaixin20171031Svc temCSvc;
private int idStart = 0;
private int idEnd = 0;
private static Logger log = Logger.getLogger(TmpChenkaixin20171031Controller.class);
@RequestMapping("/searchC") //"/searchC"也是填在ajax里的地址
public void queryTmpC(HttpServletRequest request,HttpServletResponse response){
String sIdStart = request.getParameter("idStart");
String sIdEnd = request.getParameter("idEnd");
String sPageNum = request.getParameter("pageNumber");
String sPageSize = request.getParameter("pageSize");
log.error("S起始id"+sIdStart);
log.error("S结束id"+sIdEnd);
log.error("S页码"+sPageNum);
log.error("S表格大小"+sPageSize);
if(sIdStart!=null && sIdEnd!=null){
this.idStart = Integer.parseInt(sIdStart);
this.idEnd = Integer.parseInt(sIdEnd);
}
int pageNum = Integer.parseInt(sPageNum);
int pageSize = Integer.parseInt(sPageSize);
log.error("起始id"+idStart);
log.error("结束id"+idEnd);
log.error("页码"+pageNum);
log.error("表格大小"+pageSize);
Map map = temCSvc.getCKX(this.idStart,this.idEnd,pageNum,pageSize);
log.debug("结果集:"+map);
log.error("到达controller");
returnJson(response,map);
}
}
前端jsp以及js页面
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>临时</title>
<!-- start: CSS -->
<link href="${pageContext.request.contextPath }/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<link href="${pageContext.request.contextPath }/css/bootstrap-table.css" rel="stylesheet">
<link href="${pageContext.request.contextPath }/css/bootstrap-select.css" rel="stylesheet">
<style type="text/css">
.upimeiLogisticsInfo{margin-top: -48px;}
.icon-ok {background-position: -286px 0;}
</style>
<!-- end: CSS -->
</head>
<body>
<!-- 菜单导航 -->
<ul class="breadcrumb">
<li>
<i class="icon-home"></i>
<a href="#">查询</a>
<i class="icon-angle-right"></i>
</li>
<li><a href="#">接口日志查看</a></li>
<li></li>
</ul>
<!-- start: Web -->
<div class=" row-fluid sortable ui-sortable legend pl15">
<div class="clearfix">
<div class="control-group w400 fl" style="margin:0;">
<label for="idStart" class="control-label ftz14 w110 tr mt5 fl">ID起始:</label>
<input type="text" class="input" id="idStart" placeholder="ID起始">
</div>
<div class="control-group w410 fl">
<label for="idEnd" class="control-label ftz14 w110 tr mt5 fl">ID结束:</label>
<input type="text" class="input" id="idEnd" placeholder="ID结束">
</div>
</div>
<div class="clearfix">
<div class="control-group w400 fl" style="margin:0;">
<input type="button" id="qryLog" class="btn btn-primary fl ml30" value="查询" onclick="selectAll()"/>
</div>
</div>
<!-- Datagrid Start -->
<div class="row-fluid sortable fl mt15">
<div class="box span12" style="border-left:0;border-right:0;border-bottom:0;">
<div class="box-content" style="margin:0;">
<table class="table table-striped table-bordered bootstrap-datatable datatable " id="provLogList" data-pagination="true">
</table>
</div>
</div>
</div>
<!-- Datagrid End -->
<!-- Modal -->
<div class="modal hide fade" id="myModal" tabindex="-1" role="dialog">
<div class="modal-header"><button class="close" type="button" data-dismiss="modal">×</button>
<h3 id="myModalLabel">串码同步信息</h3>
</div>
<div class="modal-body">
<div class="row-fluid sortable fl mt15">
<div class="box span12" style="border-left:0;border-right:0;border-bottom:0;">
<div class="box-content" style="margin:0;">
<table class="table table-striped table-bordered bootstrap-datatable datatable " id="imeiInfoLogList" data-pagination="true">
</table>
</div>
</div>
</div>
</div>
</div>
<div class="zhezhao hide" id="zhezhao"><s></s></div>
</div>
<!-- end: Web-->
<!-- start: JavaScript -->
<script src="${pageContext.request.contextPath }/js/jquery-1.9.1.min.js"></script>
<script src="${pageContext.request.contextPath }/js/jquery.bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap-table.min.js"></script>
<script src="${pageContext.request.contextPath }/js/locales/bootstrap-table-zh-CN.min.js"></script>
<!-- 中文日期选择Locales -->
<script src="${pageContext.request.contextPath }/js/bootstrap-select.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap-paginator.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap-datetimepicker.js"></script>
<script src="${pageContext.request.contextPath }/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
<script src="${pageContext.request.contextPath }/js/utils/StringUtils.js"></script>
<script src="${pageContext.request.contextPath }/js/utils/DateUtils.js"></script>
<script src="${pageContext.request.contextPath }/pages/tem/js/temC.js"></script>
<!-- end: JavaScript-->
<script type="text/javascript">
var rootPath='<%=request.getContextPath()%>';
</script>
</body>
</html>
js
$(function(){
//初始化下拉列表
//initProvInfList();
//初始化下拉复选框样式
$('.selectpicker').selectpicker();
//初始化时间样式
$('.form_date').datetimepicker({
language: 'zh-CN',
weekStart: 1,
todayBtn: 1,
autoclose: 1,
todayHighlight: 1,
startView: 2,
minView: 2,
forceParse: 0,
format: "yyyy-mm-dd" /*控制显示格式*/
});
//初始化时间值
initDatePick();
//初始化表格
initTable();
//初始化内嵌表格(串码详情)
initImeiTable();
});
/*
* Datagrid查询参数
*
*/
function queryLogParams(params){
var infCodes = $("#infCode").val();
var infCode = '';
if(infCodes == null){
infCode = '99';
}else{
infCode = JSON.stringify(infCodes);
}
var mchtType = $("#mchtType").val();
var syncFlags = $("#syncFlag").val();
var syncFlag = '';
if(syncFlags == null){
syncFlag = '99';
}else{
syncFlag = JSON.stringify(syncFlags);
}
var itemInstCode = $.trim($("#itemInstCode").val());
var itemSyncFlags = $("#itemSyncFlag").val();
var itemSyncFlag = '';
if(itemSyncFlags == null){
itemSyncFlag = '99';
}else{
itemSyncFlag = JSON.stringify(itemSyncFlags);
}
var b2bKey = $.trim($("#b2bKey").val());
var startDate = $("#logStartDate").val();
var endDate = $("#logEndDate").val();
var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
pageSize: params.limit, //页面大小
pageNumber: params.offset, //页码
infCode:infCode, //接口类型
mchtType:mchtType, //商家类型
syncFlag:syncFlag, //订单同步标志
itemInstCode:itemInstCode, //串码编号
itemSyncFlag:itemSyncFlag, //串码同步标志
b2bKey:b2bKey, //同步标志
startDate:startDate, //开始时间
endDate:endDate //结束时间
};
return temp;
};
/*
* 根据条件查询接口日志
*
*/
function selectAll(){
//增加查询遮罩
$('#zhezhao').removeClass('hide');
//解决翻页问题,先销毁再重建
$("#provLogList").bootstrapTable('destroy');
initTable();
var idStart = $.trim($("#idStart").val());
var idEnd = $.trim($("#idEnd").val());
$.ajax({
url:rootPath+"/temC/searchC",
data:{
idStart:idStart,
idEnd:idEnd,
pageSize: 20, //页面大小
pageNumber: 0 //页码
},
type:"get",
async : true,
dataType: "json",
success: function( data ) {
$('#provLogList').bootstrapTable("load",data);
$('#zhezhao').addClass('hide');
},
error: function( data ) {
$.messager.alert(data);
$('#zhezhao').addClass('hide');
}
});
}
function initTable(){
//初始化数据展示列表
$('#provLogList').bootstrapTable({
method:"get",
cache:false,
url:rootPath+"/temC/searchC",
dataType: "json",
pagination: true, //分页
pageList: [10,20],
pageSize: 20,
pageNumber: 1,
queryParams:queryLogParams,//查询参数
showColumns: true,
showRefresh: false,
search: false, //显示搜索框
sidePagination: "server", //服务端处理分页
clickToSelect: false,
smartDisplay:true,
columns: [
{
title: '编号',
field: 'id',
align: 'center',
valign: 'middle',
sortable: false
},
{
title: '姓名',
field: 'name',
align: 'center',
valign: 'middle',
sortable: false
},
{
title: '年龄',
field: 'age',
align: 'center',
valign: 'middle',
sortable: false
}
]
});
}