一.Javaweb的简介
javaweb即用Java语言来开发网站
网页--javaweb程序--数据库
二.JDBC(Java数据库连接)
JDBC就是使用Java语言操作关系型数据库的一套API。
MySQL驱动就是MySQL的实现类。
1.入门
(1)注册驱动
(2)获取连接
(3)定义SQL语句
(4)获取执行对象
(5)执行SQL语句
(6)处理结果
(7)释放资源
2.JDBC API
(1)Driver Manager(驱动管理类)
i.注册驱动
ii.获取连接 getConnection(url,user,password)
url:连接路径
语法:jdbc:mysql://ip地址:端口号(3306)/数据库名
(2)connection(数据库连接对象)接口
作用:i.获取执行SQL语句的对象
ii.管理事务: 开始:Setutocommit(boolean);
提交:commit();
回滚:rollback();(在try-catch中)
(3)Statement(对象)
executeUpdate(sql)执行DDL,DML
executeQuery(sql)执行DQL,返回值:resultset结果集对象
(4)resultset结果集对象
boolean next();将游标下移一行并判断
getxxx(参数)参数可以是列的编号或名称,xxx为数据类型,Int/String
(5)preparedStatement接口(防止sql注入)
作用:预编译Sql语句并执行。
useserverPrestmts=true开启预编译功能
mysql服务器-》检查sql语法-》编译-》执行sql
三.数据库连接池
好处:资源复用,提高速度,避免数据库连接遗漏。
负责分配,管理数据库连接。
常见的有:Durid,DBCP,C3P0
四.Maven
专门管理和构建Java项目的工具。
仓库:本地仓库,远程仓库,中央仓库
1.Maven的基本使用
命令:
compile 编译
test 测试
package 打包
install 安装
clean 清理
eg.mvn compile
2.Maven的生命周期
分为3套:clean,default,site(产生报告,发生站点)
同一个生命周期中,执行后边的命令,前面的所有命令都会自动执行。
3.Idea配置Maven
Maven坐标是资源的唯一标识。
坐标的组成:groupId:定义当前Maven项目隶属组织的名称(域名反写)
artifaltId:Maven项目的名称(模块名称)
version:定义当前的版本号
如何显示Maven侧面按钮。
4.依赖管理
(1)使用坐标导入jar包
<dependencies>标签
<dependency>
<groupId>
<artifactId>
<version>
<scope>
(2)自动导入
(3)快捷方式
ALT+insert
(4)依赖范围
scope默认compile
可以设置对应jar包的作用范围:编译环境,测试环境,运行环境
五.Mybatis
1.简介
Mybatis是一款优秀的持久层框架,用于简化JDBC的开发。
javaEE的三层框架:持久层,表现层,业务层
持久层:将数据保存到数据库的那一层代码。
2.JDBC的缺点
(1)硬编码问题:注册驱动,SQL语句
(2)操作繁琐:手动设置参数,手动封装结果集
3.Mybatis的快速入门
ALT+鼠标左键==整列编辑
(1)创建表,导入数据
(2)创建模块,导入坐标
(3)编写Mybatis配置文件
(4)编写SQL映射文件
(5)定义类,加载配置文件,获取sqlsessionFactory对象,获取SQL session对象
执行SQL,释放资源
4.解决SQL映射文件的警告提示
IDEA不认识数据库中的表,应该让其与数据库联系。
5.Mapper代理开发
在执行sql时,有硬代码问题。需要固定的(例如:”test.selectAll)
方法:获取接口代理对象,执行sql
创dirtory时,名字起法:(例如:com/.../...类似于Java中的com........一致)
方式:1.创建一个接口与sql的映射文件名一致,且置于同一个目录下
2.在接口中创建方法,返回值类型与参数类型一致,id为方法名
3.在测试类中,获取sqlsession对象
sqlsession.getMapper(userMapper.class)
4.获取Mapper代理对象
userMapper.selectAll();
environment:配置数据库连接环境信息
可以配置多个环境,用default属性切换不同信息。
注意配置标签时,要注意顺序。
Mybatis完成操作需要三步:编写接口方法-》编写sql-》执行方法
6.配置文件进行增删改
查看所有:(1)数据库字段的名称与实体类的不同(不可自动封装数据):1.起别名2.sql片段,使用sql标签
3.resultMap:id:完成主键字段的映射/ result:完成一般字段的映射=》column:表的列名
property:实体类的属性名
先定义<resultMap>标签,在<select>标签中,将resultType替换成resultMap
查看详情:就是根据id查询,mybatis参数占位符:#{}==》将会被替换成?为了防止sql注入
eg.<select id="..." resultMap="...">
select * from 表名 where id=(=可能会是>/<)#{id(与接口方法中的局部变量名称一样)};
</select>
如果是>/<,则需要进行特殊字符的处理。
1.转义字符:<==》<;
2.CDATA区:<![CDATA[ < ]]>
条件查询:参数接收:1.散装参数:如果方法中有多个参数,用Param(“参数占位符”)
2.对象参数(接收参数,处理参数eg.companyname="%"+companyname+"%"表示companyname前后字符任意,封装对象)
3.Map集合参数
动态条件查询:动态sql即sql语句会随着用户的输入或外部条件的而变化
(1)多条件:在select标签中添加if标签,if:条件判断 test:写条件表达式
如果遇到问题是条件1不成立,后面会有语法错误(即多了一个and)。
方案1:恒等式,where1=1 and...
方案2:用where关键字,<where>.....</where>
(2)单条件查询
从多个条件中选择一个
choose(when==>相当于case,otherwise==》default)
添加:<insert>
1.需要手动提交事务:sqlsession.commit();
2.可以设置自动提交事务:在获取sqlsession对象时,session sql=sqlsessionFactory.opensession(true);
<insert id="add" useGeneratedKeys="true" keyProperty="id"> insert into user(name,age,sex)values(#{Name},#{Age},#{Sex}) </insert>
id的值会被获取出来
修改:①修改全部字段
编写Mapper接口,返回类型void
编写SQL映射文件,执行方法
②修改动态字段
删除:
①删除一个:
②批量删除:
需要接收id数组
collection属性表示表要遍历的数组
Mybatis会将数组参数,封装成一个Map集合
六、Mybatis参数传递
提供了ParamNameResolver类,进行参数封装。
1.Mybatis接口方法中可以接受各种各样的参数
①单个参数:
pojo类型(eg.brand),collection,Map,list,Array,其他类型
②多个参数:
需要加注解:==》替换Map集合中的arg键名,可读性更高。
封装成Map集合,可不加注解,
一个参数对应两个键(arg0,param1)/(arg1,param2)
③单个注解:
1.pojo类:直接使用,属性名与参数占位符名称一致即可。
2.Map类型:直接使用,键名与参数占位符一致即可。
3.Collection:封装成Map集合
7.注解完成增删改查
直接写入接口类中。
使用注解开发会比配置文件开发更为方便,不需要在xml文件里添加SQL语句。
查询:@Select
添加:@Insert
修改:@Update
删除:@Delete
注解完成简单功能,配置文件完成复杂功能。