[TOC]

2020年9月23日

https://github.com/stickgoal/little-fw

  1. User.class <-> 表 | 类 User | 表 test_user | | —- | —- | | @Entity类名 | 表名 | | @Id | 主键 | | Field @Column注解 | 字段 |

  2. 拼装CRUD的SQL

insert into 表名(字段列表) values(字段列表长度个?)
delete from 表名 where 主键=?
update 表名 set 字段名=? where 主键=?
select * from 表名 where 主键=?

  1. 执行操作(代入?的值)

save(user)
执行 insert into 表名(字段列表) values(字段列表长度个?)
代值 clazz=>Field => 得到值


Idea

idea vs eclipse

  1. 窗口

idea 的每个项目一个窗口
eclipse所有项目一个窗口

  1. 配置

配置不同,每个项目一个配置
当前项目的配置:File | Settings
新项目的配置:File | New Projects Settings | Settings For New Projects

idea界面组成

常用配置

File | Settings | Editor | File Encodings 字符编码集
File | Settings | Appearance & Behavior | Appearance => 界面字体
File | Settings | Editor | Font => 代码字体
File | Settings | Keymap 快捷键的配置,建议使用默认,修改需要先duplicate之后才能改
导包: settings /Editor / General / auto import

插件

安装方式: File | Settings | Plugins

  • lombok 简化代码神器
  • codota AI编程利器
  • key promoter x 快捷键提示工具
  • rainbow bracket 彩虹括号
  • restful tool 用于快速查看restful端点并发送请求
  • mybatisx mybatis开发插件,为你生成代码

    创建项目

    快捷键不同

    alt+enter 万精油,根据上下文提示
    tab 展开
    for / fori
    ctrl+d 复制一行
    ctrl+y 删除一行
    ctrl+shift+↑ / ↓
    ctrl+alt+L 格式化
    shift*2 全局搜索
    ctrl+alt+s 打开配置
    f2 下一出错位置
    alt+insert 生成代码
    ctrl+n 搜索类
    ctrl+alt+b 查找实现
    ctrl+b 找到调用位置
    ctrl+h 类继承体系
    ctrl+alt+v 抽取变量
    ctrl+alt+m 抽取方法
    Ctrl+E 打开最近的文件
    Ctrl+Q 查看注释
    Ctrl+F12 文档结构
    运行项目 ctrl+shift+F10
    重新运行 ctrl+F5
    ctrl+h 类继承体系
    ctrl+alt+u 查看类图
    ctrl+z 撤销
    ctrl+shift+z 重做
    ctrl+shift+backspace 回到上一次编辑的位置
    shift+f9 用debug模式启动
    - 跳行 F8
    - 进入方法 F7
    - 放过 F9
    live template 自动生成代码
    fori
    xxx.new => new XXX();
    xxx.for =>增强for循环

  • idea vs eclipse

  • idea界面组成
  • 常用配置
  • 插件
  • 创建项目
  • 快捷键不同

linux : 部署程序

三阶段: 框架 将各类开发技能提升到实战水平

提供很多的现成的功能,提高开发效率

Spring Mybatis SpringMVC Hibernate Struts Spring-Boot Spring-Security

开发 -> 部署

自己实现-> 使用第三方工具

Maven

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从中央信息管理项目的构建,报告和文档。

  • 项目构建工具
  • 依赖管理工具
  • 项目信息聚合工具

依赖管理遇到的一些问题
image.png

  1. 项目存在大量的第三方依赖
  2. 依赖之间存在层级
  3. 版本冲突:某个时间点上的代码,固定了功能
    版本升级的问题
    • 增加功能
    • 删除功能
    • 修改功能,修改包路径

      依赖管理功能

  • 项目对象模型POM.xml
    • 第三方依赖
  • 坐标 GAV
    • 分组 Group
    • 名字 ArtifactId
    • 版本 Version
    • 标识符 qualifer
  • 依赖传递
    • A->B->C 那么 A也依赖C
    • 最短路径原则
      • A->B->C(1.0)
      • A->C(2.0)
      • 最后选择 2.0
    • 优先声明原则
      • A->B->C(1.0)
      • A->D->C(2.0)
      • 最后选择1.0 ,因为B先声明

安装配置Maven

  1. 下载: https://maven.apache.org/download.cgi
  2. 解压
  3. 配置环境变量

