更新于 

连接数据库

导入依赖

本项目的数据均为结构化数据,采用MySQL数据库进行数据存储与管理。

在pom.xml中导入相应的依赖:

1
2
3
4
5
6
7
8
9
10
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

修改配置文件

新建resources/config/application.yml配置文件,写入数据库配置信息(test为样例数据库):

1
2
3
4
5
6
7
8
9
10
spring:
datasource:
username: #数据库用户名
password: #数据库密码
#?serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
type-aliases-package: com.rsgis.bean #数据库对应的实体
mapper-locations: classpath:mapper/*.xml #在resource包下创建mapper文件夹,然后在其中创建xml文件
SpringBoot配置文件优先级
  1. jar包同一目录下的config文件夹内的配置文件
  2. jar包同一目录下的配置文件
  3. classpath下的config文件夹内的配置文件
  4. classpath下的配置文件

优先级从上到下依次递减

mybatis使用

mybatis的使用需要依次构建Bean层实体类、Mapper层访问数据库接口文件、数据库访问实现文件MySQLMapper.xml

构建实体类

根据数据库中的对象来构建相应的实体,在pom.xml中引入Lombok来简化代码:

1
2
3
4
5
6
7
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
Lombok常用注解

@Setter: 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter: 使用方法同上,区别在于生成的是getter方法。
@ToString: 注解在类,添加toString方法。
@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
@NoArgsConstructor: 注解在类,生成无参的构造方法。
@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4j: 注解在类,生成log变量,严格意义来说是常量。private static final Logger log = LoggerFactory.getLogger(UserController.class);

在bean层下新建ObjectBean类,依据数据库内字段进行构建,并配置注释:

@Data@NoArgsConstructor@AllArgsConstructor
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.rsgis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ObjectBean {
private long object_ID;
private String type;
}

构建访问接口文件

在mapper层下新建MySQLMapper接口类,构建相应接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.rsgis.mapper;

import com.rsgis.bean.ObjectBean;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;

//这个注解表示该类为mybatis的mapper类
//也可以在项目启动类中使用@MapperScan("com.rsgis.mapper")来扫描所有mapper接口
@Mapper
//将接口的实现类交给Spring进行管理
@Repository
public interface MySQLMapper {
List<ObjectBean> getAllObject();
}

构建访问实现文件

resource/mapper/MySQLMapper.xml中实现接口对应的SQL语句,namespace要填写访问数据库接口类文件路径

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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.rsgis.mapper.MySQLMapper">
<select id="getAllObject" resultType="com.rsgis.bean.ObjectBean" useCache="true">
select * from objects
</select>
<update id="UpdateFunction" parameterType="com.rsgis.bean.FunctionBean">
update functions set req_num = #{req_num} where function_ID = #{function_ID};
</update>
</mapper>

测试连接

test/java/com/rsgis/GisMonitorApplicationTests内构造测试代码并输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
@SpringBootTest
class GisMonitorApplicationTests {

@Autowired
private MySQLMapper mySQLMapper;

@Test
void contextLoads() {
List<ObjectBean> allObjects = mySQLMapper.getAllObject();
System.out.println(allObjects);
}

}

输出结果如下,数据库连接正常

Error:SQL语句提示“应为标记名称”

在写SQL语句时,发现 < 号报错了,经查询发现是mybatis做了转义,对应表格如下:

原始 转义 原始 转义
< &lt; >= &gt;=
<= &lt;= & &amp;
> &gt; &apos;
&quot;