开篇
现在我们来实际用代码操作下,连接下数据库,看看它是否能和其他数据库一样
首先创建个springboot项目,怎么创建我们就不多加赘述;
由于是国产数据库,他有自己的驱动:com.oscar.Driver
那么这个驱动所依赖的包从哪来的?目前在maven库中我们搜索不到,只有在官网提供的安装目录下我们才能发现
引入
引入依赖包:
1.引入oscar jar包
我们将oscarJDBC16.jar包放在项目目录lib下,然后maven中依赖这个jar包
<dependency>
<groupId>com.oscarjdbc</groupId>
<artifactId>oscarJDBC16</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/lib/oscarJDBC16.jar</systemPath>
</dependency>
2.引入mybatis依赖包
由于我们创建数据库还是使用mybatis-genneration,快速创建,所以需要有以下依赖
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
快速创建代码
在resources目录下创建generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- <classPathEntry location="F:/cache/mysql-connector-java-5.1.28-bin.jar" /> -->
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.oscar.Driver" connectionURL="jdbc:oscar://192.168.1.xx:2003/OSRDB" userId="SYSDBA" password="szoscar55">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.study.modules.database.model" targetProject=".\src\main\resources\mybatis">
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.study.modules.database.mapper" targetProject=".\src\main\resources\mybatis">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.study.modules.database.dao" targetProject=".\src\main\resources\mybatis">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<table tableName="AUTH_USER"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"
>
<property name="useActualColumnNames" value="true"/>
</table>
<table tableName="testdb"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"
>
<property name="useActualColumnNames" value="true"/>
</table>
</context>
</generatorConfiguration>
再创建个test类
package com.study;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class mybatisTest {
public static void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
File configFile = new File("src/main/resources/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) {
try {
generator();
System.out.println("generator 完成");
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里要注意:xml文件中,记得要修改数据库连接地址
运行下来看看效果:
我们把生成的文件拷贝到项目下
yml配置数据库连接
spring:
datasource:
url: jdbc:oscar://192.168.1.61:2003/OSRDB?serverTimezone=UTC&useSSL=FALSE
username: SYSDBA
password: szoscar55
driver-class-name: com.oscar.Driver
#用于mybatis
mybatis:
mapper-locations: classpath:com/study/modules/database/**/*.xml
type-aliases-package: com.study.modules.database.model
启动项添加mapper注入
@MapperScan("com.study.modules.database.dao")
controller写一个请求方法
目的是为了测试两个不同目录下的表
@Controller
public class StudyController {
@Resource
AuthUserMapper authUserMapper;
@Resource
TestdbMapper testdbMapper;
@RequestMapping(value = "/testST", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
@ResponseBody
public String expertAuth() {
Testdb testdb = testdbMapper.selectByPrimaryKey(1);
System.out.println(testdb.getNAME());
AuthUser authUser = authUserMapper.selectByPrimaryKey(1);
System.out.println(authUser.getEMAIL());
AuthUser record = new AuthUser();
record.setID(authUser.getID());
record.setEMAIL("66666@qq.com");
int i = authUserMapper.updateByPrimaryKeySelective(record);
System.out.println("更新数:" + i);
return "success";
}
}
启动看看运行结果,然后访问:http://localhost:8080/testST
我们发现testdb能够正常访问数据,AUTH_USER不能访问,会提示【ERROR, Relation “AUTH_USER” does not exist】
是不是很奇怪?它能创建,但是识别不到;
我们来看下AUTH_USER的属性
我们发现AUTH_USER所有者是SYSDBA,也就是说在创建的时候可以直接识别到;但是使用的时候,没办法识别到
举个例子:你是公司研发组的成员,别人要找到你,首先要通过研发组来找你,没办法直接找到你。如果你在最顶上的领导层,那么就没必要通过层级来找到你;
这就解释了为啥testdb能够直接运用,他是在最高级的目录下;AUTH_USER他是在高级目录下的另一级别目录下,使用它时,需要另外在表名前加上上级目录
找到AuthUserMapper.xml.把表明加上前缀
重启,再次进行测试
这是后发现正常运行了
总结
1.ShenTong数据库的使用方式和其他类型数据库使用类似,都可以使用mybatis框架进行操作
2.ShenTong数据库在多级目录下进行操作时必须加上上级目录名称,否则无法找到相应的表
3.由于高级目录下能识别到所有的表,在创建表明时,尽量不要表名重复