国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring Boot操作Sqlite數(shù)據(jù)庫 從入門到跑路

zzir / 2034人閱讀

摘要:此包名與具體的應(yīng)用的名稱相關(guān)項(xiàng)目入口配置打開文件。在文件中輸入數(shù)據(jù)庫對象結(jié)構(gòu)。插入并查詢賦給傳入的對象根據(jù)查詢查詢?nèi)扛赂鶕?jù)刪除同目錄創(chuàng)建文件夾,新建類文件。為項(xiàng)目指定數(shù)據(jù)庫地址打開文件,配置數(shù)據(jù)庫信息。獲取數(shù)據(jù)我們回到這個(gè)上。

[TOC]

準(zhǔn)備工作 1. 安裝Java 1.8 SDK

由于框架以及一些兼容性問題,我們采用大家通用的 JAVA 1.8 sdk。

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

安裝完成之后需要設(shè)置環(huán)境變量。

設(shè)置完成之后,驗(yàn)證系統(tǒng)是否可以正常運(yùn)行JAVA

2. 安裝IntelliJ IDEA

這個(gè)就不簡述了,大家自由發(fā)揮。但是推薦入正版。

3. 安裝Maven

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

下載之后解壓到文件夾,然后與Java sdk一樣配置一個(gè)環(huán)境變量。
驗(yàn)證命令

> mvn -v

Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:1
4+08:00)
Maven home: D:JAVA_TOOLSapache-maven-3.5.4in..
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: E:Javajre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
初始化項(xiàng)目

打開IDEA,然后新建項(xiàng)目。在左側(cè)選擇Spring Initializr,右側(cè)SDK選擇1.8。

點(diǎn)擊Next進(jìn)入下一個(gè)界面。

在這個(gè)界面上,可以按照自己的發(fā)揮編寫點(diǎn)東西。但是作為新手建議不做任何修改,接著Next

這個(gè)界面上,要選擇 1. WEB -> WEB 2. SQL -> MyBatis 。 點(diǎn)擊Next,配置項(xiàng)目存放地址。點(diǎn)擊Finish創(chuàng)建項(xiàng)目,并由IDEA載入項(xiàng)目。

這個(gè)時(shí)候你可以稍微休息一下,等待Maven初始化載入所需要的包。

這個(gè)就是項(xiàng)目初始化完成的目錄。

創(chuàng)建SQLITE數(shù)據(jù)庫

main目錄下方新建一個(gè)DB目錄,并且在目錄上右鍵點(diǎn)擊,新建一個(gè)Sqlite數(shù)據(jù)庫。

在右側(cè)DataBase中點(diǎn)擊數(shù)據(jù)庫,右鍵Open Console,運(yùn)行如下腳本,創(chuàng)建一個(gè)表:

create table hello
(
  id    INTEGER primary key,
  title varchar(150),
  text  TEXT
);
配置項(xiàng)目SQLITE 基本配置 Maven配置

打開pom.xml文件,在dependencies節(jié)點(diǎn)中增加以下節(jié)點(diǎn)


    org.xerial
    sqlite-jdbc
    3.21.0.1

保存之后,稍等一會(huì),IDEA會(huì)通過MAVEN拉取指定版本的包。
如果沒有成功拉取到包,可以嘗試手動(dòng)拉取。

點(diǎn)擊刷新,查看dependencies是否多了Sqlite包。

Mybatis配置

創(chuàng)建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 這個(gè)包名是所有的Mapper.java文件所在的路徑,該包下面的子包里面的文件同樣會(huì)掃描到。
        //此包名與具體的應(yīng)用的名稱相關(guān)
        mapperScannerConfigurer.setBasePackage("com.example.demo.Mapper");

        return mapperScannerConfigurer;
    }

}
項(xiàng)目入口配置

打開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;

// 下面這一行為新增數(shù)據(jù)庫關(guān)聯(lián)注解
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.example.demo.mapper")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
編寫數(shù)據(jù)庫對象模型

在目錄中創(chuàng)建Model目錄,并且添加HelloModel類文件。

在文件中輸入數(shù)據(jù)庫對象結(jié)構(gòu)。

package com.example.demo.Model;

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

在文件中,點(diǎn)擊右鍵,選擇Generate 選擇 Getter and Setter自動(dòng)生成對象的GET,SET。

處理完成之后的文件應(yīng)該是這樣的

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同目錄創(chuàng)建文件夾Mapper,新建一個(gè)HelloMapper類文件,編寫以下內(nèi)容。

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);

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

    // 查詢?nèi)?    @Select("SELECT * FROM hello")
    List selectAll();

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

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

}

