简单的Spring Boot项目——实现连接Mysql数据库
一、创建Spring Boot项目
参考:使用IntelliJ IDEA创建简单的Spring Boot项目
二、数据库、表的创建

三、项目开发
3.1 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.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yh</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency> <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>
3.2 mybatis-config.xml文件配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置全局属性 -->
<settings>
<setting name="useGeneratedKeys" value="true"/>
<!--别名-->
<setting name="useColumnLabel" value="true"/>
<!--名称转换-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
3.3 dao配置类datasource和sessionfactory
DataSourceConfiguration.java
package com.yh.demo.config.dao; import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import java.beans.PropertyVetoException; @Configuration
// 配置mybaits的mapper扫描路径
@MapperScan("com.yh.demo.dao")
public class DataSourceConfiguration {
@Value("${jdbc.driver}")
private String jdbcDriver;
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.username}")
private String jdbcUser;
@Value("${jdbc.password}")
private String jdbcPassword; @Bean("dataSource")
public ComboPooledDataSource createDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(jdbcDriver);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUser(jdbcUser);
dataSource.setPassword(jdbcPassword);
// 配置c3p0连接池的私有属性
// 连接池最大线程数
dataSource.setMaxPoolSize(30);
// 连接池最小线程数
dataSource.setMinPoolSize(10);
// 连接池初始化连接数
dataSource.setInitialPoolSize(15);
// 关闭连接后不自动commit
dataSource.setAutoCommitOnClose(false);
return dataSource;
}
}
SessionFactoryConfiguration.java
package com.yh.demo.config.dao; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource;
import java.io.IOException; @Configuration
public class SessionFactoryConfiguration { @Value("${mybatis_config_file}")
private String mybatisConfigFilePath;
@Value("${entity_package}")
private String entityPackage;
@Value("${mapper_path}")
private String mapperPath; @Autowired
@Qualifier("dataSource")
private DataSource dataSource; @Bean("sqlSessionFactory")
public SqlSessionFactoryBean createFactory() throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath));
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
return sqlSessionFactoryBean;
}
}
3.4 dao和mapper的编写
RunoobDao.java
package com.yh.demo.dao;
import com.yh.demo.entity.Runoob;
import java.util.List;
public interface RunoobDao {
List<Runoob> queryRunoob();
int insertRunoob(Runoob runoob);
}
RunoobDao.xml
<?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.yh.demo.dao.RunoobDao">
<select id="queryRunoob" resultType="com.yh.demo.entity.Runoob">
select* from runoob_tbl
</select> <insert id="insertRunoob" parameterType="com.yh.demo.entity.Runoob">
insert into runoob_tbl(runoob_title)values (#{runoobTitle})
</insert>
</mapper>
3.5 service配置类TransactionManagementConfiguration
TransactionManagementConfiguration.java
package com.yh.demo.config.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer; import javax.sql.DataSource; @Configuration
@EnableTransactionManagement
public class TransactionManagementConfiguration implements TransactionManagementConfigurer { @Autowired
private DataSource dataSource; @Override
public TransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
3.6 service层接口和实现
RunoobService.java
package com.yh.demo.service;
import com.yh.demo.entity.Runoob;
import java.util.List;
public interface RunoobService {
List<Runoob> queryRunoob();
int insertRunoob(Runoob runoob);
}
RunoobServiceImpl.java
package com.yh.demo.service.serviceImpl; import com.yh.demo.dao.RunoobDao;
import com.yh.demo.entity.Runoob;
import com.yh.demo.service.RunoobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service
public class RunoobServiceImpl implements RunoobService {
@Autowired
private RunoobDao runoobDao; @Override
public List<Runoob> queryRunoob() {
return runoobDao.queryRunoob();
} @Transactional
@Override
public int insertRunoob(Runoob runoob) {
return runoobDao.insertRunoob(runoob);
}
}
3.7 controller方法实现
RunoobController.java
package com.yh.demo.controller.data; import com.yh.demo.entity.Runoob;
import com.yh.demo.service.RunoobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map; @RestController
@RequestMapping("/runoob")
public class RunoobController {
@Autowired
private RunoobService runoobService; @RequestMapping(value = "/query",method = RequestMethod.GET)
public Map<String,Object> queryRunoob(HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
response.setHeader("Access-Control-Allow-Methods", "GET,POST");
Map<String,Object> modelMap = new HashMap<String,Object>();
List<Runoob> runoobs = runoobService.queryRunoob();
modelMap.put("runoobList",runoobs);
System.out.println("========");
return modelMap;
} @RequestMapping(value = "/insert",method = RequestMethod.POST)
public Map<String,Object> insertRunoob(@RequestBody Runoob runoob){
Map<String,Object> modelMap = new HashMap<String, Object>();
modelMap.put("success",runoobService.insertRunoob(runoob));
return modelMap;
}
}
四、其他文件
4.1 application.properties
server.port=8082
server.servlet.context-path=/demo jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=12345yehuan #mybatis
mybatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
entity_package=com.yh.demo.entity
4.2 实体类
Runoob.java
package com.yh.demo.entity;
public class Runoob {
private int runoobId;
private String runoobTitle;
public int getRunoobId() {
return runoobId;
}
public void setRunoobId(int runoobId) {
this.runoobId = runoobId;
}
public String getRunoobTitle() {
return runoobTitle;
}
public void setRunoobTitle(String runoobTitle) {
this.runoobTitle = runoobTitle;
}
@Override
public String toString() {
return "Runoob{" +
"runoobId=" + runoobId +
", runoobTitle='" + runoobTitle + '\'' +
'}';
}
}
4.3 项目结构


五、dao测试
选定dao接口名 - alt+enter - create test -选择需要测试的方法,在test下的对应路径下就会生成对应的测试类,如下所示:
RunoobDaoTest.java
package com.yh.demo.dao; import com.yh.demo.entity.Runoob;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.util.List; import static org.junit.jupiter.api.Assertions.*; @RunWith(SpringRunner.class)
@SpringBootTest
public class RunoobDaoTest { @Autowired
private RunoobDao runoobDao; @Test
public void queryRunoob() {
List<Runoob> runoobs = runoobDao.queryRunoob();
System.out.println(runoobs.toString());
assertEquals(1,runoobs.size());
} @Test
public void insertRunoob() {
Runoob runoob = new Runoob();
runoob.setRunoobTitle("第二条");
int result = runoobDao.insertRunoob(runoob);
assertEquals(1,result);
}
}
简单的Spring Boot项目——实现连接Mysql数据库的更多相关文章
- Docker 部署Spring Boot 项目并连接mysql、redis容器(记录过程)
Spring Boot 项目配置 将写好的Spring Boot 项目通过maven 进行package打包获得可执行Jar 再src/main/docker(放哪都行)下编写创建Dockerfile ...
- 记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障
搭建了一个新框架,使用了spring boot 替换以简化原来繁杂的spring配置,使用Spring注解管理事务,持久层使用mybatis. 连接mysql数据库完成项目的过程中发现不支持事务,因为 ...
- Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置
0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...
- 构建一个简单的Spring Boot项目
11 构建一个简单的Spring Boot项目 这个章节描述如何通过Spring Boot构建一个"Hello Word"web应用,侧重介绍Spring Boot的一些重要功能. ...
- django新建项目,连接mysql数据库
安装django,进入Django目录,运行 python setup.py install 在workplace目录下新建一个名为site01的项目: cd workplacedjango-admi ...
- Spring boot通过JPA访问MySQL数据库
本文展示如何通过JPA访问MySQL数据库. JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据 ...
- Spring Boot项目application.yml文件数据库配置密码加密
在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了 ...
- spring boot 集成mybatis连接oracle数据库
1. POM文件添加依赖 <!-- Mybatis --> <dependency> <groupId>org.mybatis.spring.boot</gr ...
- PyCharm创建Django项目并连接mysql数据库
0. 安装Django pip install django 1. 新建项目 注:我的Pycharm为社区版,创建项目时,File->New Project- 显示为: 注意勾选内容. 如果 ...
随机推荐
- Django 小实例S1 简易学生选课管理系统 7 修改个人信息
Django 小实例S1 简易学生选课管理系统 第7节--修改个人信息 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 用户模块除了注册登录之外,还 ...
- 菜鸡的Java笔记 - java 多对多映射
要求: 1.将数据还原为简单java类 2.数据的输出: 可以根据一个用户输出它对应的角色以及每个角色对应的权限,以及包含的具体的权限详情: 一个权限可以输出具 ...
- node对象
global,node的全局对象;js在游览器中的全局对象为windows 在node环境中;输入global.consloe 输出: Console { log: [Function: bound ...
- MYSQL数据库重新初始化
前言 我们在日常开发过程中,可能会遇到各种mysql服务无法启动的情况,各种百度谷歌之后,依然不能解决的时候,可以考虑重新初始化mysql.简单说就是重置,"恢复出厂设置".重置之 ...
- [atAGC006D]Median Pyramid Hard
二分答案,考虑答案是否会大于等于这个mid,显然所有数值分为两类:大于等于mid和小于mid将n个数转化为01串,如果0和1不相邻,那么答案就是第一个数/最后一个数(一定会相同),考虑有连续两个0/1 ...
- [noi1755]Trie
定义S对应的数组为$a_{i}=\min_{0\le j<i,S_{j}=S_{i}}i-j$,特别的,若不存在j,令$a_{i}=i$,那么容易发现存在双射关系就意味这两者对应的数组相同 因此 ...
- [bzoj1853]幸运数字
容易发现幸运数字只有1024个,暴力标记倍数还是会tle的 容斥,即从中任选i个的lcm,复杂度为$o(2^1024)$ 剪枝一:当答案超过1024就不用算了 剪枝二:当某个数是另一个数的倍数时就删掉 ...
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析
RocketMQ的前提回顾 RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆 ...
- SpringMVC---Json的使用
1.所需文件 2.pom中加入json <?xml version="1.0" encoding="UTF-8"?> <web-app xml ...
- List、ArrayList、迭代器、链表、Vector
1.List接口中的常用方法. List是Collection接口的子接口.所以List接口中有一些特有的方法. void add(int index, Object element) Object ...