JavaWeb(B站黑马)学习笔记
目录
1对1(三种方法:级联属性赋值匹配、association标签、分步查询)
前言
JavaWeb(B站黑马)学习笔记 04Maven&MyBatis
Maven:
Maven是专门用于管理和构建java项目的工具,主要功能有:
2、提供了一套标准化的构建流程(编译,测试,打包,发布...)
Maven提供了一套标准化的项目结构,所有IDE使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用
maven的安装与配置
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>
MyBatis:
1.硬编码 将注册驱动,获取连接,sql语句都写在xml的配置文件中
2.操作繁琐 将原本jdbc中需要手动设置参数和封装结构集自动完成
快速入门:
<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>
5.编码执行
Mapper代理开发:
1、maven工程里SQL映射文件放在resources文件下与java文件下Mapper接口的文件一致,编译后会在同一目录下
2、设置SQL映射文件的namespace属性为Mapper接口全限定名
3、接口的方法名与SQL映射文件中sql语句的id一致,并保持返回类型一致
细节:满足1的条件下可使用扫描包的方式简化SQL映射文件的加载(这样映射文件多的话不用写这么多)
Mybatis核心配置文件
typeAliases:起类型别名,简化sql映射文件resultType的书写 (注意配置后resultType不区分大小写 user和User都可以)
environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment
注意:配置个标签时,需要遵循前后顺序(这是xml文件的约束)
Mybatis增删改查练习
使用Mybatis实现增删改查有两种方式:1.使用配置文件 2.使用注解完成(注解的方式更加方便快捷)
使用配置文件
Mybatis的<where>标签:
4.2 单条件动态查询(选择某个条件,只查询该条件内容)
<choose>标签 <when>标签 <otherwise>标签
5.添加
注意:Mybatis关闭了自动提交,开启了对应的事务,执行完后事务回滚了,需要手动提交
也可设置成sqlSessionFactory.openSession(true); //true 开启自动提交
useGeneratedKeys="true" keyProperty="id"
在主键是自增的情况下,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值不是数据库表中的字段名
6.修改
6.2 动态修改字段 例如:user表内有三个字段,但只需要用户填写两个字段
注意:要使用Mybatis的<set>标签,因为除了最后一句其它修改字段都有',' ,防止status无内容时的sql语句错误
7. 删除
7.2 批量删除
* 默认 array = 数组 collection="array"
separator:表示在每次进行迭代之间以什么符号作为分隔符 例如 7,8,9
close:表示以什么结束 可以把 in( ) 的括号写在标签内用 open="(" close=")"
细节处理(字段名和属性名映射关系):
数据库表的字段名称 和 pojo实体类的属性名称不一样,则不能自动封装数据 会变NULL
* 起别名:对不一样的列名起别名,让别名和实体类的属性名一样
方法二:sql片段抽离别名
* 常用方法:resultMap
参数传递
通过@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方法,构造方法就不去动了)
方式一:级联属性赋值一一匹配(不常用) (温馨提示:其它属性如果跟数据库字段一致可以不用进行匹配)
方式三:分步查询(数据量大用分步, 数据量小另外两种都可以,总结:都用分步)
通过另外一个sql语句查出来用select="" 设置分步查询的条件用column="",类似于嵌套子查询,
1对多(两种方法:collection标签、分步查询)
1.在部门实体类创建员工集合对象属性(记得给get set方法和重写toString方法,构造方法就不去动了)
区分1对1的association标签,1对多collection标签已经代表集合,用的是ofType而不是javaType,简单来说就是集合内对应类型是什么
测试 (emp内的dept为null是没有去映射它 因为禁止套娃!)
通过另外一个sql语句查出来用select="" 设置分步查询的条件用column="",类似于嵌套子查询,
使用注解完成
1对1(分步查询)
原理和配置文件分步查询一样,只不过换成注解的形式
测试(观察sql语句,它用两步查询出来的) enpName=‘null’是因为没有映射,同样也可以用注解的方式映射
1对多(分步查询)
原理和配置文件分步查询一样,只不过换成注解的形式
注:
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询黑马程序员最新版JavaWeb基础教程,Java web从入门到企业实战完整版_哔哩哔哩_bilibili