springboot访问Access数据库

本系统主要实现了springboot对Access数据库的查询

主要技术

  • springboot
  • JDK1.6
  • Mybatis
  • Access数据库分页模糊查询
  • Layui开源框架的前端Table页面分页及查询

关键代码介绍

application.yml

spring:
 datasource:
   driver-class-name: sun.jdbc.odbc.JdbcOdbcDriver
   url: jdbc:odbc:land
   tomcat:
     connection-properties: charSet=gbk
 main:
   banner-mode: off
mybatis:
 mapper-locations: classpath:mapper/*.xml
  1. 对Access数据库采用的是odbc方式的连接,这样应该也只适应于windows系统
  2. 关键代码是connection-properties: charSet=gbk这里使用的是springboot自带的连接池也就是tomcat7以后带的连接池,其他的连接池也应当有此方法,这个编码不写的话 查询都是乱码无法进行
    普通的JDBC代码如下
Properties prop = new Properties();
prop.put("charSet", "gb2312"); // 这里是解决中文乱码
prop.put("user", "");
prop.put("password", "");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(url,prop);

POM.xml

这里给出主要的代码

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.6</java.version>
        <tomcat.version>7.0.59</tomcat.version>
        <jackson.version>2.6.0</jackson.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- log4j. -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>

        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>javax.transaction</groupId>
                    <artifactId>javax.transaction-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        &lt;!&ndash; https://mvnrepository.com/artifact/org.jboss.spec.javax.transaction/jboss-transaction-api_1.2_spec &ndash;&gt;
        <dependency>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            <version>1.0.0.Final</version>
        </dependency>-->

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>


        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-juli</artifactId>
            <version>${tomcat.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

1.使得springboot支持JDK1.6有点费事,下边给出主要方法,在上边的代码中均有体现

    1. 修改Tomcat和JDK的值
<properties>
<tomcat.version>7.0.59</tomcat.version>
<java.version>1.6</java.version>
</properties>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
  • 2.修改Jackson的版本
    由于默认的Jackson是2.7版本需要在JDK1.7下运行,需要修改为1.6
    <jackson.version>2.6.0</jackson.version>
  • 3.事务
    虽然JTA(Java Transaction API)事务本身不需要JDK7,但是官方的API Jar包包含在JDK1.7基础上编译的文件。如果你使用了JTA,你需要将官方的JTA 1.2 API jar 替换成可以在JDK1.6上运行的,例如用
    依赖于org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final去代替javax.transaction:javax.transaction-api

分页主要代码

 <sql id="wheresql">
        <where>
            <if test="certno!=null and certno!=''">
                [证号] LIKE '%'+#{certno}+'%'
            </if>
            <if test="landno!=null and landno!=''">
                AND [地号] LIKE '%'+#{landno}+'%'
            </if>
            <if test="landowner!=null and landowner!=''">
                AND [土地使用者] LIKE '%'+#{landowner}+'%'
            </if>
        </where>
    </sql>

    <select id="getLandCertNoListByCertNoNameLandNo" resultMap="LandCertNomapper"
            parameterType="com.marry.wucheng.collectionland.model.RequestItem">
        SELECT * FROM 集体土地证号
        WHERE [ID]
        BETWEEN
        (SELECT max([ID]) from(
        SELECT top ${miniSize} [ID] from 集体土地证号
        <include refid="wheresql"></include>
        ORDER BY [ID]
        )
        )
        AND
        (SELECT max([ID]) FROM (
        SELECT top ${maxSize} [ID] from 集体土地证号
        <include refid="wheresql"></include>
        ORDER BY [ID]
        ))
        <if test="certno!=null and certno!=''">
           AND [证号] LIKE '%'+#{certno}+'%'
        </if>
        <if test="landno!=null and landno!=''">
            AND [地号] LIKE '%'+#{landno}+'%'
        </if>
        <if test="landowner!=null and landowner!=''">
            AND [土地使用者] LIKE '%'+#{landowner}+'%'
        </if>

        ORDER BY [ID]


    </select>

    <select id="getcountLandCertNoListByCertNoNameLandNo" resultType="java.lang.Integer"
            parameterType="com.marry.wucheng.collectionland.model.RequestItem">
        SELECT count(*) FROM 集体土地证号
        <where>

            <if test="certno!=null and certno!=''">
               [证号] LIKE '%'+#{certno}+'%'
            </if>
            <if test="landno!=null and landno!=''">
                AND [地号] LIKE '%'+#{landno}+'%'
            </if>
            <if test="landowner!=null and landowner!=''">
                AND [土地使用者] LIKE '%'+#{landowner}+'%'
            </if>
        </where>



    </select>

其实这个分页写的有点投机取巧,因为有一个数字类型的自增,用了 between and方法很是方便,需要注意的是三处的条件、排序均需完全相同

前端页面设计

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="layui/css/layui.css">
</head>

<style>
    .layui-container {
        margin-top: 80px;
    }
</style>
<body>

<div class="layui-container">
    <div class="landTable">
        使用者:
        <div class="layui-inline">
            <input class="layui-input" name="landowner" id="landowner" autocomplete="off">
        </div>
        证号:
        <div class="layui-inline">
            <input class="layui-input" name="certno" id="certno" autocomplete="off">
        </div>
        <button class="layui-btn" data-type="reload">搜索</button>
    </div>
    <table class="layui-hide" id="certlist"></table>
</div>


<script src="layui/layui.js"></script>


<script>

    layui.use('table', function () {
        var table = layui.table;

        table.render({
            elem: '#certlist'
            , url: 'getLandCertNo'
            , cols: [[
                {field: 'id', width: 80, title: 'ID', sort: true}
                , {field: 'landno', width: 120, title: '地号'}
                , {field: 'landowner', width: 100, title: '土地使用者'}
                , {field: 'certno', width: 80, title: '证号'}
                , {field: 'area', title: '面积', minWidth: 80}
                , {field: 'location', width: 200, title: '坐落'}
                , {field: 'overarea', width: 80, title: '超占面积'}
                , {field: 'registerdate', width: 200, title: '发证日期'}
                , {field: 'plause', width: 80, title: '用途'}
                , {field: 'agent', width: 80, title: '经办人'}
                , {field: 'otype', width: 80, title: '权属类型'}
                , {field: 'memo', width: 200, title: '备注'}
                , {field: 'marker', width: 100, title: '记号'}
                , {field: 'verifier', width: 80, title: '审核人'}
            ]]
            , page: true
            , id: 'landload'
        });

        var $ = layui.$, active = {

            reload: function () {

                table.reload('landload', {
                    page: {
                        curr: 1
                    }
                    , where: {
                        landowner: $('#landowner').val().trim()
                        , certno: $('#certno').val().trim()

                    }
                })

            }


        };

        $('.landTable .layui-btn').on('click',function () {
            var type=$(this).data('type');

            active[type] ?active[type].call(this) :'';
        })

    })
</script>


</body>
</html>

主要方法 layui 官网均有,这里的参数是封装成对象的

package com.marry.wucheng.collectionland.model;

import lombok.ToString;

/**
 * @author ml
 * @create 2018-01-15--13:50
 */

