美文网首页
SpringBoot 整合 Sqlite3

SpringBoot 整合 Sqlite3

作者: 程就人生 | 来源:发表于2022-06-03 09:13 被阅读0次

Sqlite是一个轻量级的关系型数据库,它不需要单独安装,类似于一个文本文件,又可以放置在项目内作为持久化数据的内嵌式数据库使用。

因此,Sqlite成了很多手机App应用持久化数据的最佳选择。小型的Web项目,或者桌面应用,sqlite也是个不错的选择。下面就使用SpringBoot来整合一下Sqlite3,一起看一下吧。

第一步,pom.xml引入所需架包;

<!-- sqlite依赖 start -->    
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.36.0</version>
</dependency>
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>
<!-- sqlite依赖 end -->

第二步,配置文件;

application.properties配置:


spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:sqlite:c:\\test.db
spring.datasource.username=
spring.datasource.password=

配置说明:先在C盘把数据库文件建好,可以先建立一个文本文件然后重新命名为test.db,一定要有读写权限,否则在操作时会出现打不开数据库的问题。

spy.properties配置:


#3.2.1以上使用
#modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

参考:https://www.cnblogs.com/dalianpai/p/14682982.html

第三步,注解使用,数据库表和实体类的对应;

import com.baomidou.mybatisplus.annotation.OrderBy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;

import lombok.Data;

@Data
@TableName
public class User {
  // 排序,默认升序
  @OrderBy(asc=true)
  @TableId // 主键
  private String uid;

  private String name;

  private Integer sex;

  private String email;

  /**
   * 在数据库中不存在的字段
   */
  @TableField(exist=false)
  private String nickName;

}

注解说明:

@TableId:主键标识;
@OrderBy(asc=true):查询时按住被注解字段升序查询;
@TableField(exist=false):如果某个字段在表中不存在,可以这么用;
@TableName : 要设置表名、前缀等等,可以到这个注解里去设置;

第四步,mapper接口;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
/**
* 继承BaseMapper即可
*/
public interface UserMapper extends BaseMapper<User>{

}

说明:在启动类上加上扫描mapper文件夹的注解,以防找不到mapper映射;

@MapperScan("com.example.demo.mapper")

第五步,简单应用;

import java.util.List;
import java.util.Map;
import java.util.Random;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;

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

  @Resource
  private UserMapper userMapper;

  /**
   * 获取所有数据
   * @return
   */
  @GetMapping
  public Object index(){
      return userMapper.selectList(null);
  }

  /**
   * 新增
   * @return
   */
  @GetMapping("/insert")
  public Object insert(){
    User user = new User();
    user.setName(randomString());
    Random random = new Random();
    user.setUid("" + random.nextInt(1000));
    user.setSex(1);
      return userMapper.insert(user);
  }

  /**
   * 获取总数
   * @return
   */
  @GetMapping("/count")
  public Object index1(){
      Long userCount = userMapper.selectCount(null);
      return userCount;
  }

  /**
   * 获取一个list集合
   * 排序 orderByAsc("order_id")
   * 不为null的判断 isNotNull("stove_code")
   * 分组 groupBy("product_model")
   * @return
   */
  @GetMapping("/male")
  public Object index2(){
      List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("sex", 1));
      return users;
  }

  /**
   * 获取一个map集合
   * @return
   */
  @GetMapping("/map")
  public Object index3(){
      List<Map<String,Object>> users = userMapper.selectMaps(new QueryWrapper<User>()
        .select("uid,name")
        .eq("sex", 1));
      return users;
  }

  /**
   * 随机生成字母
   * @param length
   * @return
   */
  public String randomString(){      
      StringBuilder s = new StringBuilder(5);
      Random random = new Random();   
      for( int i = 0; i < 5; i ++) {   
          int choice = random.nextInt(2) % 2 == 0 ? 65 : 97; // 取得大写还是小写   
          s.append((char)(choice + random.nextInt(26)));   
      }
      return s.toString();
  }
}

第六步,建表;

DROP TABLE IF EXISTS "user";
CREATE TABLE "user" (
  "uid" text(36) NOT NULL,
  "name" TEXT,
  "sex" integer,
  "email" TEXT,
  PRIMARY KEY ("uid")
);
PRAGMA foreign_keys = true;

说明:在运行demo之前,先把建表语句拿到sqlite的客户端执行一下。

最后,测试;

控制台打印结果如下图所示:

image.png

浏览器执行结果如下图所示:

image.png image.png

写这个demo的时候,也遇到很多问题,在此记录一下:

1.引入架包后,项目出现一个红色的感叹号,怎么办?

太久不建新项目,老问题又冒出来了,把pom.xml里的架包一个一个注释掉,然后再一个一个放开,找到冲突的架包,到maven仓库里把冲突的架包删除重新maven update即可。

2.demo在另一个电脑上运行没有问题,拷贝过来,架包也引入了,文件还是很多红色叉号怎么办?

先排除架包引入冲突问题,然后再看看拷贝的文件中报错的地方提示什么,有可能是拷贝的特殊符号呢,去掉就可以了。

p6spy参考文档:

https://www.sqlite.org/docs.html

https://cloud.tencent.com/developer/article/1472808?from=15425

https://cloud.tencent.com/developer/article/1396722?from=15425

mybatis-plus-boot-starter的参考文档:

https://cloud.tencent.com/developer/article/1464098

最后总结

通过一个简单的demo,sqlite3在三个架包的加持下,使用起来非常简单。mybatis-plus-boot-starter也是mysql所使用的架包,之前没用过,更对它一无所知,现在终于了解一点了。p6spy还可以用来监控sql语句,纯属意外收获。这个demo可真没白写,又发现了几个好用的工具包。

相关文章

网友评论

      本文标题:SpringBoot 整合 Sqlite3

      本文链接:https://www.haomeiwen.com/subject/klzfmrtx.html