【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项目可以通用

【JavaWeb学习】04Maven&MyBatis_第1张图片

maven的安装与配置

1、解压maven压缩包

2、配置环境变量

【JavaWeb学习】04Maven&MyBatis_第2张图片

 【JavaWeb学习】04Maven&MyBatis_第3张图片

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

【JavaWeb学习】04Maven&MyBatis_第4张图片

D:\idealU\apache-maven-3.2.5\mvn_resp

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

【JavaWeb学习】04Maven&MyBatis_第5张图片



    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/
    central

5、idea修改为本地maven

【JavaWeb学习】04Maven&MyBatis_第6张图片

Maven常用命令:

【JavaWeb学习】04Maven&MyBatis_第7张图片

MyBatis:

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

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

Mybatis简化

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

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

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

【JavaWeb学习】04Maven&MyBatis_第8张图片

快速入门:

【JavaWeb学习】04Maven&MyBatis_第9张图片

官网:mybatis – MyBatis 3 | 简介

1.添加依赖

【JavaWeb学习】04Maven&MyBatis_第10张图片

    
        
        
            org.mybatis
            mybatis
            3.5.5
        


        
        
            mysql
            mysql-connector-java
            8.0.24
        

        
        
            junit
            junit
            4.13.1
            test
        

        
        
            org.slf4j
            slf4j-api
            1.7.20
        
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
        
        
            ch.qos.logback
            logback-core
            1.2.3
        

    

2.配置mybatis-config.xml文件

【JavaWeb学习】04Maven&MyBatis_第11张图片

3.添加logback.xml文件

4.添加sql映射文件

【JavaWeb学习】04Maven&MyBatis_第12张图片

5.编码执行

【JavaWeb学习】04Maven&MyBatis_第13张图片

Mapper代理开发:

【JavaWeb学习】04Maven&MyBatis_第14张图片

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

如:

【JavaWeb学习】04Maven&MyBatis_第15张图片

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

【JavaWeb学习】04Maven&MyBatis_第16张图片

3、接口的方法名与SQL映射文件中sql语句的id一致,并保持返回类型一致【JavaWeb学习】04Maven&MyBatis_第17张图片

3.1 加载sql映射文件的位置

【JavaWeb学习】04Maven&MyBatis_第18张图片

4、编码

【JavaWeb学习】04Maven&MyBatis_第19张图片

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

【JavaWeb学习】04Maven&MyBatis_第20张图片

Mybatis核心配置文件

mybatis-config.xml

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

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

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

【JavaWeb学习】04Maven&MyBatis_第21张图片

【JavaWeb学习】04Maven&MyBatis_第22张图片

Mybatis增删改查练习

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

使用配置文件

1.查询所有数据

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

【JavaWeb学习】04Maven&MyBatis_第23张图片

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

【JavaWeb学习】04Maven&MyBatis_第24张图片

3. 多条件查询

【JavaWeb学习】04Maven&MyBatis_第25张图片

【JavaWeb学习】04Maven&MyBatis_第26张图片

【JavaWeb学习】04Maven&MyBatis_第27张图片

【JavaWeb学习】04Maven&MyBatis_第28张图片

4.动态SQL查询

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

标签   标签

【JavaWeb学习】04Maven&MyBatis_第29张图片Mybatis的标签:

【JavaWeb学习】04Maven&MyBatis_第30张图片 

【JavaWeb学习】04Maven&MyBatis_第31张图片

【JavaWeb学习】04Maven&MyBatis_第32张图片

【JavaWeb学习】04Maven&MyBatis_第33张图片4.2 单条件动态查询(选择某个条件,只查询该条件内容)

标签     标签   标签

【JavaWeb学习】04Maven&MyBatis_第34张图片

【JavaWeb学习】04Maven&MyBatis_第35张图片【JavaWeb学习】04Maven&MyBatis_第36张图片

【JavaWeb学习】04Maven&MyBatis_第37张图片5.添加

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

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

主键返回:

useGeneratedKeys="true" keyProperty="id"

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

【JavaWeb学习】04Maven&MyBatis_第38张图片【JavaWeb学习】04Maven&MyBatis_第39张图片

【JavaWeb学习】04Maven&MyBatis_第40张图片【JavaWeb学习】04Maven&MyBatis_第41张图片

 6.修改

