发表于: 2017-11-01 20:29:40
1 828
这两天完成的事情:
1.学习了JDBC连接数据库的原理,了解了Spring框架的IOC,了解了MyBatis如何与数据库连接,了解了PerparedStatement和Statement的区别,了解了JDBC的缺点,了解了三层结构原理,了解了一下DAO,温习了maven的操作,学习了Junit单元测试,熟悉了导入jar包的过程,理解了一丢丢XML的操作方式;
JDBC(Java Data Base Connectivity.java数据库连接),由一些接口和类构成的API。
J2SE的一部分,由java.sql.javax.sql包组成
SQL注入问题:or 1 or的时候显示所有数据
SQL注入就是将原本的SQL语句的逻辑结构改变,使得SQL语句的执行结果和原本开发者的意图不一样;
方法:在表单中将命令当作用户输入提交给程序;
PreparedStatement和Statement区别:
在SQL中包含特殊字符或者SQL的关键字(如:'or 1 or')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可以用PreparedStatement来解决
PreparedStatement优点:
1.没有SQL注入问题;
2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出;
3.数据库和驱动可以对PreparedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。
JDBC实现数据库的连接:
结果如图:
JDBC 问题总结
1.数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果是用数据库连接池可以解决此问题
2.SQL语句在代码中硬解码,造成代码维护不容易,适应应用SQL变化的可能较大,SQL变动需要改动JAVA代码
3.使用prepareStatement向占有位符号传递参数存在硬解码,因为SQL语句的where条件不稳定,可能多也可能少,修改SQL还要修改代码,系统不易维护;
4.对结果集解析存在硬解码,SQL变化导致解析代码变化。系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。
关于XML的配置部分图解:
通过Mybatis实现与数据库的连接:
代码部分:
结果如图:
三层架构:
通常意义上的三层架构就是将整个业务应用划分为:表现层UI、业务逻辑层BLL、数据访问层DAL。区分层次的目的是为了“高内聚,低耦合”的思想。
1.表现层UI:通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2.业务逻辑层BLL:针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3.数据访问层DAL:该层所做事务直接操作数据库,针对数据的添加、删除、修改、查找等。
在软件体系架构设计中,分层式结构是最常见,也是最终要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分为:数据访问层、业务逻辑层、表示层。
三层结构原理:
3个层次中,系统主要功能和业务逻辑都在业务逻辑层处理。
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是简单的放置三台机器就是三层体系结构,也不仅仅有B/S应用层才是三层体系机构,三层是指逻辑上的三层,即使这三个层放到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
各层的作用:
1.数据访问层:主要是对原始数据的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或者表示层提供数据服务。
2.业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3.表示层:主要是表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和修改,逻辑层都能完善地提供服务。
DAO:
data access Object是后台实现业务逻辑的java类;
对应DAO还有个DTO是Data transfer Object数据运输对象,它是一个定义了很多变量及变量的get,set方法的类,常用来做流程方法的参数.也可以看成是一个自定义的数据类型;
domain是范围,界线,也被用来批一个变量的有效作用域
也常用这个词做一个包,然后在里面放些DAO类文件。
spring是开源的轻量级框架
spring核心主要两部分:
1.aop:面向切面编程,扩展功能不是修改源代码实现
2.ioc:控制反转
比如有一个类,在类里面有方法(不是静态方法),调用类里面的方法,需要创建类的对象,使用对象调用方法,创建对象过程中需要new一个新对象
把对象的创建不是通过new方式实现,而是讲给Spring配置创建类对象。
Spring是一站式框架:
1.spring在javaee三层结构中,每一层都提供不同的解决技术
web层:springMVC
service层:spring的ioc
dao层:Spring的jdbcTemplate
Spring的ioc操作:
1.把对象的创建交给Spring进行管理
2.ioc操作的两部分:
1.ioc的配置文件方式
2.ioc的注解方式
IOC底层原理:
1.底层原理使用技术
1.xml配置文件
2.dom4j解决xml
3.工厂设计模式
4.反射
开发中的思想:高内聚,低耦合
IOC入门案例:
结果如图:
=================================================================
明天计划的事情:复习与JDBC有关的数据库连接技术并熟练掌握,学习查看日志,学习Linux系统的基础知识;
*************************************************************************************************************
遇到的问题:
1.JdbcTemplate还是不懂;
2.Eclipse前期的程序和后期的程序分别乱码,GBK编码早期的乱码,UTF-8近期的乱码;
3.关于MyBatis连接数据库解决bug花了3个小时,主要问题是
<property name="url" value="jdbc:mysql://localhost:3306/enlist?useUnicode=true&characterEncoding=UTF-8&
useSSL=false&zeroDateTimeBehavior=convertToNull" />的问题;这段代码是正确代码;
sqlMapConfig.xml在src目录下移动到SQLmap目录下再移动回来成功的解决了许多无法解决的bug;Eclipse卒!
*****************************************************************************************************
收获:决定换一个IDE
评论