JavaWeb-04

MAVEN
01-MAVEN概述
  • Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

    • 提供了一套标准化的项目结构
    • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
    • 提供了一套依赖管理机制
  • 标准化的项目结构

    jw-04-001

    不同IDE之间,项目结构不一样,不通用

    jw-04-002

    Maven提供了一套标准化的项目结构,所有IDEA使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用

  • 标准化的依赖管理机制

    jw-04-003

    Maven提供了一套简单的命令来完成项目构建

  • 依赖管理

    • 依赖管理就是管理你项目所依赖的第三方资源(jar包、插件…)

      jw-04-004

      jw-04-005

02-MAVEN简介
  • Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档

  • 官网:http://maven.apache.org/

  • Maven模型:

    jw-04-006

  • 项目对象模型(Project Object Model)

  • 依赖管理模型(Dependency)

  • 插件(Plugin)

  • 仓库分类:

    • 本地仓库:自己计算机上的一个目录
    • 中央仓库:由Maven团队维护的全球唯一的仓库
      • 地址:https:😕/repo1.maven.org/maven2/
    • 远程仓库(私服):一般由公司团队搭建的私有仓库

jw-04-007

当项目1需要jar包A时,在项目1里写好配置后,Maven工具就会自动取本地仓库寻找,由于Maven刚装好,是首次使用,没有该包,此时Maven工具就会取中央仓库找,找到后会自动从中央仓库下载到本地仓库此时本地仓库就有jar包了,项目就可以引用该包;当项目2也需要该jar包时,由于本地仓库中已经有该包了,故项目2可直接引用

  • 当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包;
    • 如果有,则在项目中直接引用;
    • 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

假如公司搭建了一个远程仓库(私服),当项目2需要一个jar包B,本地仓库中没有,然后先去私服中找,当私服中没有该jar包,Maven从中央仓库中寻找,并将该jar包下载到私服中,然后私服再传递给本地仓库。一般私服搭建起来之后都会将中央仓库中的所有jar包同步到私服中,从而提升访问速度;私服中也可以存放一些自己写的有版权的jar包

  • 还可以搭建远程仓库,将来jar包的查找顺序变为:

    本地仓库->远程仓库->中央仓库

03-MAVEN安装&配置

Maven安装配置

  1. 解压apache-maven-3.6.1.jar即安装完成

  2. 配置环境变量MAVEN_HOME为安装路径的bin目录

  3. 配置本地仓库:修改conf/settings.xml中的为一个指定目录

  4. 配置阿里云私服:修改conf/settings.xml中的标签,为其添加如下子标签:

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

配置环境变量:新建环境变量:jw-04-008
添加path:jw-04-009

完成之后,打开cmd,输入命令,如果出现如图提示信息则表示安装成功 jw-04-010

Maven基本使用

  • Maven常用命令
    • compile:编译
    • clean:清理了
    • test:测试
    • package:打包
    • install:安装

找到测试项目web-demo,把该项目放在合适的位置(不然容易报错:系统找不到指定路径,我目前也不知道为什么),然后找到该项目下的pom文件,按住shift右键空白处,选择“在此处打开powershell窗口”,然后输入命令:mvn compile,系统自动下载并创建

jw-04-024

mvn clean:清理刚刚创建的target目录,同时下载一些clean的插件
jw-04-025
jw-04-026
jw-04-027
jw-04-028

mvn package:将该项目的代码编译成字节码文件来打包成jar包,同样第一次使用会下载一些相关插件

build success之后,target目录中会生成一个jar包

test命令执行后会自动执行test下面Java测试用的代码

mvn install:将当前项目安装到本地仓库去

  • Maven生命周期

    • Maven构建项目生命周期描述的是依次构建过程经历了多少个事件

    • Maven对项目构建的生命周期分为3套

      • clean:清理工作
      • default:核心工作,例如编译、测试、打包、安装等
      • site:产生报告,发布站点等

      jw-04-011

     jw-04-012

04-IDEA配置Maven

IDEA配置Maven环境

  1. 选择IDEA中File–>Settings

    jw-04-013

  2. 搜索maven

  3. 设置IDEA使用本地安装的maven,并修改配置文件路径

    jw-04-014

Maven坐标详解

  • 什么是坐标?

    • Maven中的坐标是资源的唯一标识
    • 使用坐标来定义项目或引入项目中需要的依赖
  • Maven坐标主要组成

    • groupId:定义当前Maven项目隶属于组织名称(通常是域名反写,例如:com.itheima)
    • artifactId:定义当前Maven项目名称(通常是模块名称,例如order-service、good-service)
    • version:定义当前项目版本号

 jw-04-15

IDEA创建Maven项目

  1. 创建模块,选择Maven,点击Next

    jw-04-016

 jw-04-017

