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                  }     ]    });}
前端的东西不熟,所以止贴代码就没了。
原创粉丝点击