0


Java(一):创建 Spring Boot 项目并实现连接操作MySQL数据库

创建 Spring Boot 项目并实现连接操作MySQL数据库

准备

MySQL

在这里插入图片描述

命令

$ docker pull mysql
$ docker run --name local-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

Maven

相关地址

下载地址:

https://maven.apache.org/

maven配置方法地址:

https://developer.aliyun.com/mvn/guide

仓库搜索地址:

https://mvnrepository.com/

https://repo.maven.apache.org/


maven

本地配置

conf/settings.xml

<!-- TAG··· --><!-- 指定下载依赖到本地的路径 --><localRepository>${user.home}/Documents/AAA-PLee/maven/repository</localRepository><!-- TAG··· --><!-- 配置为阿里云公共仓库 --><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror><!-- TAG··· -->

***下载

idea

并配置本地环境

maven

在这里插入图片描述


Maven

构建

生命周期

  • Maven的构建生命周期包括三个阶段cleanbuildsite1. clean:清理项目,删除之前的编译结果和构建产生的文件。2. build:构建项目,包括编译、测试、打包等操作。3. site:生成项目文档和报告,例如测试报告、代码覆盖率报告等。
  • 每个阶段都包含了一些插件和目标,Maven会按照预定义的顺序依次执行。例如,在build阶段,Maven会依次执行以下目标: 1. validate:验证项目是否正确。2. compile:编译项目源代码。3. test:运行项目的测试用例。4. package:将项目打包成jar或war文件。5. verify:验证打包结果是否正确。6. install:将打包结果安装到本地Maven仓库。7. deploy:将打包结果部署到远程Maven仓库。

idea

所需插件下载

在这里插入图片描述

EasyCode

用于快速生成与数据库相关的项目目录和代码

MyBatisPlus

用于

java

sql.xml

之间的跳转

idea

创建项目

配置

Server URL

地址:https://start.aliyun.com/

在这里插入图片描述

填写项目相关信息

在这里插入图片描述

在这里插入图片描述

创建项目成功(运行并测试)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

idea

测试能否正常连接

MySQL

在这里插入图片描述

创建数据库表

在这里插入图片描述

添加项目内连接

MySQL

的配置

搜索连接

MySQL

使用的依赖包

在这里插入图片描述

编写连接数据库配置文件

***在

pom.xml

中引入

MySQL依赖包

(别忘了

Load Maven Changes

)***

<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency>

***创建并编写

application.yml

路径:

user/src/main/resources/application.yml
server:port:8000spring:application:name: user-service
  datasource:url: jdbc:mysql://127.0.0.1:3306/java_app
    username: root
    password:123456driver-class-name: com.mysql.cj.jdbc.Driver

利用插件

EasyCode

快速创建操作数据库相关代码

在这里插入图片描述

在这里插入图片描述

查看创建完成后的项目目录结构

在这里插入图片描述


Java

应用程序通常使用以下几个组件来组织代码***

这些组件之间的关系通常是

Controller

调用

Service

Service

定义

impl

文件夹内的

业务实现类

业务实现类

调用

DAO

DAO

操作

Mapper

中的

SQL语句

Entity

表示数据库表结构

实体类

简单来说,

Controller

用于接收用户请求,

Service

实现业务逻辑,

DAO

操作数据库,

Entity

表示数据库表结构

/service/impl/xxx.java

中实现具体业务逻辑

/resources/mapper/xxx.xml

中添加操作数据的

sql

语句

  • Controller:控制器,用于接收用户请求并调用相应的处理方法来处理请求,然后返回响应结果。通常使用 Spring MVC 框架来实现。
  • Service:服务层,用于实现业务逻辑,调用 DAO 进行数据操作。通常包含接口和实现类。
  • DAO:数据访问对象,用于操作数据库。通常使用 MyBatisHibernate 等框架来实现。
  • Entity:实体类,用于表示数据库中的表结构。通常包含类属性和对应的 getter/setter 方法。

解决项目中导入库报错问题

***利用

https://mvnrepository.com/

搜索解决***

