springboot整合Mybatis实现对Oracle的定时查询实例

本科毕业刚刚入职的第一个任务,就是统计一段时间内的数据并输出至文件。其实输出至文件并不是一个最优解,提供接口让负责统计的大数据方面去调用应该是更好的方法,也是更适合springboot的方法。但是公司每日都会有人处理Nginx日志并发送给大数据方面,所以按照Nginx的日志格式输出至文件进行统一处理显然是个省时省力的好办法。顺口说一句,大部分的公司安全完全依靠网络屏障,内部的安全措施是很不完善的,前段时间的数据泄露就是这个原因。下面开始正题,如有什么错误和问题欢迎大家留言,同时希望本篇文章对大家能有所帮助。

本文参考的部分文章:
https://blog.csdn.net/twelve_wang/article/details/79062634
https://www.cnblogs.com/bigben0123/p/7895696.html
http://www.importnew.com/25985.html

#准备阶段
首先新建一个maven项目,做成如图所示的结构

程序结构

然后修改pom.xml,这里添加了热部署,log4j输出日志功能。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.springboot</groupId>
  <artifactId>demo</artifactId>
  <version>2.0.0.BUILD-SNAPSHOT</version>
 <!--  <version>0.0.1-SNAPSHOT</version>  -->
   <parent >
        <groupId> org.springframework.boot </groupId>
        <artifactId> spring-boot-starter-parent </artifactId>
        <version> 1.3.0.RELEASE </version>
     </parent >
     <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.7</java.version>
	</properties>
     <!-- 添加 web 应用的依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		 <dependency>
           	<groupId>org.hibernate</groupId>
           	<artifactId>hibernate-validator</artifactId>
           	</dependency>
           	
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
         
		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
    		 <groupId>org.springframework.boot</groupId>
   			 <artifactId>spring-boot-starter</artifactId>
   			<exclusions>
        		<exclusion>
            		<groupId>org.springframework.boot</groupId>
            		<artifactId>spring-boot-starter-logging</artifactId>
        		</exclusion>
   			</exclusions>
		</dependency>
		<dependency>
   			<groupId>javax.xml.bind</groupId>
    		<artifactId>jaxb-api</artifactId>
   			<version>2.2.12</version>
		</dependency>
		<dependency>
 		   <groupId>org.springframework.boot</groupId>
 		   <artifactId>spring-boot-starter-log4j</artifactId>
		</dependency>
         <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>
        <dependency>
        	<groupId>org.springframework.boot</groupId>
        	<artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    <!--      <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency> -->
 
    </dependencies>
     <!-- 把项目打成jar包运行  -->
     <build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
           	 	<groupId>org.springframework.boot</groupId>
            	<artifactId>spring-boot-maven-plugin</artifactId>
            	<configuration>
                <fork>true</fork>
            	</configuration>
        	</plugin>
		</plugins>
	</build>
</project>

