spring boot+mysql 简单的数据查询
编辑器 IDEA 版本2021.3.2
JDK17
创建数据库
相关安装配置这里就不赘述了。
创建项目
所需依赖项目创建完成后就这这样的
数据库连接测试
选择右侧的数据库图标
数据库选择
我选择的是mysql
连接测试
第一次做测试连接是需要安装一下依赖的,点击测试连接会自动下载,完成后再点击测试连接即可。如图所示测试成功数据库连接有效。点击确定会展示相关表格。
相关配置
配置文件有两个,一个是根目录下的pom.xml,一个是java->resources文件夹里的application.yml有的是application.properties起作用是一样的名字可改可不改。
pom.xml
多说无益直接粘贴
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.springboot.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- spring boot mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
<!-- 添加thymeleaf支持:类似于jsp的视图模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml(application.properties)
server:
// 项目的端口号默认是8080为了避免端口占用我做了修改
port: 8088
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
//追加 ?useUnicode=true&characterEncoding=utf8 其作用指定字符的编码、解码格式
url: jdbc:mysql://localhost:3306/testdata?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.bean
运行检查
*找到项目名+Application的文件,我的项目名是demo1所以我需要找到Demo1Application.java。如下图右键运行
运行完后打开浏览器访问http://localhost:8088看到下图表示运行成功
项目编辑
下面就开始我们的项目编辑了,如图所示创建软件包
这里大家注意一下在与java同级的resources内也有一个mapper。因为我们在上面文件application.yml文件内指定的是classpath:mapper/*.xml。如有需要可在配置文件指定到其他地方。
bean(实体类)
快速创建实体类,如图
选择Generatr POJOs.groovy,指定到项目的bean下,再次打开就可以看到有一个表格名+Bean的文件,里面get set都已写好了。
第一次使用的朋友会发现生成的文件名是数据表格名而且文件内没有get set,下面我们来配置一下
跟第一次操作一样点击最后一个
这时候我们可以在左侧看到一个文件,打开后将下面的代码替换进去即可。替换完毕后再去执行上述操作
Generate POJOs.groovy
import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
packageName = "com.sample;"
typeMapping = [
(~/(?i)int/) : "long",
(~/(?i)float|double|decimal|real/): "double",
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp",
(~/(?i)date/) : "java.sql.Date",
(~/(?i)time/) : "java.sql.Time",
(~/(?i)/) : "String"
]
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
}
def generate(table, dir) {
def className = javaName(table.getName(), true)
def fields = calcFields(table)
new File(dir, className + "Bean.java").withPrintWriter { out -> generate(out, className+'Bean', fields) }
}
def generate(out, className, fields) {
out.println "package $packageName"
out.println ""
out.println ""
out.println "public class $className {"
out.println ""
fields.each() {
if (it.annos != "") out.println " ${it.annos}"
out.println " private ${it.type} ${it.name};"
}
out.println ""
fields.each() {
out.println ""
out.println " public ${it.type} get${it.name.capitalize()}() {"
out.println " return ${it.name};"
out.println " }"
out.println ""
out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
out.println " this.${it.name} = ${it.name};"
out.println " }"
out.println ""
}
out.println "}"
}
def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
type : typeStr,
annos: ""]]
}
}
def javaName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}
def isNotEmpty(content) {
return content != null && content.toString().trim().length() > 0
}
static String changeStyle(String str, boolean toCamel){
if(!str || str.size() <= 1)
return str
if(toCamel){
String r = str.toLowerCase().split('_').collect{cc -> Case.LOWER.apply(cc).capitalize()}.join('')
return r[0].toLowerCase() + r[1..-1]
}else{
str = str[0].toLowerCase() + str[1..-1]
return str.collect{cc -> ((char)cc).isUpperCase() ? '_' + cc.toLowerCase() : cc}.join('')
}
}
static String genSerialID() {
return "\tprivate static final long serialVersionUID = " + Math.abs(new Random().nextLong()) + "L;"
}
mapper
创建接口
package com.example.demo.mapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
public List all();
}
service
package com.example.demo.service;
import com.example.demo.bean.UserBean;
public interface UserService {
public UserBean getUser();
}
serviceImpl
package com.example.demo.serviceImpl;
import com.example.demo.bean.UserBean;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public UserBean getUser() {
return (UserBean) userMapper.all();
}
}
maperr(resources下的mapper)
这个mapper是xml类型的主要书写sql语句,这里的id名字对应着java.mapper里面的方法名。
<?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.example.demo.mapper.UserMapper">
<!-- 查询所有信息 -->
<select id="all" resultType="com.example.demo.bean.UserBean">
select * from user
</select>
</mapper>
Controller
package com.example.demo.controller;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/user")
@ResponseBody
public List index(){
List arr = userMapper.all();
return arr;
}
}
到此编辑结束,回到上述运行检查重新运行项目。在Postman或浏览器去访问。
Postman
浏览器