<!-- 解决完成后的pom.xml --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

尝试运行(报错:没有引入对应版本)

在这里插入图片描述

<!-- <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>3.1.0</version>
</dependency> --><!-- 修改为 --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId></dependency>

***尝试运行(缺少

@MapperScan

注解)***

在这里插入图片描述

注意:

尽量选择使用量大的依赖包
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency>
// user/src/main/java/com/example/user/UserApplication.javapackagecom.example.user;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.mybatis.spring.annotation.MapperScan;@SpringBootApplication@MapperScan(basePackages ="com.example.user.dao")publicclassUserApplication{publicstaticvoidmain(String[] args){SpringApplication.run(UserApplication.class, args);}}
  • @SpringBootApplication注解是一个组合注解,它的作用是标记一个Spring Boot应用程序的主类。它包括三个注解:@Configuration@EnableAutoConfiguration@ComponentScan- @Configuration:将该类标记为Spring应用程序上下文中的一个bean定义的源。即在该类中定义的bean可以被Spring容器管理。- @EnableAutoConfiguration:自动配置Spring Boot应用程序所需的Bean。- @ComponentScan:扫描应用程序中的其他组件,例如控制器、服务和存储库。
  • @MapperScan是MyBatis框架中的一个注解,它的作用是扫描指定的包路径,找到所有标记了@Mapper注解的接口,并将这些接口创建成MyBatis的Mapper接口实现类 - 可以在需要使用Mapper的地方自动注入这些Mapper实现类的实例,从而方便地访问数据库。

***尝试运行(运行成功,若运行后立即结束,有可能为未引入

spring-boot-starter-web

包)***

尝试引入即可

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

最终

pom.xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

访问接口

请求失败

在这里插入图片描述

在这里插入图片描述

***解决报错(告诉

MyBatis

去哪里找

SQL

语句)***

mybatis:mapper-locations: classpath:**/mapper/*.xml

重新运行并请求

在这里插入图片描述

完整源码

目录结构

在这里插入图片描述

引入依赖:

user/pom.xml
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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><groupId>com.example</groupId><artifactId>user</artifactId><version>0.0.1-SNAPSHOT</version><name>user</name><description>user</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.user.UserApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

服务相关配置:

user/src/main/resources/application.yml
server:port:8000spring:application:name: user-service
  datasource:url: jdbc:mysql://127.0.0.1:3306/java_app
    username: root
    password:123456driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:mapper-locations: classpath:**/mapper/*.xml

入口:

user/src/main/java/com/example/user/UserApplication.java
packagecom.example.user;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.mybatis.spring.annotation.MapperScan;@SpringBootApplication@MapperScan(basePackages ="com.example.user.dao")publicclassUserApplication{publicstaticvoidmain(String[] args){SpringApplication.run(UserApplication.class, args);}}

(User)表控制层:

user/src/main/java/com/example/user/controller/UserController.java
packagecom.example.user.controller;importcom.example.user.entity.User;importcom.example.user.service.UserService;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.*;importjavax.annotation.Resource;/**
 * (User)表控制层
 *
 * @author makejava
 * @since 2023-06-12 14:13:44
 */@RestController@RequestMapping("user")publicclassUserController{/**
     * 服务对象
     */@ResourceprivateUserService userService;/**
     * 分页查询
     *
     * @param user 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */@GetMappingpublicResponseEntity<Page<User>>queryByPage(User user,PageRequest pageRequest){returnResponseEntity.ok(this.userService.queryByPage(user, pageRequest));}/**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */@GetMapping("{id}")publicResponseEntity<User>queryById(@PathVariable("id")String id){returnResponseEntity.ok(this.userService.queryById(id));}/**
     * 新增数据
     *
     * @param user 实体
     * @return 新增结果
     */@PostMappingpublicResponseEntity<User>add(User user){returnResponseEntity.ok(this.userService.insert(user));}/**
     * 编辑数据
     *
     * @param user 实体
     * @return 编辑结果
     */@PutMappingpublicResponseEntity<User>edit(User user){returnResponseEntity.ok(this.userService.update(user));}/**
     * 删除数据
     *
     * @param id 主键
     * @return 删除是否成功
     */@DeleteMappingpublicResponseEntity<Boolean>deleteById(String id){returnResponseEntity.ok(this.userService.deleteById(id));}}