在此处可以修改坐标信息,finish后apply,然后ok就可以创建了

 jw-04-018

创建好后的目录结构

测试用例中将来如果不要配置文件,则可以不加;否则可在test创建一个目录

jw-04-019

此时可以看见resources,双击即可

  1. 填写模块名称,坐标信息,点击finish,创建完成

  2. 编写HelloWorld,并运行

IDEA导入Maven项目

将要导入项目放到一个合适的目录下(方便寻找),然后打开IDEA右侧的Maven

jw-04-020

然后点击+号添加要导入的项目,找到项目下的pom文件,双击即可添加

jw-04-021

如果找不到上述右侧的maven,可以找到顶部的view–>appearence–>Tool Window Bars

配置Maven-Helper插件

  1. 选择IDEA中File–>Settings
  2. 选择Plugins
  3. 搜索Maven,选择第一个Maven Helper,点击Install安装,弹出面板中点击Accept
  4. 重启IDEA

jw-04-022

安装好后可以方便如图的操作

jw-04-023

05-依赖管理&依赖范围

依赖管理

使用坐标导入jar包

  1. 在pom.xml中编写标签
  2. 在标签中使用引入坐标
  3. 定义坐标的goupId、artifactId、version
  4. 点击刷新按钮,使坐标生效

如果没有提示,就搜一下 mysql maven

jw-04-029

(反正百度是别想找到的)

点进去后有各种不同的版本,点进去后复制这段代码到pom文件中,当版本号红色报错时,点击右上角刷新按钮刷新则开始自动下载,同样,如果将刚刚那段依赖删掉,点击刷新生效
jw-04-030jw-04-031

使用坐标导入jar包-自动导入

  1. 选择IDEA中File–>Settings
  2. 在弹出的面板中找到Build Tools
  3. 选择Any Changes,点击OK即可生效

jw-04-033

使用坐标导入jar包-快捷方式

  1. 在pom.xml中按alt+insert,选择Dependency
  2. 在弹出的面板中搜索对应坐标,然后双击选中对应坐标
  3. 点击刷新按钮,使坐标生效

jw-04-034

依赖范围

  • 通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境、测试环境、运行环境

    jw-04-035

  • 默认值:compile

Mybatis
01-Mybatis简介

什么是Mybatis?

  • Mybatis是一款优秀的持久层框架,用于简化JDBC开发
  • Mybatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到Google code,并改名为MyBatis。2013年11月迁移到Github
  • 官网:https://mybatis.net.cn/

持久层

  • 负责将数据到保存数据的那一次代码
  • JavaEE三层加构:表现层、业务层、持久层

框架

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在加构的基础之上构建如啊你就按编写更加高效、规范、通用、可扩展

jw-04-036

02-Mybatis快速入门

查询user表中所有数据

  1. 创建user表,添加数据

    create database mybatis;
    use mybatis;
    
    drop table if exists tb_user;
    
    create table tb_user(
    	id int primary key auto_increment,
    	username varchar(20),
    	password varchar(20),
    	gender char(1),
    	addr varchar(30)
    );
    
    
    
    INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
    INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
    INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
    
  2. 创建模块,导入坐标

    新建模块,选择maven,输入模块名称,OK
    jw-04-037jw-04-038

    进官网的入门,jw-04-039
    ,将这块代码复制进项目的pom文件中,类似的添加其他需要的依赖。

    将logback.xml(资料中)复制进src-main下的resources中,(有了这个文件后运行结果中就可以看到彩色的提示信息)

  3. 编写MyBatis核心配置文件–>替换连接信息 解决硬编码问题

    在resources下创建mybatis.xml文件,将下面的代码复制进来

    jw-04-040

    然后将其中相应的信息修改
    jw-04-041
    jw-04-042

    加载sql映射文件

    jw-04-043

    在resources下创建一个文件:UserMapper.xml,并将上面官网中的内容复制进来

    如果需要将数据包装成user类型,Java目录下就要有个user类

    jw-04-044

    Mapper文件写好后,就需要在映射的位置将mapper文件加载进来

    jw-04-045

    完成之后就可以来编码了

  4. 编写SQL映射文件–>统一管理sql语句,解决硬编码问题

  5. 编码

    1. 定义POJO类

      package com.itheima.pojo;
      
      public class User {
          private Integer id;
          private String username;
          private String password;
          private String gender;
          private String addr;
      
          public Integer getId() {
              return id;
          }
      
          public void setId(Integer id) {
              this.id = id;
          }
      
          public String getUsername() {
              return username;
          }
      
          public void setUsername(String username) {
              this.username = username;
          }
      
          public String getPassword() {
              return password;
          }
      
          public void setPassword(String password) {
              this.password = password;
          }
      
          public String getGender() {
              return gender;
          }
      
          public void setGender(String gender) {
              this.gender = gender;
          }
      
          public String getAddr() {
              return addr;
          }
      
          public void setAddr(String addr) {
              this.addr = addr;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", username='" + username + '\'' +
                      ", password='" + password + '\'' +
                      ", gender='" + gender + '\'' +
                      ", addr='" + addr + '\'' +
                      '}';
          }
      }
      
    2. 加载核心配置文件,获取SqlSessionFactory对象

      jw-04-046

      复制该段代码进MyBatisDemo.java中

    3. 获取SqlSession对象,执行SQL语句

    4. 释放资源

    package com.itheima;
    
    import com.itheima.pojo.User;
    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.util.List;
    
    /**
     * MyBatis快速入门代码
     */
    
    public class MyBatisDemo {
        public static void main(String[] args) throws IOException {
            //1.加载mybatis的核心配置文件,获取SqlSessionFactory
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
            //2.获取SqlSession对象,用它来执行sql
            SqlSession sqlSession = sqlSessionFactory.openSession();
            
            //3.执行sql
            List<User> users = sqlSession.selectList("test.selectAll");
    
            System.out.println(users);
            
            //4.释放资源
            sqlSession.close();
        }
    }
    
