java学习第三十六天内容

1.前一天重点内容复习

        数据库的三大范式

                第一范式(1NF):表中每一列不可分割

                第二范式(2NF):在满足1NF的基础上,表中非主键字段完全依赖于主键

                第三范式(3NF):在满足2NF的基础上,非主键字段不能产生传递依赖

        多表查询

                 内连接:

                        隐式内连接

                                SELECT 字段列表 FROM 表名1,表名2 WHERE 表名1的某个字段 = 表名2的某个字段

                        显式内连接

                                SELECT 字段列表 FROM 表名1 INNER JOIN 表名2 ON 连接条件

                外连接:      

                        左外连接查询

                                SELECT 字段列表 FROM 左表 LEFT OUTER JOIN 右表 ON 连接条件

                        右外连接查询

                                SELECT 字段列表 FROM 左表 RIGHT OUTER JOIN 右表 ON 连接条件

                子查询 

                        聚合函数加上集合比较运算符     

                        使用in集合数据

                        将查询结果作为虚表和其他表连接

        数据库备份和还原的命令行方式

                备份:打开命令提示行窗口输入:mysqldump -u用户名 -p密码 库名 > sql文件路径

                还原:新建库并且使用,之后输入source sql文件路径,回车即可

        获取类字节码文件方式

                通过使用Object类中的getClass()方法

                        对象.getClass()

                任意java类型的class属性可以获取

                        类名.class

                反射的静态功能forName

                        public static Class forName(String pathname)

                                pathname为当前类的全限定名称(包名.类名)

        如何读取src目录下的资源文件

                类名.class.getClassLoader().getResourceAsStream("文件名");

2.虚表连接其他表查询

        将查询结果作为一个表,起一个表名与其他表进行连接

3.数据库事物

        概念:实际的业务操作,用户的单个行为,可能要同时操作多个表或者多个sql语句,要么同时成功执行,要么同时失败

        特点:

                传统事物ACID

                        原子性:该事物是一个整体,要么同时执行成功,要么同时执行失败

                        一致性:事物操作前后总量不变,  只是发生转移

                        隔离性:事物和事物之间是独立的,不能相互影响

                        持久性:如果开启并且提交事物之后,对数据的修改永久改变

        操作事物流程

                开启事物:START TRANSACTION; 

                        开启事物之后,将命令由自动提交改为手动提交

                        SELECT @@AUTOCOMMIT; 1为自动提交,2为手动提交

                进行添加,删除,修改操作:UPDATE;/DELETE;/INSERT;...

                如果执行成功,则手动提交事物:COMMIT;

                        如果操作没有问题,一定要手动提交事物,否则不保存操作结果

                如果失败,回滚事物:ROLLBACK;

        事物隔离级别:安全性从低到高,效率从高到低

                read uncommitted;:读未提交,安全性最低,效率最高,会出现严重问题“脏读”,一个事物读到另一个没有提交的事物

                read committed;:读已提交,较前者安全性提高,效率降低,可有效防止脏读,会出现不可重复读问题,就是在读的过程中,数据被其他用户端修改,此时读的数据也会修改,无法重复读到刚开始的数据

                repeatable read;:可重复读,mysql默认隔离级别,有效防止脏读,不可重复读的问题

                serializable;:串行话,级别最高,效率最低,有效防止脏读,不可重复,幻读问题

                查看隔离级别

                        mysql8.0以下:SELECT @@tx_isolation;

                        mysql8.0:SELECT @@transaction_isolation;

                设置隔离级别

                        set global transaction isolation level 隔离级别;

4.JDK动态代理

        介绍:属于代理设计模式(结构型设计模式),让代理角色帮助真实角色完成事情,就是对真实角色的功能进行增强

        代理模式分类

                静态代理:代理角色和真实角色必须实现同一个接口

                动态代理: 

                        jdk动态代理(基于接口)

                        cglib动态代理(基于基础)

        前提条件:必须存在一个接口,基于这个接口来完成代理

        相关方法

                public static Object newProxyInstance

                        (ClassLoader loader,

                        Class<?>[]  interfaces,

                        InvocationHandler h) throws IllegalArgumentException:产生jdk动态代理实例

                        参数

                                ClassLoader loader:真实角色的类加载器

                                Class<?>[]  interfaces:真实角色实现的接口列表

                                InvocationHandler h:实现此接口的实现类作为处理对象

                InvocationHandler:接口

                        Object invoke(Object proxy,方法 method,Object[] args)

                                参数

                                        Object proxy:代理类的实例

                                        方法 method:基于接口中的方法的类对象

                                        Object[] args:调用接口方法时的实际参数数组

                        public Class<?>[] getInterface():获得对象实现的接口              

5.JDBC    

        介绍:java操作数据库的一种连接器

        本质:是实现sun公司提供的数据库连接接口的类,也就是数据库厂商提供的驱动包

                接口分类:

                        Driver:驱动类必须实现的接口 

                        Connection:特定数据库的连接会话

                        Statement:  sql执行对象

        Java连接数据库操作步骤;

                导包,导入数据库的驱动jar包

                        ProjectStructure,Modules,Dependencies

                注册驱动

                        Class.forName("驱动类的全限定名称");

                                类全限定名称

                                        5.5:com.mysql.jdbc.Driver

                                        8.0:com.mysql.cj.jdbc.Driver

                获取数据库的连接对象

                        DriverManager(驱动管理类):用于管理一组jdbc驱动程序的基本服务

                                静态功能:public static Connection getConnection(String url,String user,String password)throws SQLException:获取数据库连接对象

                                参数String ur:统一资源定位符

                                        “jdbc:数据库类型://域名:端口号/库名”

                                        如果为mysql为8.0之后版本后面要带参数:

?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true(字符集为utf-8,是否进行数据库验证,服务器时区,是否公开访问)

                                参数String user:数据库用户

                                参数String password:数据库密码

                准备静态sql语句

                        String sql = "sql语句";

                通过数据库连接对象获得执行数据库的对象

                        Connection接口中的方法

                                Statement createStatement()throws SQLException:创建一个Statement对象,用于将SQL语句发送到数据库

                数据库执行对象执行sql语句并返回结果

                       Statement 类中的方法:

                                int executeUpdate(String sql) throws SQLException:执行给定的sql语句

                释放资源

                        数据库执行对象.close();

                        数据库连接对象.close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值