作者:佩政哲维99 | 来源:互联网 | 2023-05-21 11:47
前言第一次写博客,以前遇到技术问题都是百度,google搜索也解决了我不少问题,需要搜索老半天七拼八凑才能找到解决方案,一直使用从不生产对学习的过程总结也没记录。今天写该博客主要是
前言
第一次写博客,以前遇到技术问题都是百度,google搜索也解决了我不少问题,需要搜索老半天七拼八凑才能找到解决方案,一直使用从不生产对学习的过程总结也没记录。
今天写该博客主要是让自己更学入了解spring boot里面的机制,同时让新人少走弯路。
环境
java8+spring boot
数据库:sqlite
ORM框架:mybatis
sqlite 不多介绍了,基于文件格式的数据库,无需安装数据库执行引擎,方便部署。
主要依赖与版本
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.1
org.xerial
sqlite-jdbc
3.21.0.1
代码层次结构
代码说明
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">
<transactionManager type="JDBC">transactionManager>
<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
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})