• 【创建springboot-maven项目搭建mybatis框架】(超详细)


    目录

    1. 创建Spring Boot项目,相关参数

    2. 创建数据库

    3. 在IntelliJ IDEA中配置Database面板

    4. 添加数据库编程的依赖

    5. 关于Mybatis框架

    6. Mybatis编程:插入相册数据


    1. 创建Spring Boot项目,相关参数

    项目名称:csmall-product(自己取个名称)

    Group:cn.tedu

    Artifactcsmall-product

    Package:cn.csmall.product

    Java版本:1.8

    创建项目时勾选的依赖项:无

    Spring Boot版本:2.5.9(自行在pom.xml中修改)

    2. 创建数据库

    登录MySQL客户端,创建mall_pms数据库,命令如下:

    create database mall_pms;

     
    

    3. 在IntelliJ IDEA中配置Database面板

     

    4. 添加数据库编程的依赖

    pom.xml文件的标签内添加:

    1. org.mybatis.spring.boot
    2. mybatis-spring-boot-starter
    3. 2.2.2
    4. mysql
    5. mysql-connector-java
    6. runtime

     当添加数据库编程的依赖项(以上的mybatis-spring-boot-starter)后,无论是测试,还是尝试启动项目,都会报错:

    Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties\$DataSourceBeanCreationException: Failed to determine a suitable driver class

    这是因为在执行Spring Boot测试,或启动项目时,只要项目中添加了数据库编程的依赖,就会自动读取连接数据库的配置,但是,目前还没有添加这些配置,所以报错!

    src/main/resources下的application.properties中添加连接数据库的配置信息,此配置文件是Spring Boot项目默认的主配置文件。

    添加的配置信息如下:

    1. # 连接数据库的配置
    2. spring.datasource.url=jdbc:mysql://localhost:3306/mall_pms?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    3. spring.datasource.username=root
    4. spring.datasource.password=root

    注意:添加以上配置后,无论是启动项目,还是执行Spring Boot测试,都不会报告错误,但是,本质上只是读取了以上配置,并不代表以上配置是正确的!

    可以在Spring Boot测试类中添加测试方法,以检验以上配置是否正确:

    1. @Autowired
    2. DataSource dataSource; // 数据源,导包时使用java.sql包
    3. @Test
    4. void getConnection() throws Throwable {
    5. dataSource.getConnection(); // 获取与数据库的连接对象,会执行连接到数据库的操作
    6. }

    如果配置信息中,连接数据库的URL中的主机名错误,则会出现:

    Caused by: java.net.UnknownHostException: localhast

    如果配置信息中,连接数据库的端口号错误,导致无法连接上,则会出现:

    Caused by: java.net.ConnectException: Connection refused: connect

    另外,如果MySQL服务没有启动,也会导致以上错误!

    如果配置信息中,数据库名称错误,则会出现:

    java.sql.SQLSyntaxErrorException: Unknown database 'm0ll_pms'

    如果配置信息中,服务器时区值错误,则会出现:

    Caused by: java.time.zone.ZoneRulesException: Unknown time-zone ID: Asia/Beijing

    如果配置信息中,连接数据库的用户名或密码错误,则会出现:

    java.sql.SQLException: Access denied for user 'root1234'@'localhost' (using password: YES)
    
    java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    
    java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)

    5. 关于Mybatis框架

    Mybatis框架是主流的用于处理数据库编程的框架,主要用于简化数据库编程。

    使用Mybatis框架,除了首次的“一次性”配置以外,主要的代码量在于:设计抽象方法、配置抽象方法映射的SQL语句。

    6. Mybatis编程:插入相册数据

    插入相册数据需要执行的SQL语句大致是:

    insert into pms_album (name, description, sort) values (?, ?, ?)

    提示:以上字段列表中,由于pms_album表的id是自动编号的,则不需要写上id字段名,在values部分也不需要写id字段的值。

    使用Mybatis时,抽象方法必须设计在接口中,通常,此类接口使用Mapper作为接口名的最后一个单词。

    则在项目的根包(创建项目后就已经自动创建好的包)下创建mapper.AlbumMapper接口:

    1. package cn.tedu.csmall.product.mapper;
    2. public interface AlbumMapper {
    3. }

     然后,在接口中声明“插入相册数据”的抽象方法,即:

    xx  xx(xx);

    在使用Mybatis时,如果执行的是增、删、改操作,始终使用int作为返回值类型,表示“受影响的行数”,或者,也可以使用void,但不推荐。

    关于方法的名称,阿里巴巴的《Java开发手册》提出了参考:

    1) 获取单个对象的方法用 get 做前缀。
    2) 获取多个对象的方法用 list 做前缀。
    3) 获取统计值的方法用 count 做前缀。
    4) 插入的方法用 save/insert 做前缀。
    5) 删除的方法用 remove/delete 做前缀。
    6) 修改的方法用 update 做前缀。

    关于参数列表,应该根据SQL语句中的参数来设计,如果需要执行的SQL语句中的参数较多,且具有相关性,应该进行封装,本次需要执行“插入相册数据”,则可以使用“相册”数据的实体类作为参数。

    关于MySQL中的字段类型与Java中的数据类型的对应关系:

    MySQL中的数据类型Java中的数据类型
    tinyint / smallint / intInteger
    bigintLong
    char / varchar / text系列String
    decimalBigDecimal
    datetimeLocalDateTime

    为了便于编写Xxx类,先在pom.xml中添加lombok依赖:

    1. <!-- Lombok的依赖项,主要用于简化POJO类的编写 -->
    2. <dependency>
    3. <groupId>org.projectlombok</groupId>
    4. <artifactId>lombok</artifactId>
    5. <version>1.18.20</version>
    6. <scope>provided</scope>
    7. </dependency>

    此依赖项可以通过注解,在编译期生成某些代码,例如:Setters & Getters、hashCode()equals()toString()、无参数构造方法、全参数构造方法等。

    在根包下创建pojo.entity.Album类:

    1. package cn.tedu.csmall.product.pojo.entity;
    2. import lombok.Data;
    3. import java.io.Serializable;
    4. import java.time.LocalDateTime;
    5. @Data
    6. public class Album implements Serializable {
    7. private Long id;
    8. private String name;
    9. private String description;
    10. private Integer sort;
    11. private LocalDateTime gmtCreate;
    12. private LocalDateTime gmtModified;
    13. }

    接下来,在AlbumMapper接口中添加抽象方法:

    int insert(Album album);

    然后,在src/main/resources下创建mapper文件夹,并在此文件夹中粘贴得到AlbumMapper.xml文件,关于此文件:

    • 根标签必须是
    • 根标签上必须配置namespace属性,取值为对应的接口的全限定名
    • 使用 /  /  /