Spring Boot操做Sqlite數據庫 從入門到跑路

[TOC]html

準備工做

1. 安裝Java 1.8 SDK

因爲框架以及一些兼容性問題,咱們採用你們通用的 JAVA 1.8 sdk。前端

下載地址: http://www.oracle.com/technet...java

安裝完成以後須要設置環境變量。
imagegit

設置完成以後,驗證系統是否能夠正常運行JAVA
imagegithub

2. 安裝IntelliJ IDEA

這個就不簡述了,你們自由發揮。可是推薦入正版。web

3. 安裝Maven

下載地址: https://maven.apache.org/down...spring

下載以後解壓到文件夾,而後與Java sdk同樣配置一個環境變量。
驗證命令sql

> mvn -v

Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:1
4+08:00)
Maven home: D:\JAVA_TOOLS\apache-maven-3.5.4\bin\..
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: E:\Java\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

初始化項目

打開IDEA,而後新建項目。在左側選擇Spring Initializr,右側SDK選擇1.8。
img
點擊Next進入下一個界面。
img
在這個界面上,能夠按照本身的發揮編寫點東西。可是做爲新手建議不作任何修改,接着Next
img
這個界面上,要選擇 1. WEB -> WEB 2. SQL -> MyBatis 。 點擊Next,配置項目存放地址。點擊Finish建立項目,並由IDEA載入項目。數據庫

這個時候你能夠稍微休息一下,等待Maven初始化載入所須要的包。apache

這個就是項目初始化完成的目錄。

建立SQLITE數據庫

main目錄下方新建一個DB目錄,而且在目錄上右鍵點擊,新建一個Sqlite數據庫。

在右側DataBase中點擊數據庫,右鍵Open Console,運行以下腳本,建立一個表:

create table hello
(
  id    INTEGER primary key,
  title varchar(150),
  text  TEXT
);

配置項目SQLITE

基本配置

Maven配置

打開pom.xml文件,在dependencies節點中增長如下節點

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.21.0.1</version>
</dependency>

保存以後,稍等一會,IDEA會經過MAVEN拉取指定版本的包。
若是沒有成功拉取到包,能夠嘗試手動拉取。

點擊刷新,查看dependencies是否多了Sqlite包。

Mybatis配置

建立config目錄。新增MyBatisConfig文件,代碼以下

package com.example.demo.Config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.sqlite.SQLiteDataSource;

import javax.sql.DataSource;

@Configuration
public class MyBatisConfig {
    @Autowired
    private DataSourceProperties dataSourceProperties;

    @Bean(name="dataSource")
    public DataSource dataSource() {
        SQLiteDataSource dataSource = new SQLiteDataSource();
        dataSource.setUrl(dataSourceProperties.getUrl());
        return dataSource;
    }

    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        return sqlSessionFactoryBean.getObject();
    }
}

增長MyBatis的掃描配置文件,新建文件MyBatisMapperScannerConfig,代碼以下:

package com.example.demo.Config;

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class MyBatisMapperScannerConfig {
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");

        //com.example.demo.dal.mapper 這個包名是全部的Mapper.java文件所在的路徑,該包下面的子包裏面的文件一樣會掃描到。
        //此包名與具體的應用的名稱相關
        mapperScannerConfigurer.setBasePackage("com.example.demo.Mapper");

        return mapperScannerConfigurer;
    }

}

項目入口配置

打開DemoApplication文件。增長新的註解

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

// 下面這一行爲新增數據庫關聯註解
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.example.demo.mapper")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

編寫數據庫對象模型

在目錄中建立Model目錄,而且添加HelloModel類文件。

在文件中輸入數據庫對象結構。

package com.example.demo.Model;

public class HelloModel {
    private long Id;
    private String Title;
    private String Text;
}

在文件中,點擊右鍵,選擇Generate 選擇 Getter and Setter自動生成對象的GET,SET。

處理完成以後的文件應該是這樣的

package com.example.demo.Model;

public class HelloModel {
    private long Id;

    public long getId() {
        return Id;
    }

    public void setId(long id) {
        Id = id;
    }

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getText() {
        return Text;
    }

    public void setText(String text) {
        Text = text;
    }

    private String Title;
    private String Text;
}

與Model同目錄建立文件夾Mapper,新建一個HelloMapper類文件,編寫如下內容。

package com.example.demo.Mapper;

import com.example.demo.Model.*;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

import java.util.List;

@Mapper
@Component
public interface HelloMapper {

    // 插入 並查詢id 賦給傳入的對象
    @Insert("INSERT INTO hello(key, value) VALUES(#{key}, #{value})")
    @SelectKey(statement = "SELECT seq id FROM sqlite_sequence WHERE (name = 'hello')", before = false, keyProperty = "id", resultType = int.class)
    int insert(HelloModel model);

