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是专门用于管理和构建java项目的工具,主要功能有:
1、提供了一套标准化的项目结构
2、提供了一套标准化的构建流程(编译,测试,打包,发布...)
3、提供了一套依赖管理机制
Maven提供了一套标准化的项目结构,所有IDE使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用
1、解压maven压缩包
2、配置环境变量
3、修改本地仓库地址 conf文件夹下settings.xml文件 apache-maven-3.2.5下新建mvn_resp文件夹
D:\idealU\apache-maven-3.2.5\mvn_resp
4、配置远程仓库,加快依赖下载速度(不然会在国外的中央仓库下载,速度会非常慢)
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
5、idea修改为本地maven
Maven常用命令:
MyBatis是一款优秀的持久层框架,用于简化JDBC开发
持久层:负责将数据保存到数据库的那一层代码
Mybatis简化
1.硬编码 将注册驱动,获取连接,sql语句都写在xml的配置文件中
2.操作繁琐 将原本jdbc中需要手动设置参数和封装结构集自动完成
免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作
官网:mybatis – MyBatis 3 | 简介
1.添加依赖
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文件
3.添加logback.xml文件
4.添加sql映射文件
5.编码执行
1、maven工程里SQL映射文件放在resources文件下与java文件下Mapper接口的文件一致,编译后会在同一目录下
如:
2、设置SQL映射文件的namespace属性为Mapper接口全限定名
3、接口的方法名与SQL映射文件中sql语句的id一致,并保持返回类型一致
3.1 加载sql映射文件的位置
4、编码
细节:满足1的条件下可使用扫描包的方式简化SQL映射文件的加载(这样映射文件多的话不用写这么多)
mybatis-config.xml
typeAliases:起类型别名,简化sql映射文件resultType的书写 (注意配置后resultType不区分大小写 user和User都可以)
environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment
注意:配置个标签时,需要遵循前后顺序(这是xml文件的约束)
使用Mybatis实现增删改查有两种方式:1.使用配置文件 2.使用注解完成(注解的方式更加方便快捷)
1.查询所有数据
编写接口->编写sql映射文件->执行方法,测试
2.查询详情:根据id查询
3. 多条件查询
4.动态SQL查询
4.1 多条件动态查询(用户不一定每个条件都填写)
注意:Mybatis关闭了自动提交,开启了对应的事务,执行完后事务回滚了,需要手动提交
也可设置成sqlSessionFactory.openSession(true); //true 开启自动提交
主键返回:
useGeneratedKeys="true" keyProperty="id"
在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值不是数据库表中的字段名
6.修改
6.1 修改全部字段
6.2 动态修改字段 例如:user表内有三个字段,但只需要用户填写两个字段
使用
注意:要使用Mybatis的
7. 删除
7.1 删除一个
批量删除
Mybatis会将数组参数封装为一个Map集合,
* 默认 array = 数组 collection="array"
* 使用 @Param注解改变map集合的默认key的名称
item:表示数组中每一个元素进行迭代时的别名
separator:表示在每次进行迭代之间以什么符号作为分隔符 例如 7,8,9
open:表示该语句以什么开始
close:表示以什么结束 可以把 in( ) 的括号写在标签内用 open="(" close=")"
数据库表的字段名称 和 pojo实体类的属性名称不一样,则不能自动封装数据 会变NULL
处理方法:
* 起别名:对不一样的列名起别名,让别名和实体类的属性名一样
方法一:直接起别名
参数传递
Mybatis会将参数封装成Map集合,初始集合是
通过@Param注解替换掉Map集合中默认的arg键名,
比如有两个参数username password,对其中一个参数@Param("username"),则集合为
替换后在sql的映射文件中占位符写上对应的名称#{username}或#{param1} 未替换则为初始的#{arg0}或#{param1}
注意:在官方文档中 入门 中有这样的一段话:
只是简单的增删改查语句使用注解可以让内容简洁,但对于要使用动态sql的复杂语句还是用配置文件更好
所以,注解完成简单功能,配置文件完成复杂功能。
例如:
ResultMap注解使用:(调用xml里的ResultMap)
使用注解匹配看使用注解完成1对多(分步查询)
我们的表和表之间是有联系的,那我们实体类和实体类之间也有关系。例如员工和部门之间是1对1的关系,部门和员工是1对多的关系。如果我们想进行多表联合查询,查询出的结果如何映射,一个实体类里只有当前表的属性,它只能映射当前属性,例如:多表查询员工对应的部门信息,查询出的结果有很多属性要映射,员工类里只设置了当前员工表的属性,查询出的字段与属性无法一一映射,如何解决?我们只需要加入另一关系表的实体类对象即可。例如在员工实体类中加入部门对象作为属性即可表示1对1的关系,在部门类中加入员工对象的集合即可表示1对多的关系。那我们该如何设置多表查询出的对应结果映射到对应的属性里呢,下面就进行详细介绍。
环境准备
1.在员工实体类创建部门对象属性(记得给get set方法和重写toString方法,构造方法就不去动了)
2.编写接口->编写sql映射文件
在Navicat中测试此sql语句
3.通过resultMap匹配映射关系
方式一:级联属性赋值一一匹配(不常用) (温馨提示:其它属性如果跟数据库字段一致可以不用进行匹配)
测试
方式二:association标签
测试
方式三:分步查询(数据量大用分步, 数据量小另外两种都可以,总结:都用分步)
通过另外一个sql语句查出来用select="" 设置分步查询的条件用column="",类似于嵌套子查询,
另一个sql语句查询所需要的条件由column提供
测试(观察sql语句,它用两步查询出来的)
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语句,它用两步查询出来的)
原理和配置文件分步查询一样,只不过换成注解的形式
测试(观察sql语句,它用两步查询出来的) enpName=‘null’是因为没有映射,同样也可以用注解的方式映射
原理和配置文件分步查询一样,只不过换成注解的形式
测试(观察sql语句,它用两步查询出来的)
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询黑马程序员最新版JavaWeb基础教程,Java web从入门到企业实战完整版_哔哩哔哩_bilibili