Java web · 2019年11月28日 0

Spring boot+mybatis+Sqlite环境配置

Spring boot+mybatis+Sqlite+mybatis-generator环境配置

有的时候 我们开发不需要一定要用到mysql、oracle等数据库,Sqlite也是我们的一种选择。

Sqlite使用场景

小型网站

SQLite适用于中小规模流量的网站.

日访问在10万以下的网站可以很好的支持,适用于读多写少的操作,如管理员在后台添加数据,其他访客多为浏览.

10万/天是一个临界值,事实上在100万的数据量之下,SQLite的表现还是可以的,在往上就不适合了.

使用它无需单独购买数据库服务,无需服务器进程,配置成本几乎为零,加上数据的导入导出都是复制文件,维护难度也几乎为零,迁移到别的服务器无需任何配置即可支持,加上其读取的速度非常快,省去了远程数据库的链接,能够极大提升网站访问速度.

嵌入式设备

SQLite适用于手机, PDA, 机顶盒, 以及其他嵌入式设备. 作为一个嵌入式数据库它也能够很好的应用于客户端程序.

因为其轻量,小巧,不怎么占用内存,数据的读写性能好,加上嵌入式设备数据量并不大,不需要频繁的维护,所以比较适合.

数据库教学

SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。

其无配置,无依赖,小巧,单一文件的特性让它的安装和使用非常简单,非常适合用来讲解SQL语句.

学生可以在很短的时候使用并操作SQLite,不受系统和商业限制等影响,学习的结果可以通过邮件或者云文件等形式发送给老师进行评分.

可以通过它快速实现一个最小化应用,适合学生快速了解SQLite,以及SQL语法,从而实现数据库的触类旁通,了解其他数据库系统的设计实现原则.

本地应用程序

其单一磁盘文件的特性,并且不支持远程连接,使其适用于本地的应用程序,如PC客户端软件.

常用的应用类型为金融分析工具、CAD 包、档案管理程序等等. (手机上的通讯录也是用此开发的)

没有远程,意味着适用于内部或者临时的数据库,用来处理一些数据,让程序更加灵活.

不适用场景

很明显其适合小型网站,相对的就不适合高流量网站.,也不适合超大的数据集,在其缺点也提到,不适合高并发访问.

POM.xm配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zdltech.test</groupId>
    <artifactId>sqlitetest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sqlitetest</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.28.0</version>
        </dependency>
        <!-- druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.14</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
            </plugin>
        </plugins>
    </build>

</project>

application.properties配置

server.port=19999
server.servlet.context-path=/sqlite

# thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.prefix=classpath:templates/
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5

# Sqlite数据库配置
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite:./sqlite_db.db
spring.datasource.username=
spring.datasource.password=

# H2数据库配置
# spring.datasource.driver-class-name=org.h2.Driver
#spring.datasource.url=jdbc:h2:file:/Users/jason/Desktop/DemoWorkspace/sqlitetest/zdl
#spring.datasource.username=sa
#spring.datasource.password=

spring.h2.console.path=/h2-consle
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true



spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.tomcat.validation-query=select 1

spring.datasource.tomcat.initial-size=1
spring.datasource.tomcat.min-idle=3
spring.datasource.tomcat.max-active=20


# 配置mapper文件路径
mybatis.mapper-locations=classpath:mapper/**/*.xml

generatorConfig.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">

<!-- classPath:数据库的JDBC驱动-->
<generatorConfiguration>
   <classPathEntry
            location="/Users/jason/.m2/repository/org/xerial/sqlite-jdbc/3.28.0/sqlite-jdbc-3.28.0.jar"/>

    <!-- <classPathEntry-->
            <!-- location="/Users/jason/.m2/repository/com/h2database/h2/1.4.200/h2-1.4.200.jar"/>-->

    <context id="default" targetRuntime="MyBatis3">

        <commentGenerator>

            <property name="suppressDate" value="false"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

       <jdbcConnection driverClass="org.sqlite.JDBC"-->
                        <!--connectionURL="jdbc:sqlite:./sqlite_db.db"-->
                        <!--userId=""-->
                        <!--password=""/>

         <!--<jdbcConnection driverClass="org.h2.Driver"
                        connectionURL="jdbc:h2:file:/Users/jason/Desktop/DemoWorkspace/sqlitetest/zdl"
                        userId="sa"
                        password=""/>-->
        <!--Java Entity生成器 -->
        <javaModelGenerator targetPackage="com.zdltech.test.sqlitetest.entity"
                            targetProject="./src/main/java">
            <!-- TODO enableSubPackages:是否让schema作为包的后缀-->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--map xml生成器 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- dao生成器-->
        <javaClientGenerator targetPackage="com.zdltech.test.sqlitetest.dao"
                             targetProject="./src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>



        <!-- 数据表与Bean的映射 -->
        <table tableName="tb_user"  domainObjectName="UserEntityMap" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false" >
            <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
            <property name="useActualColumnNames" value="true"/>
        </table>

    </context>
</generatorConfiguration>

测试Controller 是否正常连接数据库

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@Controller
@RequestMapping("/index")
public class IndexController {

    @Autowired
    DataSource dataSource;
    /**
     *
     * @return
     */
    @ResponseBody
    @RequestMapping("index")
    public String index(){
        try {
            Connection conn = dataSource.getConnection();
            System.out.println("*************************");
            System.out.println(conn);
            DruidDataSource dss = (DruidDataSource) dataSource;
            System.out.println(dss.getName());
            System.out.println(dss.getValidationQuery());
            System.out.println(dss.getTimeBetweenEvictionRunsMillis());
            System.out.println(dss.getMinEvictableIdleTimeMillis());
            System.out.println(dataSource.getClass().getName());
            System.out.println(dss);
            System.out.println("**************************");
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return "index is run";
    }
}

Share this: