学习一个技术框架,对它的数据库链接操作 也是入门的必备条件,今天开始跟着新远兄一起学习spring boot 下mysql的使用吧!
1.首先创建mysql数据库test,并创建数据库表 tb_area,脚本如下:
-- ----------------------------
-- Table structure for `tb_area`
-- ----------------------------
DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area` (
`area_id` int(2) NOT NULL AUTO_INCREMENT COMMENT '区域ID',
`area_name` varchar(200) DEFAULT NULL COMMENT '区域名称',
`priority` int(2) DEFAULT '0' COMMENT '优先级',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`last_edit_time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`area_id`),
UNIQUE KEY `uk_area` (`area_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_area
-- ----------------------------
INSERT INTO `tb_area` VALUES ('1', '东苑', '1', null, null);
INSERT INTO `tb_area` VALUES ('2', '北苑', '2', null, null);
2. pom.xml配置,数据库链接组件和分页组件
添加Mysql的依赖:mysql-connector-java
添加Mybatis的依赖:mybatis-spring-boot-starter
添加albaba连接池:druid
添加分页组件的依赖:pagehelper-spring-boot-starter
如下图所示:
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--集成druid,使用连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.2</version>
</dependency>
然后导入
注意:有时候添加依赖了,我们忽略了或者并没有弹出imported提示,此时 我们需要手动reimport,方法为,
项目的pom.xml 右键,选择Maven,子菜单Reimport
3.配置数据库链接属性
修改application.yml,增加如下属性:datasource、mybabit、pagehelper
spring:
profiles:
active: dev
datasource:
name: test
url: jdbc:mysql://Ip:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: sys106
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
filters: stat
# 初始化大小,最大,最小
initialSize: 1
maxActive: 20
minIdle: 1
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxOpenPreparedStatements: 20
mybatis:
mapper-locations: classpath:mapping/*.xml
type-aliases-package: com.example.model
#pagehelper分页插件
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
注意:a) 代码中IP 换成自己的地址
4.自动生成代码
在resources目录下面新建2个目录:generator和mapping。
generator文件夹存放映射代码模板配置文件
mapping文件夹存放自动生成的mybatis的xml文件
在generator中创建generatorConfig.xml文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="C:\Users\wu\.m2\repository\mysql\mysql-connector-java\5.1.24\mysql-connector-java-5.1.24.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://IP/test" userId="root" password="sys106">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="tb_area" domainObjectName="Area" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
注意:a) 代码中IP 换成自己的地址
b).这里用到了mysql-connector-java-5.1.46-bin.jar这个包,下载好到本地,地址填写正确
修改pom.xml,添加mybatis自动生成代码插件,在build>plugins节点下添加如下代码:
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
打开Mevan项目,双击运行
运行完后将会自动生成和generatorConfig.xml配置中对应的代码,生成的代码包括数据接口层、数据库实体类、mybatis三个,如下图所示:
接着还剩下服务接口、服务实现类,我们主动添加相关代码。
服务接口如下:
package com.example.service;
import com.example.model.Area;
import java.util.List;
public interface AreaService {
int addArea(Area area);
int editArea(Area area);
List<Area> findAllArea(int pageNum, int pageSize);
int deleteArea(Integer areaId);
Area getArea(Integer areaId);
}
服务接口实现类如下:
package com.example.service.impl;
import com.example.mapper.AreaMapper;
import com.example.model.Area;
import com.example.service.AreaService;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service(value = "areaService")
public class AreaServiceImpl implements AreaService {
@Autowired
private AreaMapper areaMapper;
@Override
public int addArea(Area area) {
return areaMapper.insertSelective(area);
}
@Override
public int editArea(Area area) {
return areaMapper.updateByPrimaryKeySelective(area);
}
@Override
public List<Area> findAllArea(int pageNum, int pageSize) {
//将参数传给这个方法就可以实现物理分页了,非常简单。
PageHelper.startPage(pageNum, pageSize);
return areaMapper.selectAllArea();
}
@Override
public int deleteArea(Integer areaId) {
return areaMapper.deleteByPrimaryKey(areaId);
}
@Override
public Area getArea(Integer areaId) {
return areaMapper.selectByPrimaryKey(areaId);
}
}
5.添加控制器
package com.example.controller;
import com.example.model.Area;
import com.example.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.websocket.server.PathParam;
import java.util.HashMap;
import java.util.Map;
@RestController
//@RequestMapping("/area")
public class AreaController {
@Autowired
private AreaService areaService;
@RequestMapping(value = "/get", produces = {"application/json;charset=UTF-8"})
public Map<String,Object> getArea(@PathParam("areaId") Integer areaId){
Map<String,Object> modelMap= new HashMap<String,Object>() ;
modelMap.put("area",areaService.getArea(areaId));
return modelMap;
}
@RequestMapping(value = "/add", produces = {"application/json;charset=UTF-8"})
public Map<String,Object> addArea(Area area){
Map<String,Object> modelMap= new HashMap<String,Object>() ;
modelMap.put("success",areaService.addArea(area));
return modelMap;
}
@RequestMapping(value = "/edit", produces = {"application/json;charset=UTF-8"})
public Map<String,Object> editArea(Area area){
Map<String,Object> modelMap= new HashMap<String,Object>() ;
modelMap.put("success",areaService.editArea(area));
return modelMap;
}
@RequestMapping(value = "/all/{pageNum}/{pageSize}", produces = {"application/json;charset=UTF-8"})
public Object findAllArea(@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize){
return areaService.findAllArea(pageNum,pageSize);
}
@GetMapping(value="/del")
public Map<String,Object> deleteArea(@PathParam("areaId") Integer areaId){
Map<String,Object> modelMap= new HashMap<String,Object>() ;
modelMap.put("success",areaService.deleteArea(areaId));
return modelMap;
}
@GetMapping("/test")
public String Test(){
return "test";
}
}
到此为止,整个项目的目录结构为:
运行结果:
在运行之前,需要在启动类上加 :@MapperScan("com.example.mapper"),实现启动时自动注解mapper