把Maven的bin目录配置到path中
mvn -v 测试效果

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\app\apache-maven-3.6.3\bin\..
Java version: 1.8.0_74, vendor: Oracle Corporation, runtime: C:\Progra
va\jdk1.8.0_74\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
  1. 配置maven maven安装目录下的/conf目录下的settings.xml (vs code / sublimetext)
  • 本地仓库:jar存放的位置,不配置默认在{user.home}/.m2/repository

    D:/UserData/repo
  • 私服镜像 : 从国内的阿里云去下载jar包,速度快,否则从国外的中央仓库下载,龟速

    <mirror> 
        <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>         
    </mirror>
    

测试命令
创建并执行项目

创建项目
mvn archetype:generate -DarchetypeCatalog=internal -D groupId=com.woniuxy.build -DartifactId=demo
cd demo
执行项目
mvn clean compile exec:java -Dexec.mainClass="com.woniuxy.build.App"
思考:

安装的问题:

  • 配置位置不对
  • win10 powershell 没有goal 解决: 在powershell中敲 cmd ,进入cmd再操作
  • jdk版本,在demo项目的pom的properties位置加入以下配置,指定为jdk11

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <java.version>11</java.version>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target>
    </properties>
    
  • 下载jar报证书错误

POM结构

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <!-- 自己的坐标 -->
  <groupId>com.woniuxy.build</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- 打包方式 jar war pom -->
  <packaging>jar</packaging>

  <!-- 项目信息 -->
  <!-- 项目名 -->
  <name>demo</name>
  <!-- 项目的URL -->
  <url>http://maven.apache.org</url>

  <!-- 属性 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!-- 依赖 -->
  <dependencies>
    <!-- 单元测试依赖 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.73</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.24</version>
    </dependency>

  </dependencies>

   <!--构建项目的配置-->
    <build>
        <!--构建用到的插件-->
        <plugins>
           <!--  <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin> -->
        </plugins>
    </build>

</project>

加依赖,从 这里 https://mvnrepository.com/搜索

Maven项目结构的约定

─src 源码
├─main 主要内容
│ ├─java java代码
│ │ └─com 以下是java的包路径
│ │ └─example
│ │ └─demo
│ └─resources 资源包括配置文件等
└─test 测试内容
└─java
└─com
└─example
└─demo
─pom.xml 最核心的配置文件

仓库

本地仓库 本地文件夹 settings.xml > localRepository
私服镜像 阿里云 settings.xml > mirrors>mirror
中央仓库 全球公用 repo1.maven.org

下载依赖时,
从本地仓库查找,有则直接使用 无
从私服镜像 ,
从中央仓库

自动构建

构建:从源码 到 成品的构成称为构建
.java => jar
穷人版构建过程:编译->打包
基本版构架过程:初始化->编译->单元测试->打包->集成测试->安装->部署 (有先后顺序)

  • 单元测试: 测试你的某个代码单元
  • 集成测试:与其他系统联合测试
  • 安装:安装到本地仓库
  • 部署:发布到中央仓库

英文:

  • 编译:compile
  • 测试:test
  • 打包:package
  • 安装:install
  • 部署:deploy
  • 清理:clean

常用命令:

mvn clean compile
mvn clean package -Dmaven.test.skip=true
mvn clean install -Dmaven.test.skip=true

#  查看依赖树
mvn dependency:tree
# 查看生效的pom配置
mvn help:effective-pom

详细版参考下图

三阶段笔记 - 图2

idea配置
File | Settings | Build, Execution, Deployment | Build Tools | Maven
maven home diretory
user settings file
New Project > File | Settings | Build, Execution, Deployment | Build Tools | Maven

archetype 项目骨架
File > New > Project >Maven > 勾选archetype,选择quickstart>输入坐标,下一步>打开项目

——-
mybatis
mysql-connector-java

Mybatis

ORM : 对象关系映射

O : Java 对象
R : 表
M:映射
类 <=> 表
实例<=>记录

mybatis的概念

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

package com.woniuxy.mybatis;

import java.sql.*;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection connection = DriverManager.getConnection("", "", "");
            //① sql 自己写,mybatis不管
            PreparedStatement pstmt = connection.prepareStatement("select * from user where username=? and password=?");
            //② ☆ 传值 user -> sql
            pstmt.setString(1,user.getUsername());
            pstmt.setString(2,user.getPassword());

            ResultSet resultSet = pstmt.executeQuery();

            while(resultSet.next()){
                //③ ☆ 取回返回结果  结果集-> 对象
                int userId = resultSet.getInt("user_id");
                String username = resultSet.getString("username");
                String password = resultSet.getString("password");

//                User user

            }


        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }

    }
}

搭建mybatis的环境

  1. 加依赖

    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.5</version>
     </dependency>
     <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.49</version>
     </dependency>
    
  2. 配置 (创建resources目录)

  • 全局配置 mybatis-config.xml