(User)表服务接口:

user/src/main/java/com/example/user/service/UserService.java
packagecom.example.user.service;importcom.example.user.entity.User;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;/**
 * (User)表服务接口
 *
 * @author makejava
 * @since 2023-06-12 14:13:49
 */publicinterfaceUserService{/**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */UserqueryById(String id);/**
     * 分页查询
     *
     * @param user 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */Page<User>queryByPage(User user,PageRequest pageRequest);/**
     * 新增数据
     *
     * @param user 实例对象
     * @return 实例对象
     */Userinsert(User user);/**
     * 修改数据
     *
     * @param user 实例对象
     * @return 实例对象
     */Userupdate(User user);/**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */booleandeleteById(String id);}

(User)表服务实现类:

user/src/main/java/com/example/user/service/impl/UserServiceImpl.java
packagecom.example.user.service.impl;importcom.example.user.entity.User;importcom.example.user.dao.UserDao;importcom.example.user.service.UserService;importorg.springframework.stereotype.Service;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageImpl;importorg.springframework.data.domain.PageRequest;importjavax.annotation.Resource;/**
 * (User)表服务实现类
 *
 * @author makejava
 * @since 2023-06-12 14:13:50
 */@Service("userService")publicclassUserServiceImplimplementsUserService{@ResourceprivateUserDao userDao;/**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */@OverridepublicUserqueryById(String id){returnthis.userDao.queryById(id);}/**
     * 分页查询
     *
     * @param user 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */@OverridepublicPage<User>queryByPage(User user,PageRequest pageRequest){long total =this.userDao.count(user);returnnewPageImpl<>(this.userDao.queryAllByLimit(user, pageRequest), pageRequest, total);}/**
     * 新增数据
     *
     * @param user 实例对象
     * @return 实例对象
     */@OverridepublicUserinsert(User user){this.userDao.insert(user);return user;}/**
     * 修改数据
     *
     * @param user 实例对象
     * @return 实例对象
     */@OverridepublicUserupdate(User user){this.userDao.update(user);returnthis.queryById(user.getId());}/**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */@OverridepublicbooleandeleteById(String id){returnthis.userDao.deleteById(id)>0;}}

(User)表数据库访问层:

user/src/main/java/com/example/user/dao/UserDao.java
packagecom.example.user.dao;importcom.example.user.entity.User;importorg.apache.ibatis.annotations.Param;importorg.springframework.data.domain.Pageable;importjava.util.List;/**
 * (User)表数据库访问层
 *
 * @author makejava
 * @since 2023-06-12 14:13:45
 */publicinterfaceUserDao{/**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */UserqueryById(String id);/**
     * 查询指定行数据
     *
     * @param user 查询条件
     * @param pageable         分页对象
     * @return 对象列表
     */List<User>queryAllByLimit(User user,@Param("pageable")Pageable pageable);/**
     * 统计总行数
     *
     * @param user 查询条件
     * @return 总行数
     */longcount(User user);/**
     * 新增数据
     *
     * @param user 实例对象
     * @return 影响行数
     */intinsert(User user);/**
     * 批量新增数据(MyBatis原生foreach方法)
     *
     * @param entities List<User> 实例对象列表
     * @return 影响行数
     */intinsertBatch(@Param("entities")List<User> entities);/**
     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
     *
     * @param entities List<User> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
     */intinsertOrUpdateBatch(@Param("entities")List<User> entities);/**
     * 修改数据
     *
     * @param user 实例对象
     * @return 影响行数
     */intupdate(User user);/**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */intdeleteById(String id);}

(User)实体类:

user/src/main/java/com/example/user/entity/User.java
packagecom.example.user.entity;importjava.io.Serializable;/**
 * (User)实体类
 *
 * @author makejava
 * @since 2023-06-12 14:13:46
 */publicclassUserimplementsSerializable{privatestaticfinallong serialVersionUID =264722085318530649L;privateString id;privateString name;privateInteger age;privateString sex;privateString phone;publicStringgetId(){return id;}publicvoidsetId(String id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicIntegergetAge(){return age;}publicvoidsetAge(Integer age){this.age = age;}publicStringgetSex(){return sex;}publicvoidsetSex(String sex){this.sex = sex;}publicStringgetPhone(){return phone;}publicvoidsetPhone(String phone){this.phone = phone;}}

SQL:

user/src/main/resources/mapper/UserDao.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.user.dao.UserDao"><resultMaptype="com.example.user.entity.User"id="UserMap"><resultproperty="id"column="id"jdbcType="VARCHAR"/><resultproperty="name"column="name"jdbcType="VARCHAR"/><resultproperty="age"column="age"jdbcType="INTEGER"/><resultproperty="sex"column="sex"jdbcType="VARCHAR"/><resultproperty="phone"column="phone"jdbcType="VARCHAR"/></resultMap><!--查询单个--><selectid="queryById"resultMap="UserMap">
        select
        id, name, age, sex, phone
        from user
        where id = #{id}
    </select><!--查询指定行数据--><selectid="queryAllByLimit"resultMap="UserMap">
        select
        id, name, age, sex, phone
        from user
        <where><iftest="id != null and id != ''">
                and id = #{id}
            </if><iftest="name != null and name != ''">
                and name = #{name}
            </if><iftest="age != null">
                and age = #{age}
            </if><iftest="sex != null and sex != ''">
                and sex = #{sex}
            </if><iftest="phone != null and phone != ''">
                and phone = #{phone}
            </if></where>
        limit #{pageable.offset}, #{pageable.pageSize}
    </select><!--统计总行数--><selectid="count"resultType="java.lang.Long">
        select count(1)
        from user
        <where><iftest="id != null and id != ''">
                and id = #{id}
            </if><iftest="name != null and name != ''">
                and name = #{name}
            </if><iftest="age != null">
                and age = #{age}
            </if><iftest="sex != null and sex != ''">
                and sex = #{sex}
            </if><iftest="phone != null and phone != ''">
                and phone = #{phone}
            </if></where></select><!--新增所有列--><insertid="insert"keyProperty="id"useGeneratedKeys="true">
        insert into user(name, age, sex, phone)
        values (#{name}, #{age}, #{sex}, #{phone})
    </insert><insertid="insertBatch"keyProperty="id"useGeneratedKeys="true">
        insert into user(name, age, sex, phone)
        values
        <foreachcollection="entities"item="entity"separator=",">
            (#{entity.name}, #{entity.age}, #{entity.sex}, #{entity.phone})
        </foreach></insert><insertid="insertOrUpdateBatch"keyProperty="id"useGeneratedKeys="true">
        insert into user(name, age, sex, phone)
        values
        <foreachcollection="entities"item="entity"separator=",">
            (#{entity.name}, #{entity.age}, #{entity.sex}, #{entity.phone})
        </foreach>
        on duplicate key update
        name = values(name),
        age = values(age),
        sex = values(sex),
        phone = values(phone)
    </insert><!--通过主键修改数据--><updateid="update">
        update user
        <set><iftest="name != null and name != ''">
                name = #{name},
            </if><iftest="age != null">
                age = #{age},
            </if><iftest="sex != null and sex != ''">
                sex = #{sex},
            </if><iftest="phone != null and phone != ''">
                phone = #{phone},
            </if></set>
        where id = #{id}
    </update><!--通过主键删除--><deleteid="deleteById">
        delete from user where id = #{id}
    </delete></mapper>

本文转载自: https://blog.csdn.net/weixin_43526371/article/details/131172144
版权归原作者 Prosper Lee 所有, 如有侵权,请联系我们删除。

“Java(一):创建 Spring Boot 项目并实现连接操作MySQL数据库”的评论:

还没有评论