前言文章倒序来讲,从简单到困难,课堂项目文件最终会上传链接到首端

文章目录

前言

一、统计查询

二、 6. 查询最多1条数据

1.引入库

2.读入数据

在`BrandMapper`接口中添加抽象方法:

Mybatis会自动的将查询到的结果集中的数据封装到定义的返回结果类型中,但是,在默认情况下,只能处理列名(Column)与属性名(Property)一致的情况!在规范的软件开发中,推荐使用“来配置列与属性的映射关系:

关于以上“的配置:

– `id`属性:是自定义的名称,在“标签中的`resultMap`属性的值就是对应的“的`id`值- `type`属性:用于封装查询结果的类的全限定名- “子标签:用于配置主键的列、属性的映射关系- “子标签:用于配置普通(不是主键,也不是一对多、多对多的关联查询)的列、属性的映射关系另外,还建议使用“标签封装查询的字段列表,此标签需要与“标签配合使用,例如:三、 2. 关于SLF4j日志总结和最后:我文件中没有写关于更新、插入等操作,所以直接发布课件了,和查询流程都是一样的。关于sql文件数据库也在其中,关于如何快速导入sql文件也在课堂项目压缩包下,在idea最右边的database按钮中,详情可以自行搜索。


前言

提示这里可以添加本文记录的大概内容

例如:随着人工智能的不断发展机器学习这门技术也越来越重要,很多人都开启学习机器学习本文介绍机器学习的基础内容


提示:以下是本篇文章正文内容,下面案例可供参考

一、统计查询

一步:首先在xml文件插入如下语句,但首先我们引入配置sql语句xml模板。在我的资源里有MyBatis Mapper映射文件

SELECT count(*) FROM pms_brand;

第二步:在`BrandMapper`接口添加抽象方法:(温馨提示mapper添加@Repositry注释)

```
int count();
````

第三步:

在`BrandMapper.xml`中配置SQL语句:

```xml
<select id="count" resultType="int">
    SELECT count(*) FROM pms_brand
</select&gt;

  最终:目录结构如图所示我们接下来都按照这种方式去写,

二、 6. 查询最多1条数

1.引入

代码如下示例):

SELECT 
    id, name, pinyin, logo, description, 
    keywords, sort, sales, product_count, comment_count, 
    positive_comment_count, enable 
FROM 
	pms_brand 
WHERE 
	id=?
通常,在处理查询时,并**不建议使用实体类型作为查询结果**,因为绝大部分查询都不需要查询表中所有的字段,如果使用实体类型, 必然导致查询结果对象调用某些Getter时得到的结果会是`null`,并且,这些Getter返回结果永远会是`null`。
建议使用其它的POJO类型作为封装查询结果类型常见的POJO:

- `DO`:Data Object
- `DTO`:Data Transfer Object
- `VO`:View Object / Value Object
关于POJO的使用:

```
阿里巴巴Java开发手册参考领域模型命名规约
1) 数据对象xxxDO,xxx 即为数据表名。
2) 数据传输对象xxxDTO,xxx业务领域相关名称。
3) 展示对象xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名xxxPOJO。
```

另外:

```
阿里巴巴Java开发手册强制类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
```

2.读入数据

代码如下示例):

此次查询时,应该项目的根包下创建`pojo.vo.BrandStandardVO`类:

```java
@Data
public class BrandStandardVO implements Serializable {
	private Long id;
    private String name;
    private String pinyin;
    private String logo;
    private String description;
    private String keywords;
    private Integer sort;
    private Integer sales;
    private Integer productCount;
    private Integer commentCount;
    private Integer positiveCommentCount;
    private Integer enable;
}
```

在`BrandMapper`接口添加抽象方法

```java
BrandStandardVO getStandardById(Long id);
```

Mybatis自动的将查询到的结果集中的数据封装定义的返回结果类型中,但是,在默认情况下,只能处理列名(Column)与属性名(Property)一致的情况!
规范软件开发中,推荐使用`<resultMap>`来配置列与属性映射关系

```xml
<resultMap id="StandardResultMap" type="cn.tedu.csmall.product.pojo.vo.BrandStandardVO">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="product_count" property="productCount"/>
    <result column="comment_count" property="commentCount"/>
    <result column="positive_comment_count" property="positiveCommentCount"/>
</resultMap>
```

关于以上`<resultMap>`的配置:

– `id`属性:是自定义的名称,在`<select>`标签中的`resultMap`属性的值就是对应的`<resultMap>`的`id`值
– `type`属性用于封装查询结果的类的全限定
– `<id>`子标签用于配置主键的列、属性映射关系
– `<result>`子标签用于配置普通(不是主键,也不是一对多、多对多的关联查询)的列、属性的映射关系

另外,还建议使用`<sql>`标签封装查询的字段列表,此标签需要与`<include>`标签配合使用,例如

```xml
<select id="getStandardById" resultMap="StandardResultMap">
    SELECT
        <include refid="StandardQueryFields"/>
    FROM
        pms_brand
    WHERE
        id=#{id}
</select>

<sql id="StandardQueryFields">
    <if test="true">
        id, name, pinyin, logo, description,
        keywords, sort, sales, product_count, comment_count,
        positive_comment_count, enable
    </if>
</sql>
```
# 7. 关于IntelliJ IDEA错误的预判

**问题1:使用Lombok后,不会自动提示Setter和Getter,且使用相当方法后提示错误**

在IntelliJ IDEA中安装Lombok插件即可。

