- 😜作 者:是江迪呀
- ✒️本文关键词:
Springboot
、数据库
、Git
、项目
- ☀️每日 一言:
野心是对梦想最好的致敬!
上回我们已经成功的创建了一个SpringBoot的单体项目并测试启动并了,但是光有个空架子是什么都做不了的,下面我们就集成MySQL
和Mybatis-plus
。
一、项目结构
项目结构说明:
common
:顾名思义,公用的、共享的;用于存放一些常量、枚举。config
:用于存放一些配置文件,比如预加载的类、Bean等。controller
:控制层,用于存放接口。entity
:用于存放实体类(实体类:和数据库字段一一对应的类)。mapper
:用来存放和xml文件对应的mapper接口。model
:用于存放入参和出参的类。service
:用来存放service层和它的实现类。utils
:用来存放工具类。resources/mapper
:用来存放xml文件。
二、添加MySQL数据库
2.1 添加驱动连接池依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
根据自己的MySQL数据库版本来使用合适的数据库连接驱动。我数据库是5.6版本的所以使用5.1.32版本的驱动。
<!--德鲁伊数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
这里我们使用德鲁伊的连接池,其实不使用连接池也是可以的,但是强烈建议要使用,连接池的作用如下:
- 连接复用: 通过连接池管理,可以避免频繁地创建和销毁数据库连接,提高连接的复用性,从而减少系统开销。
- 提高性能: 由于数据库连接已经创建并保持在池中,因此在进行数据库操作时无需再次创建连接,可以大大减少连接创建和销毁的开销,从而提高系统的性能。
- 管理资源: 连接池可以有效地管理数据库连接,避免资源泄漏和浪费。当连接不再使用时,可以被回收并重新利用,从而提高了资源的利用率。
2.2 数据库和连接池配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
driver-class-name: com.mysql.jdbc.Driver
username: xx
password: xx
type: com.alibaba.druid.pool.DruidDataSource
三、整合Mybatis-plus
上面我们添加了MySQL,万事俱备只欠东风,这个东风就是持久层框架——Mybatis-plus。它具有一下的特点:
- 只做增强不做改变,引入它不会对现有工厂产生影响,如丝般顺滑。
- 只需简单配置,即可快速进行单表CRUD操作,从而节省大量时间。
- 代码生成、物理分页、性能分析等功能一应俱全。
3.1 添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
3.2 配置
mybatis-plus:
# xml格式的mapper文件路径
mapper-locations: classpath*:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
四、user-demo
现在我们写一个demo来说明,不同的class
应该存在哪个文件夹下面,以及如何使用mybatis-plus。
4.1 数据库结构
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.2 实体类User
@TableName("user")
public class user {
@TableId
private Long id;
private String name;
private Integer age;
public user() {
}
public user(Long id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
4.3 UserMapper和UserMapper.xml
UserMapper:
package com.shijiangdiya.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.catalina.User;
@Mapper
public interface UserMapper extends BaseMapper<User> {
/**
* 查询用户信息
* @return
*/
List<UserVO> queryUserInfo();
}
- 可以看到UserMapper继承了BaseMapper,那么我们就可以使用由Mybatis-plus提供的CRUD方法,极大地提高开发效率。这里需要传入BaseMapper的泛型——User(就是实体类),告诉Mybatis-plus我这个是User的Mapper。
- 还需要注解
@Mapper
,后面需要根据这个注解进行扫描。
UserMapper.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.shijiangdiya.mapper.UserMapper">
<select id="queryUserInfo" resultType="com.shijiangdiya.model.user.UserVO">
select
name,
age
from user
</select>
</mapper>
一定要注意,其中namespace的值就是UserMapper的路径。如何判断二者连接起来了呢?
4.4 UserService和UserServiceImpl
UserService:
package com.shijiangdiya.service;
import com.baomidou.mybatisplus.service.IService;
import com.shijiangdiya.entity.user.User;
import com.shijiangdiya.model.user.UserVO;
import java.util.List;
public interface UserService extends IService<User> {
List<UserVO> queryUserInfo();
}
UserServiceImpl:
package com.shijiangdiya.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.shijiangdiya.entity.user.User;
import com.shijiangdiya.mapper.UserMapper;
import com.shijiangdiya.model.user.UserVO;
import com.shijiangdiya.service.UserService;
import java.util.List;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
@Override
public List<UserVO> queryUserInfo() {
return baseMapper.queryUserInfo();
}
}
4.5 UserController
package com.shijiangdiya.controller;
import com.shijiangdiya.model.user.UserVO;
import com.shijiangdiya.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public List<UserVO> users(){
return userService.queryUserInfo();
}
}
五、测试
我们使用ApiPost测试一下,当然PostMan也是非常可以的呢。