连接数据库
导入依赖
本项目的数据均为结构化数据,采用MySQL数据库进行数据存储与管理。
在pom.xml中导入相应的依赖:
1 2 3 4 5 6 7 8 9 10
| <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: 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
|
SpringBoot配置文件优先级
- jar包同一目录下的config文件夹内的配置文件
- jar包同一目录下的配置文件
- classpath下的config文件夹内的配置文件
- classpath下的配置文件
mybatis使用
mybatis的使用需要依次构建Bean层实体类、Mapper层访问数据库接口文件、数据库访问实现文件MySQLMapper.xml
构建实体类
根据数据库中的对象来构建相应的实体,在pom.xml中引入Lombok来简化代码:
1 2 3 4 5 6 7
| <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;
@Mapper
@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做了转义,对应表格如下:
原始 |
转义 |
原始 |
转义 |
< |
< |
>= |
>= |
<= |
<= |
& |
& |
> |
> |
‘ |
' |
“ |
" |
|
|