    // 根據 ID 查詢
    @Select("SELECT * FROM hello WHERE id=#{id}")
    HelloModel select(int id);

    // 查詢所有
    @Select("SELECT * FROM hello")
    List<HelloModel> selectAll();

    // 更新 value
    @Update("UPDATE hello SET value=#{value} WHERE id=#{id}")
    int updateValue(HelloModel model);

    // 根據 ID 刪除
    @Delete("DELETE FROM hello WHERE id=#{id}")
    int delete(Integer id);

}

同目錄建立Service文件夾,新建HelloService類文件。編寫如下代碼

package com.example.demo.Service;

import com.example.demo.Mapper.HelloMapper;
import com.example.demo.Model.HelloModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class HelloService {

    private final HelloMapper dao;

    @Autowired
    public HelloService(HelloMapper dao) {
        this.dao = dao;
    }

    public boolean insert(HelloModel model) {
        return dao.insert(model) > 0;
    }

    public HelloModel select(int id) {
        return dao.select(id);
    }

    public List<HelloModel> selectAll() {
        return dao.selectAll();
    }

    public boolean updateValue(HelloModel model) {
        return dao.updateValue(model) > 0;
    }

    public boolean delete(Integer id) {
        return dao.delete(id) > 0;
    }
}

整個項目的Mapper,DAL文件架構看起來應該是這個樣子的。

爲項目指定數據庫地址

打開src\main\resources\application.properties文件,配置數據庫信息。

spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite:E:/Java/demo1/src/main/db/myDb
spring.datasource.username=root
spring.datasource.password=root

編寫第一個Hello World

新建一個HelloWorld的類。

將內容替換成以下

package com.example.demo.Controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class HelloWorld {
    @RequestMapping("/")
    public String Index() {
        return "Hello World";
    }
}

增長了一個名爲Index的方法,而且經過註解設置瞭如何訪問此方法的路徑。

點擊右上角按鈕,運行這個項目。

打開瀏覽器,輸入http://localhost:8080能夠看到第一個控制器顯示的內容。

輸出數據庫內容到瀏覽器

雙擊hello表,顯示錶內容

在表界面中,右鍵點擊Add New Row,僞造幾條數據進去

Controller/HelloWorld文件中,新建List方法。

package com.example.demo.Controller;

import com.example.demo.Model.HelloModel;
import com.example.demo.Service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class HelloWorld {
    private final HelloService HelloService;

    @Autowired
    public HelloWorld(HelloService HelloService) {
        this.HelloService = HelloService;

    }

    @RequestMapping("/")
    public String Index() {
        return "Hello World";
    }

    @RequestMapping("/list")
    public List<HelloModel> List() {
        return HelloService.selectAll();
    }
}

注意咱們建立了HelloWorld的DAL層依賴注入。
從新運行整個項目,咱們輸入http://localhost:8080/list能夠看到,服務端將數據庫內容組合成了JSON輸出給咱們了。

建立請求對象

model文件夾中新建ReqBody類文件。輸入如下內容

package com.example.demo.Model;

import com.fasterxml.jackson.annotation.JsonProperty;

public class ReqBody {

    /**
     * 分支名
     */
    private String Name;

    public String getName() {
        return Name;
    }
    @JsonProperty(value="Name")
    public void setName(String name) {
        Name = name;
    }

    public String getEmail() {
        return Email;
    }
    @JsonProperty(value="Email")
    public void setEmail(String email) {
        Email = email;
    }

    private String Email;


}

注意,關注JsonProperty這個註解,我看不少教程都只是說了,使用@RequestBody就能夠將POST對象映射出來,可是,通過屢次嘗試,發現必須增長這個註解而且指定解析名字。@RequestBody纔會正確的解析提交的Application/Json數據格式。

獲取Post數據

咱們回到HelloWorld這個Controller上。新增一個Post方法,而且指定他的訪問路徑。

@RequestMapping(value = "/post", method = RequestMethod.POST)
    public String Post(
            @RequestBody ReqBody map
    ) throws  IOException {
        return "輸入的姓名是" + map.getName() + ",電子郵件是:" + map.getEmail();
    }

打開POSTMAN,POST請求這個接口。

後記

做爲有必定的.net開發基礎的前端攻城獅,對於寫JAVA仍是略有不擅長。主要須要知道什麼是依賴注入,和控制反轉。還有AOP編程。瞭解這些以後,對於寫項目有莫大的幫助。

另外,十分感謝Java開發的朋友幫助解析困惑。@Alex @青龍

參考文章

https://www.jianshu.com/p/418...

項目地址

https://github.com/yodfz/springboot-sqlite

相關文章
相關標籤/搜索