【JavaWeb学习】04Maven&MyBatis

JavaWeb(B站黑马)学习笔记

03JDBC

04Maven&MyBatis

08HTTP&Tomcat&Servlet

09Request&Response

10JSP&MVC模式和三层架构

11会话跟踪技术(Cookie&Session)

12Filter&Listener&Ajax

13Vue&Element

14综合案例  


目录

JavaWeb(B站黑马)学习笔记

前言

Maven:

maven的安装与配置

MyBatis:

快速入门:

Mapper代理开发:

Mybatis核心配置文件

Mybatis增删改查练习

使用配置文件

 细节处理(字段名和属性名映射关系):

 使用注解完成

MyBatis高级:多表关联(1对1 1对多关联查询)

使用配置文件完成

1对1(三种方法:级联属性赋值匹配、association标签、分步查询)

1对多(两种方法:collection标签、分步查询)

使用注解完成

1对1(分步查询)

1对多(分步查询)

注:


前言

JavaWeb(B站黑马)学习笔记 04Maven&MyBatis


Maven:

Maven是专门用于管理和构建java项目的工具,主要功能有:

1、提供了一套标准化的项目结构

2、提供了一套标准化的构建流程(编译,测试,打包,发布...)

3、提供了一套依赖管理机制

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

maven的安装与配置

1、解压maven压缩包

2、配置环境变量

 

3、修改本地仓库地址  conf文件夹下settings.xml文件      apache-maven-3.2.5下新建mvn_resp文件夹

<localRepository>D:\idealU\apache-maven-3.2.5\mvn_resp</localRepository>

4、配置远程仓库,加快依赖下载速度(不然会在国外的中央仓库下载,速度会非常慢)

<!-- 添加镜像地址 -->
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

5、idea修改为本地maven

Maven常用命令:

MyBatis:

MyBatis是一款优秀的持久层框架,用于简化JDBC开发

持久层:负责将数据保存到数据库的那一层代码

Mybatis简化

1.硬编码  将注册驱动,获取连接,sql语句都写在xml的配置文件中

2.操作繁琐 将原本jdbc中需要手动设置参数和封装结构集自动完成

免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作

快速入门:

官网:mybatis – MyBatis 3 | 简介

1.添加依赖

    <dependencies>
        <!--mybatis 依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>


        <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>

        <!--junit 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>

        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

    </dependencies>

2.配置mybatis-config.xml文件

3.添加logback.xml文件

4.添加sql映射文件

5.编码执行

Mapper代理开发:

1、maven工程里SQL映射文件放在resources文件下与java文件下Mapper接口的文件一致,编译后会在同一目录下

如:

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

3、接口的方法名与SQL映射文件中sql语句的id一致,并保持返回类型一致

3.1 加载sql映射文件的位置

4、编码

细节:满足1的条件下可使用扫描包的方式简化SQL映射文件的加载(这样映射文件多的话不用写这么多)

Mybatis核心配置文件

mybatis-config.xml

typeAliases:起类型别名,简化sql映射文件resultType的书写 (注意配置后resultType不区分大小写 user和User都可以)

environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment

注意:配置个标签时,需要遵循前后顺序(这是xml文件的约束)

Mybatis增删改查练习

使用Mybatis实现增删改查有两种方式:1.使用配置文件    2.使用注解完成(注解的方式更加方便快捷)

使用配置文件

1.查询所有数据

编写接口->编写sql映射文件->执行方法,测试

2.查询详情:根据id查询

3. 多条件查询

4.动态SQL查询

4.1 多条件动态查询(用户不一定每个条件都填写)

<where>标签   <if>标签

Mybatis的<where>标签:

 

4.2 单条件动态查询(选择某个条件,只查询该条件内容)

<choose>标签     <when>标签   <otherwise>标签

5.添加

注意:Mybatis关闭了自动提交,开启了对应的事务,执行完后事务回滚了,需要手动提交

   也可设置成sqlSessionFactory.openSession(true);  //true 开启自动提交

主键返回:

useGeneratedKeys="true" keyProperty="id"

在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值不是数据库表中的字段名

 6.修改

6.1 修改全部字段

 6.2 动态修改字段  例如:user表内有三个字段,但只需要用户填写两个字段

使用<if>标签进行判断

注意:要使用Mybatis的<set>标签,因为除了最后一句其它修改字段都有',' ,防止status无内容时的sql语句错误

 7. 删除

7.1 删除一个

7.2 批量删除