03-解决SQL语句警告提示

解决SQL映射文件的警告提示

  • 产生原因:Idea和数据库没有建立连接,不识别表信息

  • 解决方式:在Idea中配置MySQL数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一般只需要填写三个圈出的地方,填好后,点击Test Connection测试连接,连接mysql8.0.xx时如果报错“Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually.”,则是时区的问题,有三种解决方法,我认为的最好的解决办法是:

修改配置文件,window下是my.ini,linux下是my.cnf,优点:可以永久修改,因为每次启动时mysql都会去读这个配置文件,修改后重启下mysql服务就行了

在这里插入图片描述

注:这里的 default-time_zone=’+08:00’ 一定要写在 [mysqld] 下,而不是 [mysql] 或 [client]之下,否则会报mysql: [ERROR] unknown variable ‘default-time_zone=+08:00’. 错误

连接测试通过后,会出现绿色小勾,此时点击OK即可。

在这里插入图片描述

然后右侧就会出现所连接的数据库及其内部的表

在此处也可以执行sql语句,点击1处即可在左侧空白处写sql语句,然后点击2处运行

在这里插入图片描述

同样也可以选中代码然后右键运行

04-Mapper代理开发
  • 目的

    • 解决原生方式中的硬编码

    • 简化后期执行SQL

      在这里插入图片描述

使用Mapper代理方式完成入门案例

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

    在resources下面新建一个目录:com/itheima/mapper

    在这里插入图片描述

    将UserMapper.xml拖进该目录下,编译一下,Mapper接口和SQL映射文件就在同一目录下了

    在这里插入图片描述
    在这里插入图片描述

  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

在这里插入图片描述

  1. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

    此处SQL映射文件中的sql语句id为selectAll

在这里插入图片描述

Mapper接口中就要有该名称的方法

在这里插入图片描述

小tips:由于此处sql语句查询结果返回的是许多个结果,所以Mapper接口中定义的方法的返回值应为集合,类型为结果相应的类型User

由于SQL映射文件UserMapper.xml的路径改了,所以Mybatis-config.xml中指定sql映射文件路径也要随之改变

在这里插入图片描述

修改方法:

找到sql映射文件UserMapper.xml右键选中Copy Path,然后选择Path From Source Root,粘贴到源路径处。

在这里插入图片描述

  1. 编码

    1. 通过SqlSession的getMapper方法获取Mapper接口的代理对象
    2. 调用对应方法完成sql的执行

    参照上面的MyBatisDemo.java 中的代码,只需要改如下一小部分代码

    在这里插入图片描述

    细节:如果Mapper接口名称和SQL映射文件名称相同,并在统一目录下,则可以使用包扫描的方法简化SQL映射文件的加载

    <mappers>
    <!--加载sql的映射文件-->
    <!--<mapper resource="com/itheima/mapper2/UserMapper.xml"/>-->
    <package name="com.itheima.mapper"/>
    </mappers>
    

    即入宫类似于UserMapper.xml的文件有许多,如OrderMapper、goodsMapper等等,则可以选择使用Mapper代理方式

    在这里插入图片描述

05-Mybatis核心配置文件

MyBatis核心配置文件的顶层结构如下:

在这里插入图片描述
在这里插入图片描述

即可以配置多个environment,这样就可以连接多个数据库。

在这里插入图片描述

  • 类型别名(typeAliases)

    <typeAliases>
    	<package name="com.itheima.pojo"/>
    </tyepeAliases>
    

    细节:配置各个标签时,需要遵守前后顺序

    在这里插入图片描述
    在这里插入图片描述

    也不需要区分大小写

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值