Spring_mybatis_Oracle集成
来源:互联网 发布:中国人工智能公司排名 编辑:程序博客网 时间:2024/05/17 23:58
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;@Servicepublic 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 } ] });}
前端的东西不熟,所以止贴代码就没了。
阅读全文
0 0
- Spring_mybatis_Oracle集成
- 集成
- 集成
- 集成sql 语句集成
- 持续集成
- 废话集成
- 持续集成
- 持续集成
- 持续集成
- 集成测试
- 集成测试
- 持续集成
- 集成测试
- 持续集成
- struts_spring_hibernate集成
- springhibernatejsf集成
- 持续集成
- 持续集成
- C语言书籍资料汇总
- E-Beautiful Numbers (对每一位求模)
- Android错误总结
- sql server导入导出方法
- Note Of Mongo
- Spring_mybatis_Oracle集成
- 欢迎使用CSDN-markdown编辑器
- Linux 下Redis集群安装部署及使用详解
- Android 8.0 新特性
- alv
- Hibernate版本问题报错:org.hibernate.MappingException: Unknown entity
- 微信开发
- 双指针快速排序
- android studio 格式化代码时注解不换行