IDEA2024.2 SpringBoot ver3.2.6+Mybatis项目搭建案例(附带源码)

1.创建模块

1.启动IDEA,点击新建模块,勾选正确的内容,和组织名,项目工件

注意事项:

  1. 选择Location时注意当前的模块位置
  2. 选择项目管理工具为maven
  3. PackageName包名的书写
  4. jdk版本和Java版本保持一致
  5. idea2020老版本使用不了新版本的jdk,需要注意

在这里插入图片描述

2.选择框架支持

由于我们是SpringBoot的web项目,以及使用了mybatis
所以添加Web下的SpringWeb支持和SQL下的Mysql以及Mybatis框架支持
注意事项:

  1. 勾选版本为3.2.6

在这里插入图片描述
然后点击创建

2.直接生成的代码和相关配置

首先pom文件中我们加入mybatis的逆向工程文件
mybatis-generator.xml 偷个懒 如果不会的话私信我,我单独再发一个贴

2.1 数据库的处理

在yml文件中我们可以设置数据库的四大件信息

spring:
  #数据库四大件
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring01
    username: root
    password: 123
#应用的名称
  application:
    name: springboot

#服务器的端口号
server:
  port: 9191

然后至于实体类和mapper文件我们直接通过逆向工程

<?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>   <context id="Mysql" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否生成注释代时间戳-->
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接地址账号密码-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/book?serverTimezone=UTC"
                        userId="root"
                        password="123">
        </jdbcConnection>
        <javaTypeResolver>
            <!--该属性可以控制是否强制DECIMAL和NUMERIC类型的字段转换为Java类型的java.math.BigDecimal,默认值为false,一般不需要配置。-->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!--生成Model类存放位置-->
        <javaModelGenerator targetPackage="com.siron.domain" targetProject="src/main/java">
            <!--enableSubPackages:如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false。-->
            <property name="enableSubPackages" value="true"/>
            <!--trimStrings:是否对数据库查询结果进行trim操作,如果设置为true就会生成类似这样public void setUsername(String username) {this.username = username == null ? null : username.trim();}的setter方法。默认值为false。-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--生成映射xml文件存放位置-->
        <sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources/">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成Dao类存放位置(*Mapper.java)-->
        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
            type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
            type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
            type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
        -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.siron.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!--生成对应表及类名-->
        <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 enableSelectByPrimaryKey相应的配置表示是否生成相应的接口 -->
        <table tableName="book"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"
               enableSelectByPrimaryKey="true"
               enableUpdateByPrimaryKey="true"
               enableDeleteByPrimaryKey="true"
        >
            <!-- 设置为false,MBG会尝试将返回的名称转化为驼峰形式 -->

            <!--useActualColumnNames:
            (1)如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。
            (2)如果为false(默认值),MGB将会尝试把返回的名称转换为驼峰形式。
            在这两种情况下,可以通过 元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性。-->
            <property name="useActualColumnNames" value="false"/>
            <!-- 数据库表主键 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true" />
        </table>
    </context>
</generatorConfiguration>

由于这里只做演示,我们只选取一张表

生产的实体为:
domain.Book

package com.siron.domain;

public class Book {
    private Integer id;

    private String type;

    private String name;

    private String desc;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type == null ? null : type.trim();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc == null ? null : desc.trim();
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", type='" + type + '\'' +
                ", name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

2.2 mapper接口

注意:需要加入注解 @Mapper

package com.siron.dao;

import com.siron.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

//springboot项目必须在mapper中引入注解
@Mapper
public interface BookMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);

    //查询全部
    @Select("select * from book")
    List<Book> selectAll();
}

上述的查询全部为手动添加

然后就是resouces资源文件夹下的mapper文件

2.3mapper映射文件

