spring boot +mybatis 操作sqlite数据库
程序员文章站
2022-04-09 16:08:30
前言 第一次写博客,以前遇到技术问题都是百度,google搜索也解决了我不少问题,需要搜索老半天七拼八凑才能找到解决方案,一直使用从不生产对学习的过程总结也没记录。 今天写该博客主要是让自己更学入了解spring boot里面的机制,同时让新人少走弯路。 环境 java8+spring boot 数 ......
前言
第一次写博客,以前遇到技术问题都是百度,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>
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; } }
dalfactory.java 数据管理工厂层,从mybatis-config里获取数据配置文件,创建sqlsession
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();
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>
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); }
单元测试
@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(); } }
如果通过springapplication.rum 来启运项目,还需手运排除自动加载数据库配置文件。
在应用启动如入的class文件加:@springbootapplication(exclude= {datasourceautoconfiguration.class})