然后我们就要配置application.properties,大家也可以使用application.yml来配置,这里添加了关于日志输出的配置。spring.datasource.url=jdbc:oracle:thin:@ip地址:sid spring.datasource.username=用户名 spring.datasource.password=用户密码 spring.datasource.driverClassName=oracle.jdbc.OracleDriver spring.jpa.database=oracle mybatis.type-aliases-package=com.domain mybatis.mapper-locations=classpath*:mapper/*Mapper.xml logging.level.root=INFO logging.level.org.springframework.web=INFO logging.file=日志文件的具体位置 logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n logging.pattern.file=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n

oracle数据库和mysql数据库配置的最大区别就是url了,oracle数据库的url稍微有一些繁琐,初学者很容易出错。不过现在使用oracle的越来越少了,我们公司也在做去O,后面我会再补充一篇Mysql的博客。还有一点,就是"mybatis.mapper-locations=classpath*:mapper/Mapper.xml"这一条语句,是一个大坑。在我参考的一篇博客里这一句是这样的:"mybatis.mapper-locations=classpath:mapper/.xml"。在我看来这两句话是没区别的,".xml"难道不包括"*Mapper.xml"么?当我们只有一个mapper文件的时候二者是等同的,但是当我们想多加几个mapper时(比如我们想同时在这个程序里分别查询多个表的数据)问题就来了,程序会抛出异常,这个异常很好理解,我们传入controller的一个List为空,我当时在这里就卡住了很久。我怀疑配置文件出了问题,但是我确实看不出来是这里的问题,直到我在网上看到的另一个demo里配置文件写的是"*Mapper.xml"。结果是让我很震惊的,确实是这里出现的问题。

#正式开发
接下来就要开始正式开发了,我虽然新建了一个web项目,但是我没有指定接口,我只是在程序初期用浏览器去看程序的报错。大家有兴趣的话可以在本文程序的基础是上写几个接口来传输数据。

首先来写Data类,我们从数据库获取的数据就是Data类型,包含三个数据的get和set方法。如果我们要做接口的话,就可以把这个类的某个对象传入接口,springboot会帮我们把它格式化为json格式。

package com.domain;

public class Data {
	private String a;
	private String b;
	private String c;
	
	public String getA() {
		return a;
	}
	public void setA(String a) {
		this.a = a;
	}
	public String getB() {
		return b;
	}
	public void setB(String b) {
		this.b = b;
	}
	public String getC() {
		return c;
	}
	public void setC(String c) {
		this.c = c;
	}
}

然后肯定要配置UserMapper文件了。
`<?xml version="1.0" encoding="UTF-8"?>

这里写查询所用的sql语句。比如我要用日期做变量,就把原来sql语句中的日期替换为#{date}即可。 `

配置好就可以去写QueryMapper接口了。

package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import com.domain.Data;

@Mapper
@Repository
public interface QueryMapper {
	
		List<Data> getData(String date);		
	
}

controller的代码

package com.controller;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RestController;

import com.dao.QueryMapper;
import com.domain.Data;

@RestController
public class QueryController {
	
	private final Logger logger = Logger.getLogger(QueryController.class);
	
	// 依赖注入
	@Autowired
	private QueryMapper queryMapper;
	
	
	@Scheduled(cron = "0 0/1 * * * *")		//定时任务,1分钟1次
	public void Data() throws IOException {
		
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		String date = df.format(new Date());
		
		logger.info("开始打印"+date+"数据");
		
		List<Data> list = queryMapper.getData(date);
		
		if(list.equals(null)){
			logger.error("获取Data为空");
		}
		else{
			logger.info("获取Data成功");
		}
		
		int a = 0;
		int b = 0;
		int c = 0;
		int d = 0;
		
		for(int i=0;i<list.size();i++){
			a = Integer.parseInt((list.get(i)).getA());
			b = b + Integer.parseInt((list.get(i)).getB()) * a;
			c = c + Integer.parseInt((list.get(i)).getC()) * a;
			d = d + a;
		}
		logger.info(a+"-"+b+"-"+c+"-"+d);
	
		//输出至文件
		String[] result = new String[4];
		result[0] = "a:"+a;
		result[1] = "b:"+b;
		result[2] = "c:"+c;
		result[3] = "d:"+d;
		
		File f = new File("D:/Demo."+date+".txt");
		FileWriter out = new FileWriter(f);
		
		for(int i=0;i<4;i++){
			out.write(result[i] + "\r\n");
		}
		
		out.close();
		
		logger.info(date + "数据打印结束");
	}
}

application的代码

package com;

import java.io.FileNotFoundException;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableTransactionManagement// 启动
@EnableScheduling//定时任务
@ConfigurationProperties(prefix="spring.datasource")  
@MapperScan("com.dao")
public class Application {
	
	public static void main(String[] args) throws FileNotFoundException {
		SpringApplication.run(Application.class, args);
	}
	
}

debug一下看看有没有抛出异常,没有就可以run as java application了。结果如下:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现关联查询需要使用MyBatis的多表查询功能,并在Spring Boot中进行整合。以下是一些基本步骤: 1. 在pom.xml中添加MyBatis和MySQL依赖。 2. 创建实体类和Mapper接口。 3. 在MyBatis的Mapper配置文件中编写关联查询语句。 4. 在Spring Boot中配置MyBatis。 5. 在Service中调用Mapper接口方法实现关联查询。 下面是一个示例: 1. 添加依赖 ``` <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 创建实体类和Mapper接口 ``` public class User { private Long id; private String name; private Integer age; private List<Article> articles; // getter and setter } public class Article { private Long id; private String title; private String content; private Long userId; // getter and setter } public interface UserMapper { User getUserById(Long id); } ``` 3. 编写关联查询语句 在MyBatis的Mapper配置文件中编写关联查询语句,例如: ``` <select id="getUserById" resultType="User"> SELECT u.*, a.id as article_id, a.title as article_title, a.content as article_content FROM user u LEFT JOIN article a ON u.id = a.user_id WHERE u.id = #{id} </select> ``` 4. 配置MyBatis 在application.properties文件中配置MyBatis的数据源、Mapper扫描路径等: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.mapper-locations=classpath*:mapper/*.xml ``` 5. 在Service中调用Mapper接口方法实现关联查询 ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.getUserById(id); } } ``` 以上就是使用Spring Boot整合MyBatis实现关联查询的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值