6.1 修改全部字段

【JavaWeb学习】04Maven&MyBatis_第42张图片

【JavaWeb学习】04Maven&MyBatis_第43张图片

【JavaWeb学习】04Maven&MyBatis_第44张图片

【JavaWeb学习】04Maven&MyBatis_第45张图片

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

使用标签进行判断

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

【JavaWeb学习】04Maven&MyBatis_第46张图片

【JavaWeb学习】04Maven&MyBatis_第47张图片

【JavaWeb学习】04Maven&MyBatis_第48张图片

【JavaWeb学习】04Maven&MyBatis_第49张图片

 7. 删除

7.1 删除一个

【JavaWeb学习】04Maven&MyBatis_第50张图片

【JavaWeb学习】04Maven&MyBatis_第51张图片7.2 批量删除

批量删除

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

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

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

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

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

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

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

【JavaWeb学习】04Maven&MyBatis_第52张图片

【JavaWeb学习】04Maven&MyBatis_第53张图片

【JavaWeb学习】04Maven&MyBatis_第54张图片

【JavaWeb学习】04Maven&MyBatis_第55张图片

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

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

处理方法:

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

方法一:直接起别名

方法二:sql片段抽离别名

【JavaWeb学习】04Maven&MyBatis_第56张图片 *  常用方法:resultMap

【JavaWeb学习】04Maven&MyBatis_第57张图片

 参数传递

【JavaWeb学习】04Maven&MyBatis_第58张图片

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

【JavaWeb学习】04Maven&MyBatis_第59张图片

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

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

【JavaWeb学习】04Maven&MyBatis_第60张图片

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

 【JavaWeb学习】04Maven&MyBatis_第61张图片

【JavaWeb学习】04Maven&MyBatis_第62张图片

 使用注解完成

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

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

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

例如:

【JavaWeb学习】04Maven&MyBatis_第63张图片

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

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

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

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

环境准备

【JavaWeb学习】04Maven&MyBatis_第64张图片

【JavaWeb学习】04Maven&MyBatis_第65张图片

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

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

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

【JavaWeb学习】04Maven&MyBatis_第66张图片

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

【JavaWeb学习】04Maven&MyBatis_第67张图片

在Navicat中测试此sql语句

【JavaWeb学习】04Maven&MyBatis_第68张图片

3.通过resultMap匹配映射关系

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

【JavaWeb学习】04Maven&MyBatis_第69张图片

测试

【JavaWeb学习】04Maven&MyBatis_第70张图片

方式二:association标签

【JavaWeb学习】04Maven&MyBatis_第71张图片

测试

【JavaWeb学习】04Maven&MyBatis_第72张图片

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

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

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

【JavaWeb学习】04Maven&MyBatis_第73张图片

【JavaWeb学习】04Maven&MyBatis_第74张图片

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

【JavaWeb学习】04Maven&MyBatis_第75张图片

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

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

【JavaWeb学习】04Maven&MyBatis_第76张图片

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

【JavaWeb学习】04Maven&MyBatis_第77张图片

在Navicat中测试此sql语句

【JavaWeb学习】04Maven&MyBatis_第78张图片

3.通过resultMap匹配映射关系

方式一:collection标签

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

【JavaWeb学习】04Maven&MyBatis_第79张图片

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

【JavaWeb学习】04Maven&MyBatis_第80张图片

方式二:分步查询

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

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

【JavaWeb学习】04Maven&MyBatis_第81张图片

【JavaWeb学习】04Maven&MyBatis_第82张图片

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

【JavaWeb学习】04Maven&MyBatis_第83张图片

使用注解完成

1对1(分步查询)

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

【JavaWeb学习】04Maven&MyBatis_第84张图片

【JavaWeb学习】04Maven&MyBatis_第85张图片

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

【JavaWeb学习】04Maven&MyBatis_第86张图片

1对多(分步查询)

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

【JavaWeb学习】04Maven&MyBatis_第87张图片

【JavaWeb学习】04Maven&MyBatis_第88张图片

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

【JavaWeb学习】04Maven&MyBatis_第89张图片


注:

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

你可能感兴趣的:(JavaWeb学习,mybatis,java,maven)