批量删除

        Mybatis会将数组参数封装为一个Map集合,

            * 默认 array = 数组  collection="array"

            * 使用 @Param注解改变map集合的默认key的名称

        item:表示数组中每一个元素进行迭代时的别名

        separator:表示在每次进行迭代之间以什么符号作为分隔符 例如  7,8,9

        open:表示该语句以什么开始

        close:表示以什么结束   可以把  in(  )  的括号写在标签内用 open="(" close=")"

 细节处理(字段名和属性名映射关系):

数据库表的字段名称 和 pojo实体类的属性名称不一样,则不能自动封装数据 会变NULL

处理方法:

* 起别名:对不一样的列名起别名,让别名和实体类的属性名一样

方法一:直接起别名

方法二:sql片段抽离别名

 *  常用方法:resultMap

 参数传递

Mybatis会将参数封装成Map集合,初始集合是

通过@Param注解替换掉Map集合中默认的arg键名,

比如有两个参数username  password,对其中一个参数@Param("username"),则集合为

 替换后在sql的映射文件中占位符写上对应的名称#{username}或#{param1}   未替换则为初始的#{arg0}或#{param1}

 

 使用注解完成

注意:在官方文档中 入门 中有这样的一段话:

 只是简单的增删改查语句使用注解可以让内容简洁,但对于要使用动态sql的复杂语句还是用配置文件更好

所以,注解完成简单功能,配置文件完成复杂功能。

例如:

 ResultMap注解使用:(调用xml里的ResultMap)

使用注解匹配看使用注解完成1对多(分步查询)

MyBatis高级:多表关联(1对1 1对多关联查询)

我们的表和表之间是有联系的,那我们实体类和实体类之间也有关系。例如员工和部门之间是1对1的关系,部门和员工是1对多的关系。如果我们想进行多表联合查询,查询出的结果如何映射,一个实体类里只有当前表的属性,它只能映射当前属性,例如:多表查询员工对应的部门信息,查询出的结果有很多属性要映射,员工类里只设置了当前员工表的属性,查询出的字段与属性无法一一映射,如何解决?我们只需要加入另一关系表的实体类对象即可。例如在员工实体类中加入部门对象作为属性即可表示1对1的关系,在部门类中加入员工对象的集合即可表示1对多的关系。那我们该如何设置多表查询出的对应结果映射到对应的属性里呢,下面就进行详细介绍。

环境准备

使用配置文件完成​​​​​​​​​​​​​​​​​​​​​

1对1(三种方法:级联属性赋值匹配、association标签、分步查询)

1.在员工实体类创建部门对象属性(记得给get set方法和重写toString方法,构造方法就不去动了)

2.编写接口->编写sql映射文件

在Navicat中测试此sql语句

3.通过resultMap匹配映射关系

方式一:级联属性赋值一一匹配(不常用)     (温馨提示:其它属性如果跟数据库字段一致可以不用进行匹配)

测试

方式二:association标签

测试

方式三:分步查询(数据量大用分步, 数据量小另外两种都可以,总结:都用分步)

通过另外一个sql语句查出来用select="" 设置分步查询的条件用column="",类似于嵌套子查询,

另一个sql语句查询所需要的条件由column提供

测试(观察sql语句,它用两步查询出来的)

1对多(两种方法:collection标签、分步查询)

1.在部门实体类创建员工集合对象属性(记得给get set方法和重写toString方法,构造方法就不去动了)

2.编写接口->编写sql映射文件

在Navicat中测试此sql语句

3.通过resultMap匹配映射关系

方式一:collection标签

区分1对1的association标签,1对多collection标签已经代表集合,用的是ofType而不是javaType,简单来说就是集合内对应类型是什么

测试 (emp内的dept为null是没有去映射它 因为禁止套娃!)

方式二:分步查询

通过另外一个sql语句查出来用select="" 设置分步查询的条件用column="",类似于嵌套子查询,

另一个sql语句查询所需要的条件由column提供

测试(观察sql语句,它用两步查询出来的)

使用注解完成

1对1(分步查询)

原理和配置文件分步查询一样,只不过换成注解的形式

测试(观察sql语句,它用两步查询出来的)   enpName=‘null’是因为没有映射,同样也可以用注解的方式映射

1对多(分步查询)

原理和配置文件分步查询一样,只不过换成注解的形式

测试(观察sql语句,它用两步查询出来的)


注:

该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询黑马程序员最新版JavaWeb基础教程,Java web从入门到企业实战完整版_哔哩哔哩_bilibili

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值