**问题2:使用Mybatis时,尝试自动装配Mapper接口对象提示错误**

- 【推荐】在Mapper接口上添加`@Repository`注解即可
- 【不推荐】使用`@Resource`替换`@Autowired`

另外,不使用`@MapperScan`,而是在每个Mapper接口上使用`@Mapper`也可以解决问题!

**问题3:在配置SQL的XML中,使用`<sql>`节点封装字段列表提示错误**

- 【不推荐】在IntelliJ IDEA中进行配置,不检查SQL

- 【推荐】使用某种合法的、不影响当前代码运行的代码片段,“骗”过IntelliJ IDEA即可,例如

三、

需求】查询品牌列表,暂不考虑分页,结果按照`sort`降序排列、`id`升序降序)。

需要执行的SQL语句大致是:


```mysql
select 
	id, name, pinyin, logo, description, 
	keywords, sort, sales, product_count, comment_count, 
	positive_comment_count, enable
from pms_brand order by sort desc, id
```
则在项目的根包下创建`pojo.vo.BrandListItemVO`类,在类中声明与以上字体列表匹配的属性:
```java
package cn.tedu.csmall.product.pojo.vo;

import lombok.Data;

import java.io.Serializable;

@Data
public class BrandListItemVO implements Serializable {

    private Long id;
    private String name;
    private String pinyin;
    private String logo;
    private String description;
    private String keywords;
    private Integer sort;
    private Integer sales;
    private Integer productCount;
    private Integer commentCount;
    private Integer positiveCommentCount;
    private Integer enable;

}
```
在`BrandMapper.java`接口中添加抽象方法:
```java
/**
 * 查询品牌列表
 *
 * @return 品牌列表,如果没有匹配的品牌,将返回长度为0的列表
 */
List<BrandListItemVO> list();
```
在`BrandMapper.xml`中配置SQL:
```xml
<select id="list" resultMap="ListResultMap">
    SELECT
        <include refid="ListQueryFields"/>
    FROM
        pms_brand
    ORDER BY
        sort DESC, id
</select>

<sql id="ListQueryFields">
    <if test="true">
        id, name, pinyin, logo, description,
        keywords, sort, sales, product_count, comment_count,
        positive_comment_count, enable
    </if>
</sql>

<!--注意这里的BrandListItemVO,已经不是封装成实体类了-->
<resultMap id="ListResultMap"
           type="cn.tedu.csmall.product.pojo.vo.BrandListItemVO">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="product_count" property="productCount"/>
    <result column="comment_count" property="commentCount"/>
    <result column="positive_comment_count" property="positiveCommentCount"/>
</resultMap>
```
完成后,在`BrandMapperTests`中编写执行测试
```java
@Test
void testList() {
    List<BrandListItemVO> list = mapper.list();
    System.out.println("查询品牌列表,查询结果中的数据的数量:" + list.size());
    for (BrandListItemVO brand : list) {
        System.out.println(brand);
    }
}

 2. 关于SLF4j日志

在Spring Boot项目中,在`spring-boot-starter`依赖项中,默认已经集成了SLF4j日志框架。

在添加了`Lombok`依赖项后,可以在需要输出日志的类上添加`@Slf4j`注解,则Lombok框架会在编译自动添加名为`log`的日志变量。

日志的显示级别,根据日志信息内容的重要程度,从低到高依次为:

- `trace`:跟踪信息
- `debug`:调试信息
- `info`:一般信息
- `warn`:警告信息
- `error`:错误信息

在SLF4j中,调用`log`变量时,有以上5种级别对应的方法,调用与日志显示级别对应的方法,则输出的日志就是对应的级别例如调用`log.debug()`时,输出的日志就是DEBUG级别的日志,调用`log.warn()`时,输出的日志就是WARN级别的日志。

在Spring Boot项目中,默认显示级别是`info`,相比`info`较低级别的日志不会被输出!

在Spring Boot项目中,可以在`application.properties`中通过`logging.level.包名`属性来设置日志的显示级别:

```properties
# 日志的显示级别
logging.level.cn.tedu.csmall=trace
```

关于以上配置:

- 包名部分,必须至少写1级包名例如`logging.level.cn`,如果没有包名,则是错误的
- 配置的包名是”根包“,所以子孙包及其下的所有类的日志都会是以上配置的级别
- 如果认为有必要的话,甚至可以配置到具体的类

使用日志的好处:

- 可以通过简单的配置,实现控制日志的显示级别,所以,可以使得某些日志仅开发时能输出,在生产环境中不会输出
- 使用日志时,可以使用常量字符串,输出结果中的变量值均在此常量字符串中使用占位符表示即可,所以,字符串处理效率非常高,并且,代码简洁

以上直接每个测试类最上方加入@logf4j即可,把输出语句全部改为日志输出语句,另外在application.porperties配置文件中可以设置这个日志级别信息

# 日志的显示级别
logging.level.cn.tedu.csmall=trace

总结最后:我文件没有写关于更新插入操作,所以直接发布课件了,和查询流程都是一样的。关于sql文件数据库也在其中,关于如何快速导入sql文件也在课堂项目压缩包下,在idea右边database按钮中,详情可以自行搜索。还有关于跟新操作为什么用<set>而不用SET字段,稍后再说

课件地址

https://download.csdn.net/download/m0_62774456/86511027

原文地址:https://blog.csdn.net/m0_62774456/article/details/126738548

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34842.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注