第二个文章

1. 关于实体类

实体类是POJO的其中一种。

用于表示项目中需要处理的数据

与java的对应关系

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

BigDecimal

编写规范

private 都有setter getter方法

必须重写equals 和hashcode 

必须实现serializable接口

建议重写tostring方法 输出个属性的值

使用lombok框架添加注解 可以自动生成代码 添加

@Data注解,可以在编译期生成:

  • 规范的Setter & Getter
  • 规范的hashCode()equals()
  • 包含各属性与值的toString()
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

注意:当使用了Lombok后,由于源代码中并没有Setter & Getter方法,所以,当编写代码时,IntelliJ IDEA不会提示相关方法,并且,即使强行输入调用这些方法的代码,还会报错,但是,并不影响项目的运行!为了解决此问题,强烈推荐安装Lombok插件

2. 通过Mybatis实现数据库编程

2.1. 关于Mybatis框架

mybatis主流解决数据库编程相关问题的框架 简化数据库编程

基础依赖项 artifactId: mybatis

独自使用比较麻烦 需要添加的依赖项的artifactId是:mybatis-spring

在Spring Boot项目中,直接添加mybatis-spring-boot-starter将包含以上依赖项,和其它必要的、常用的依赖项。

Mybatis框架简化数据库编程的表现为:

只需要定义访问数据的2.2抽象方法,并配置此抽象方法映射的SQL语句即可!

2.2. 关于抽象方法

能明确这个接口是数据访问接口,可以采取的做法有:

  1. 【不推荐】在接口上添加@Mapper注解
    • 每个数据访问接口上都需要此注解
  2. 【推荐】在配置类上添加@MapperScan注解,并配置数据访问接口所在的包
    • 在根包(含子孙包)下的任何添加了@Configuration注解的类都是配置类
    • 只需要一次配置,各数据访问接口不必添加@Mapper注解
    • package cn.tedu.csmall.product.config;
      
      import org.mybatis.spring.annotation.MapperScan;
      import org.springframework.context.annotation.Configuration;
      
      /**
       * Mybatis的配置类
       *
       * @author java@tedu.cn
       * @version 0.0.1
       */
      @Configuration
      @MapperScan("cn.tedu.csmall.product.mapper")
      public class MybatisConfiguration {
      
          public MybatisConfiguration() {
              System.out.println("创建配置类:MybatisConfiguration");
          }
      
      }

抽象方法必须定义在接口中 :Mybatis框架是通过“接口代理”的设计模式,生成了接口的实现对象!

抽象方法所在的接口,通常使用Mapper作为名称的最后一个单词!

  • 返回值类型:SQL操作是增、删、改类型的,使用int作为返回值类型,SQL操作是查询类型,只需要保证返回值类型可以封装必要的结果
  • 方法名称:自定义的,但推荐遵循规范,不要使用重载
  • 参数列表:取决于需要执行的SQL语句需要哪些参数,在抽象方法中,可以将这些参数一一列举出来,也可以将这些参数封装到自定义类中,使用自定义类作为抽象方法的参数
  • 抛出异常:无

关于抽象方法命名参考(来自《阿里巴巴Java开发手册》):

  • 获取单个对象的方法用 get 做前缀  get对象
  • 获取多个对象的方法用 list 做前缀 list对象
  • 获取统计值的方法用 count 做前缀 count值
  • 插入的方法用 save / insert 做前缀 insert方法名
  • 删除的方法用 remove / delete 做前缀 delete方法名
  • 修改的方法用 update 做前缀。

2.3. 关于配置SQL语句

在spring boot中整合了mybatis框架后 在数据访问接口的抽象方法上使用@Insert等注解来配置SQL语句,这种做法是不推荐的!在不是Spring Boot项目中,需要额外的配置,否则,将不识别抽象方法上的@Insert注解。

主要原因:

  • 长篇的SQL语句不易于阅读
  • 不便于实现特殊的配置
  • 部分配置不易于复用
  • 不便于实现与DBA(Database Administrator)协作

这个时候使用xml文件来配置sql语句 这类xml文件需要固定的、特殊的声明部分

步骤:

src/main/resources下创建mapper文件夹在此创建 xml文件

开始配置

  • 根标签必须是<mapper>
  • <mapper>标签上必须配置namespace属性,此属性的值是接口的全限定名(包名与类名)
  • <mapper>标签内部,使用<insert> / <delete> / <update> / <select>标签来配置增 / 删 / 改 / 查的SQL语句
  • 各配置SQL语句的标签必须配置id属性,取值为对应的抽象方法的名称
  • 各配置SQL语句的标签内部是配置SQL语句的
    • SQL语句不需要使用分号表示结束
    • 不可以随意添加注释
  • 在配置<select>标签时,必须配置resultTyperesultMap这2个属性中的其中1个
  • 另外,还需要在application.properties中配置XML文件所在的位置:

2.4. 测试

在Spring Boot项目中,当需要编写测试时,可以在src/test/java下的根包下创建测试类,并在类中编写测试方法。

则在测试的根包下创建mapper.AlbumMapperTests测试类:

package cn.tedu.csmall.product.mapper;

import cn.tedu.csmall.product.pojo.entity.Album;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class AlbumMapperTests {

    @Autowired
    AlbumMapper mapper;

    @Test
    void testInsert() {
        Album album = new Album();
        album.setName("测试相册001");
        album.setDescription("测试简介001");
        album.setSort(99); // 注意:取值必须是 [0, 255]

        int rows = mapper.insert(album);
        System.out.println("插入数据完成,受影响的行数=" + rows);
    }

}

如果此前没有正确的配置@MapperScan,在执行测试时,将出现以下错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'cn.tedu.csmall.product.mapper.AlbumMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

如果出现以下原因的操作错误:

  • 在XML文件中,根标签<mapper>namespace属性值配置有误
  • 在XML文件中,配置SQL语句的<insert>或类似标签的id属性值配置有误
  • application.properties配置文件中,没有正确的配置XML文件的位置

将出现以下错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.tedu.csmall.product.mapper.AlbumMapper.insert

zz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值