- 单表配置
   - 手写的sql
```xml
<?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="woniuxy.class45">



</mapper>
  • 启动代码 ```java package com.woniuxy.mybatis;

import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException; import java.io.InputStream; import java.sql.*;

/**

  • Hello world! */ public class App { public static void main(String[] args) {

     //启动框架
     InputStream inputStream = null;
    
     try {
         //读配置文件
         inputStream = Resources.getResourceAsStream("mybatis-config.xml");
         //构建SQLSessionFactory
         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
         //创建sqlSession
         SqlSession sqlSession = sqlSessionFactory.openSession();
    
    } catch (IOException e) {
        e.printStackTrace();
    }


}

}


字段与数据库列不一致,处理方式

1. 使用resultMap
```xml
<!--结果映射-->
    <resultMap id="userResultMap" type="com.woniuxy.mybatis.model.User">
        <result column="user_id" property="userId"/>
    </resultMap>
<select id="findAll" resultMap="userResultMap">
  1. 全局添加配置
     <settings>
         <setting name="mapUnderscoreToCamelCase" value="true"/>
     </settings>
    

传参数

  1. 一个参数, #{变量} 变量可以随意写

     <select id="findById" resultType="com.woniuxy.mybatis.model.User">
         select * from user where user_id=#{abc}
     </select>
    
  2. 多个参数,用对象传值,#{变量} 引用参数对象的相应的属性

    <!--#{username}从参数对象上获取名为username的属性-->
     <select id="findByUsernameAndPassword" resultType="com.woniuxy.mybatis.model.User">
         select * from user where username=#{username} and password=#{password}
     </select>
    
  3. 多个参数,可以用map封装对象,#{变量} 从参数对象上获取key为username的value值


增删改查

注意sqlSession.commit()后才能生效

作业

  1. 学生表

    1. id,状态,用户名,密码,姓名,电话,毕业院校,身份证号,学历,专业,当前就读班级,当前就读阶段,咨询师,来源….
    2. 建表,sql
    3. 使用mybatis对学生表进行增删改查
      1. 增:√新增学生(咨询老师)
      2. 改:√降级、√升级、√毕业、退学、休学
      3. 查:√登录、√查询学生列表分页、学生详情
  2. 学生表

    1. id,状态,用户名,密码,姓名,电话,毕业院校,身份证号,学历,专业,当前就读班级,当前就读阶段,咨询师,来源….
    2. 建表,sql
    3. 使用mybatis对学生表进行增删改查
      1. 增:√新增学生(咨询老师) 入学
        1. 判断是否重复
        2. 优先输入身份证,防止重复
        3. 密码 不输入
          1. 默认,不允许登录,第一次必须修改 : 通过状态: 未激活
          2. 没有密码,手机验证码登录(过期时间+验证一次过后失效)
          3. 手机发送短信随机密码(可能会有泄露问题)
        4. 状态:(预习 | 试学 | 在读 | 休学 | 退学 | 毕业 | 退费) 默认
        5. 阶段:默认一阶段
        6. 咨询师:以登录人为咨询老师
        7. 就读班级:方向(java)推断出最新一期的java班
        8. 身份证号=> 性别、籍贯、生日
      2. 改:√降级、√升级、√毕业、退学、休学
        1. 降级
          1. 一阶段不能再降
          2. 不能连续降两次
          3. 只能降1级
          4. 改班级
        2. 升级
          1. 四阶段不能再升级
          2. 班级一起升
          3. 只能升1级
        3. 退学
          1. 改状态
          2. 退费
        4. 休学
          1. 改状态+休学起止日期
          2. 考虑 复学流程
      3. 查:√登录、√查询学生列表分页、学生详情

休学=>复学
基本上,任何的实际业务中,数据修改都有限制条件或者对应的流程

复习

Maven

  • 依赖管理
    • pom
    • 坐标 GAV
    • 依赖传递
    • 仓库: 本地->私服->中央仓库
    • 约定
      • src
        • main
          • java
            • 包路径
          • resources 配置文件
        • test
      • pom.xml
  • 构建

    • 生命周期:初始化 编译 单元测试 打包 集成测试 安装 部署
      • 安装: 安装到本地仓库
      • 部署: 上传到中央仓库

        Mybatis

  • ORM 概念 对象关系映射

    • 类 <=> 表
    • 对象<=> 行
  • 依赖(mybatis+mysql-connector)
  • 全局配置: mybatis-config.xml
    • settings
      • mapUnderscoreToCamelCase true
    • 数据源配置
    • 单表注册
  • 单表配置:xxx.mapper.xml