<?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.siron.dao.BookMapper">
  <resultMap id="BaseResultMap" type="com.siron.domain.Book">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="type" jdbcType="VARCHAR" property="type" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="desc" jdbcType="VARCHAR" property="desc" />
  </resultMap>
  <sql id="Base_Column_List">
    id, type, name, desc
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from book
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from book
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.siron.domain.Book">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into book (type, name, desc
      )
    values (#{type,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.siron.domain.Book">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into book
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="type != null">
        type,
      </if>
      <if test="name != null">
        name,
      </if>
      <if test="desc != null">
        desc,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="type != null">
        #{type,jdbcType=VARCHAR},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="desc != null">
        #{desc,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.siron.domain.Book">
    update book
    <set>
      <if test="type != null">
        type = #{type,jdbcType=VARCHAR},
      </if>
      <if test="name != null">
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="desc != null">
        desc = #{desc,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.siron.domain.Book">
    update book
    set type = #{type,jdbcType=VARCHAR},
      name = #{name,jdbcType=VARCHAR},
      desc = #{desc,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>
</mapper>

3.控制层业务层

这里没什么好说的,rest风格

3.1控制器

package com.siron.controller;


import com.siron.domain.Book;
import com.siron.service.BookService;
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("/books")
public class BookController {

    //自动注入
    @Autowired
    private BookService bookService;

    @GetMapping
    public String getBooks() {
        List<Book> bookList= bookService.getAll();
        return  bookList.toString();
    }
}

3.2业务层

3.2.1 业务层接口

package com.siron.service;

import com.siron.domain.Book;

import java.util.List;

public interface BookService {
    List<Book> getAll();
}

3.2.2 业务层实现类

package com.siron.service;

import com.siron.dao.BookMapper;
import com.siron.domain.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService{

    //自动注入mapper
    @Autowired
    private BookMapper bookMapper;

    @Override
    public List<Book> getAll() {
        System.out.println("业务层的查询全部执行了");
        return bookMapper.selectAll();
    }
}

4.运行

springboot启动类

package com.siron;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application1 {

    public static void main(String[] args) {
        SpringApplication.run(Application1.class, args);
    }

}

5.结果

在这里插入图片描述
然后就是控制台的全部信息

"C:\Program Files\Java\jdk-21\bin\java.exe" -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:D:\软件安装位置\IntelliJ IDEA 2024.1.2\lib\idea_rt.jar=56595:D:\软件安装位置\IntelliJ IDEA 2024.1.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath E:\springboot_test\s_06_springboot\target\classes;E:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-web\3.2.6\spring-boot-starter-web-3.2.6.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot-starter\3.2.6\spring-boot-starter-3.2.6.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot\3.2.6\spring-boot-3.2.6.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot-autoconfigure\3.2.6\spring-boot-autoconfigure-3.2.6.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-logging\3.2.6\spring-boot-starter-logging-3.2.6.jar;E:\Maven\maven_repository\ch\qos\logback\logback-classic\1.4.14\logback-classic-1.4.14.jar;E:\Maven\maven_repository\ch\qos\logback\logback-core\1.4.14\logback-core-1.4.14.jar;E:\Maven\maven_repository\org\apache\logging\log4j\log4j-to-slf4j\2.21.1\log4j-to-slf4j-2.21.1.jar;E:\Maven\maven_repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;E:\Maven\maven_repository\org\slf4j\jul-to-slf4j\2.0.13\jul-to-slf4j-2.0.13.jar;E:\Maven\maven_repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;E:\Maven\maven_repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-json\3.2.6\spring-boot-starter-json-3.2.6.jar;E:\Maven\maven_repository\com\fasterxml\jackson\core\jackson-databind\2.15.4\jackson-databind-2.15.4.jar;E:\Maven\maven_repository\com\fasterxml\jackson\core\jackson-annotations\2.15.4\jackson-annotations-2.15.4.jar;E:\Maven\maven_repository\com\fasterxml\jackson\core\jackson-core\2.15.4\jackson-core-2.15.4.jar;E:\Maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.15.4\jackson-datatype-jdk8-2.15.4.jar;E:\Maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.15.4\jackson-datatype-jsr310-2.15.4.jar;E:\Maven\maven_repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.15.4\jackson-module-parameter-names-2.15.4.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-tomcat\3.2.6\spring-boot-starter-tomcat-3.2.6.jar;E:\Maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.24\tomcat-embed-core-10.1.24.jar;E:\Maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.24\tomcat-embed-el-10.1.24.jar;E:\Maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.24\tomcat-embed-websocket-10.1.24.jar;E:\Maven\maven_repository\org\springframework\spring-web\6.1.8\spring-web-6.1.8.jar;E:\Maven\maven_repository\org\springframework\spring-beans\6.1.8\spring-beans-6.1.8.jar;E:\Maven\maven_repository\io\micrometer\micrometer-observation\1.12.6\micrometer-observation-1.12.6.jar;E:\Maven\maven_repository\io\micrometer\micrometer-commons\1.12.6\micrometer-commons-1.12.6.jar;E:\Maven\maven_repository\org\springframework\spring-webmvc\6.1.8\spring-webmvc-6.1.8.jar;E:\Maven\maven_repository\org\springframework\spring-aop\6.1.8\spring-aop-6.1.8.jar;E:\Maven\maven_repository\org\springframework\spring-context\6.1.8\spring-context-6.1.8.jar;E:\Maven\maven_repository\org\springframework\spring-expression\6.1.8\spring-expression-6.1.8.jar;E:\Maven\maven_repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\3.0.3\mybatis-spring-boot-starter-3.0.3.jar;E:\Maven\maven_repository\org\springframework\boot\spring-boot-starter-jdbc\3.2.6\spring-boot-starter-jdbc-3.2.6.jar;E:\Maven\maven_repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;E:\Maven\maven_repository\org\springframework\spring-jdbc\6.1.8\spring-jdbc-6.1.8.jar;E:\Maven\maven_repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\3.0.3\mybatis-spring-boot-autoconfigure-3.0.3.jar;E:\Maven\maven_repository\org\mybatis\mybatis\3.5.14\mybatis-3.5.14.jar;E:\Maven\maven_repository\org\mybatis\mybatis-spring\3.0.3\mybatis-spring-3.0.3.jar;E:\Maven\maven_repository\com\mysql\mysql-connector-j\8.3.0\mysql-connector-j-8.3.0.jar;E:\Maven\maven_repository\org\slf4j\slf4j-api\2.0.13\slf4j-api-2.0.13.jar;E:\Maven\maven_repository\org\springframework\spring-core\6.1.8\spring-core-6.1.8.jar;E:\Maven\maven_repository\org\springframework\spring-jcl\6.1.8\spring-jcl-6.1.8.jar;E:\Maven\maven_repository\org\springframework\spring-tx\6.1.8\spring-tx-6.1.8.jar;E:\Maven\maven_repository\org\mybatis\generator\mybatis-generator-core\1.3.5\mybatis-generator-core-1.3.5.jar com.siron.Application1

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.6)