同目錄創(chuàng)建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 selectAll() {
        return dao.selectAll();
    }

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

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

整個(gè)項(xiàng)目的Mapper,DAL文件架構(gòu)看起來應(yīng)該是這個(gè)樣子的。

為項(xiàng)目指定數(shù)據(jù)庫地址

打開srcmain esourcesapplication.properties文件,配置數(shù)據(jù)庫信息。

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
編寫第一個(gè)Hello World

新建一個(gè)HelloWorld的類。

將內(nèi)容替換成如下

package com.example.demo.Controller;

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

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

增加了一個(gè)名為Index的方法,并且通過注解設(shè)置了如何訪問此方法的路徑。

點(diǎn)擊右上角按鈕,運(yùn)行這個(gè)項(xiàng)目。

打開瀏覽器,輸入http://localhost:8080可以看到第一個(gè)控制器顯示的內(nèi)容。

輸出數(shù)據(jù)庫內(nèi)容到瀏覽器

雙擊hello表,顯示表內(nèi)容

在表界面中,右鍵點(diǎn)擊Add New Row,偽造幾條數(shù)據(jù)進(jìn)去

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 List() {
        return HelloService.selectAll();
    }
}

注意我們創(chuàng)建了HelloWorld的DAL層依賴注入。
重新運(yùn)行整個(gè)項(xiàng)目,我們輸入http://localhost:8080/list可以看到,服務(wù)端將數(shù)據(jù)庫內(nèi)容組合成了JSON輸出給我們了。

創(chuàng)建請求對象

model文件夾中新建ReqBody類文件。輸入以下內(nèi)容

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;


}

注意,關(guān)注JsonProperty這個(gè)注解,我看很多教程都只是說了,使用@RequestBody就可以將POST對象映射出來,但是,經(jīng)過多次嘗試,發(fā)現(xiàn)必須增加這個(gè)注解并且指定解析名字。@RequestBody才會(huì)正確的解析提交的Application/Json數(shù)據(jù)格式。

獲取Post數(shù)據(jù)

我們回到HelloWorld這個(gè)Controller上。新增一個(gè)Post方法,并且指定他的訪問路徑。

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

打開POSTMAN,POST請求這個(gè)接口。

后記

作為有一定的.net開發(fā)基礎(chǔ)的前端攻城獅,對于寫JAVA還是略有不擅長。主要需要知道什么是依賴注入,和控制反轉(zhuǎn)。還有AOP編程。了解這些之后,對于寫項(xiàng)目有莫大的幫助。

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

參考文章

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

項(xiàng)目地址

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76880.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.42 - MySQL:刪庫跑路

    摘要:肖鵬微博數(shù)據(jù)庫那些事兒肖鵬,微博研發(fā)中心技術(shù)經(jīng)理,主要負(fù)責(zé)微博數(shù)據(jù)庫相關(guān)的業(yè)務(wù)保障性能優(yōu)化架構(gòu)設(shè)計(jì),以及周邊的自動(dòng)化系統(tǒng)建設(shè)。經(jīng)歷了微博數(shù)據(jù)庫各個(gè)階段的架構(gòu)改造,包括服務(wù)保障及體系建設(shè)微博多機(jī)房部署微博平臺(tái)化改造等項(xiàng)目。 showImg(https://segmentfault.com/img/bV24Gs?w=900&h=385); 對于手握數(shù)據(jù)庫的開發(fā)人員來說,沒有誤刪過庫的人生是...

    aboutU 評論0 收藏0
  • 活動(dòng)實(shí)錄|拒絕"刪庫跑路",探究餓了么數(shù)據(jù)安全保障體系

    摘要:數(shù)人云告別人肉運(yùn)維上海的實(shí)錄第二彈來啦本次分享的嘉賓是餓了么團(tuán)隊(duì)負(fù)責(zé)人虢國飛。虢國飛餓了么團(tuán)隊(duì)負(fù)責(zé)人從事數(shù)據(jù)庫領(lǐng)域年,主要關(guān)注于數(shù)據(jù)庫管理自動(dòng)化建設(shè)和等領(lǐng)域的研究。本次主題關(guān)于數(shù)據(jù)安全的保障。在這一層,餓了么做了一些數(shù)據(jù)方面相關(guān)的保護(hù)。 數(shù)人云告別人肉運(yùn)維上海Meetup的實(shí)錄第二彈來啦!本次分享的嘉賓是餓了么DBA團(tuán)隊(duì)負(fù)責(zé)人虢國飛。實(shí)錄將從用戶訪問、數(shù)據(jù)庫架構(gòu)體系、數(shù)據(jù)備份、數(shù)據(jù)流轉(zhuǎn)...

    xiaowugui666 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<