1.创建模块
1.启动IDEA,点击新建模块,勾选正确的内容,和组织名,项目工件
注意事项:
- 选择Location时注意当前的模块位置
- 选择项目管理工具为maven
- PackageName包名的书写
- jdk版本和Java版本保持一致
- idea2020老版本使用不了新版本的jdk,需要注意
2.选择框架支持
由于我们是SpringBoot的web项目,以及使用了mybatis
所以添加Web下的SpringWeb支持和SQL下的Mysql以及Mybatis框架支持
注意事项:
- 勾选版本为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.
到这里案例就结束了,没有加页面进行运行,通过直接访问网址的方式