2024-05-31T12:06:14.119+08:00  INFO 9592 --- [springboot] [           main] com.siron.Application1                   : Starting Application1 using Java 21.0.3 with PID 9592 (E:\springboot_test\s_06_springboot\target\classes started by one in E:\springboot_test)
2024-05-31T12:06:14.122+08:00  INFO 9592 --- [springboot] [           main] com.siron.Application1                   : No active profile set, falling back to 1 default profile: "default"
2024-05-31T12:06:15.042+08:00  INFO 9592 --- [springboot] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 9191 (http)
2024-05-31T12:06:15.055+08:00  INFO 9592 --- [springboot] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-05-31T12:06:15.055+08:00  INFO 9592 --- [springboot] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.24]
2024-05-31T12:06:15.103+08:00  INFO 9592 --- [springboot] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-05-31T12:06:15.104+08:00  INFO 9592 --- [springboot] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 926 ms
2024-05-31T12:06:15.546+08:00  INFO 9592 --- [springboot] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 9191 (http) with context path ''
2024-05-31T12:06:15.555+08:00  INFO 9592 --- [springboot] [           main] com.siron.Application1                   : Started Application1 in 1.853 seconds (process running for 2.457)
2024-05-31T12:06:19.968+08:00  INFO 9592 --- [springboot] [nio-9191-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-05-31T12:06:19.968+08:00  INFO 9592 --- [springboot] [nio-9191-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-05-31T12:06:19.969+08:00  INFO 9592 --- [springboot] [nio-9191-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
业务层的查询全部执行了
2024-05-31T12:06:20.006+08:00  INFO 9592 --- [springboot] [nio-9191-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-05-31T12:06:20.126+08:00  INFO 9592 --- [springboot] [nio-9191-exec-1] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@10dbd0f0
2024-05-31T12:06:20.127+08:00  INFO 9592 --- [springboot] [nio-9191-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

到这里案例就结束了,没有加页面进行运行,通过直接访问网址的方式

6.完整项目结构

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值