@ToString
public class RequestItem {

    private String certno;

    private String landno;

    private String landowner;

    private Integer page=1;

    private Integer limit=10;

    private Integer miniSize;

    private Integer maxSize;

    public String getCertno() {
        return certno;
    }

    public void setCertno(String certno) {
        this.certno = certno;
    }

    public String getLandno() {
        return landno;
    }

    public void setLandno(String landno) {
        this.landno = landno;
    }

    public String getLandowner() {
        return landowner;
    }

    public void setLandowner(String landowner) {
        this.landowner = landowner;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Integer getLimit() {
        return limit;
    }

    public void setLimit(Integer limit) {
        this.limit = limit;
    }

    public Integer getMiniSize() {
        return (page-1)*limit+1;
    }

    public void setMiniSize(Integer miniSize) {
        this.miniSize = miniSize;
    }

    public Integer getMaxSize() {
        return (page*limit);
    }

    public void setMaxSize(Integer maxSize) {
        this.maxSize = maxSize;
    }
}

也给出 controller

 @RequestMapping("/getLandCertNo")
    public Map<String, Object> getLandCertNo(RequestItem item){
        System.out.println("item = [" + item + "]");

        Map<String,Object> map=new HashMap<String, Object>(4);


        List<LandCertNo> landCertNoList=landCertNoMapper.getLandCertNoListByCertNoNameLandNo(item);
        Integer count=landCertNoMapper.getcountLandCertNoListByCertNoNameLandNo(item);

        Integer pages=(count/item.getLimit()+(count%item.getLimit()==0?0:1));

        map.put("code",0);
        map.put("msg","");
        map.put("count",count);
        map.put("data",landCertNoList);

        return map;
    }

码云地址:https://gitee.com/Jicklin/collectionland.git

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,744评论 6 342
  • 要加“m”说明是MB,否则就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505阅读 4,806评论 0 53
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,789评论 0 11
  • 长辈说高考是人生的转折点,然后我们拼尽全力去高考,父母说结婚生子是女人一辈子最重要的事业,然后我们按照他们的意愿喜...
    阿狸姑娘阅读 752评论 0 2