前言
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、统计查询
第一步:首先在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>
二、 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进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。