• spring boot +mybatis 操作sqlite数据库


    前言

    第一次写博客,以前遇到技术问题都是百度,google搜索也解决了我不少问题,需要搜索老半天七拼八凑才能找到解决方案,一直使用从不生产对学习的过程总结也没记录。

    今天写该博客主要是让自己更学入了解spring boot里面的机制,同时让新人少走弯路。


    环境

    java8+spring boot

    数据库:sqlite

    ORM框架:mybatis

    sqlite 不多介绍了,基于文件格式的数据库,无需安装数据库执行引擎,方便部署。


    主要依赖与版本

    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.1</version>

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

    代码层次结构



    代码说明

    mybatis-config.xml 这里主要用于数据库的配置,mapper文件映射。

    对于里面的配置主要说明一下url里的值,由于是sqlite的关系在数据库的路径那里要注意下,层次结构给的是dal层,数据库实际放在了应用启动屋
    webservice-boot的目录里。
    如果数据库找不到,程序会在错误的路径里新建一个空的数据文件.
    单元测试里用了admin这张表,当初就是数据库路径不对一直报:
    Error querying database.  Cause: org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such table: admin)
    
    
    
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <!-- 配置JDBC事务,此事务由mybatis管理 -->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 配置连接池,此连接池为mybatis连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="org.sqlite.JDBC"/>
                    <property name="url" value="jdbc:sqlite:../webservice-boot/src/main/resources/DB.sqlite3"/>
                    <property name="username" value=""/>
                    <property name="password" value=""/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="mybatis/mapper/AdminMapper.xml" />
        </mappers>
    </configuration>
    View Code
    AdminDO.java
    package com.pxinhai.webservice.dal.admin;
    
    public class AdminDO {
    
        private String adminID;
    
        public String getAdminID() {
            return adminID;
        }
    
        public void setAdminID(String adminID) {
            this.adminID = adminID;
        }
    }
    View Code
    DalFactory.java 数据管理工厂层,从mybatis-config里获取数据配置文件,创建sqlsession. 实现项目中要从容器获取并用SqlSessionTemplate来管理。
         String resource = "mybatis-config.xml";
            InputStream inputStream = null;
            try {
                inputStream = Resources.getResourceAsStream(resource);
            } catch (IOException e) {
                e.printStackTrace();
            }
            SqlSessionFactory sqlSessionFactory= new  SqlSessionFactoryBuilder().build(inputStream);
            return sqlSessionFactory.openSession();
    View Code
    AdminMapper.xml 对sql语句与DO的映射配置,需要注意namespace与dal接口层要一致
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.pxinhai.webservice.dal.admin.AdminDal" >
        <select id="findAdminById" parameterType="String"  resultType="com.pxinhai.webservice.dal.admin.AdminDO">
            SELECT
            * FROM admin WHERE adminID =#{adminID}
        </select>
    </mapper>
    View Code

    AdminDal.java 接口层 ,spring规范打 Repository注解注入到容器里去就不需要在mybatis-config指定了
    package com.pxinhai.webservice.dal.admin;
    
    
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface AdminDal {
    
        AdminDO findAdminById(String adminID);
    
    }
    View Code
    
    

    单元测试

    @SpringBootConfiguration
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class AdminDalTest {
        @Test
        public void testFindAdminById(){
            SqlSession sqlSession=new DalFactory().getSession();
            AdminDal dal=sqlSession.getMapper(AdminDal.class);
            AdminDO mm=dal.findAdminById("admin");
            Assert.assertNotNull(mm);
            sqlSession.close();
        }
    
    }
    View Code

    如果通过SpringApplication.rum 来启运项目,还需手运排除自动加载数据库配置文件。
    在应用启动如入的class文件加:
    @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})



  • 相关阅读:
    网络协议-应用层协议-HTTP协议简介
    网络协议-应用层协议-电子邮件协议
    网络协议-应用层协议-文件传输协议
    网络协议-应用层协议-远程登陆协议
    网络协议-应用层协议-概述
    网络协议-传输层协议-Socket编程
    网络协议-传输层协议-TCP协议
    网络协议-传输层协议-UDP协议
    北华大学网络赛题
    哈尔滨网络热身赛
  • 原文地址:https://www.cnblogs.com/pxinhai/p/11169178.html
Copyright © 2020-2023  润新知