s框架原理及流程图(s框架原理图)

1年前 (2024-04-22)

今天给各位详细介绍关于“s框架原理及流程图”的核心内容以及“s框架原理图”的相关知识,希望对各位有所帮助。

  步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");,ApplicationContext接口,它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。配置文件中的bean的信息是被加载在HashMap中的,一个bean通常包括,id,class,property等,bean的id对应HashMap中的key,value呢就是bean

  具体如何加载?源码如下:

  if (beanProperty.element("map") != null){

  Map propertiesMap = new HashMap();

  Element propertiesListMap = (Element)beanProperty.elements().get(0);

  Iterator<?> propertiesIterator = propertiesListMap .elements().iterator();

  while (propertiesIterator.hasNext()) {

  Element vet = (Element) propertiesIterator.next();

  if(vet.getName().equals("entry")) {

  String key = vet.attributeValue("key");

  Iterator<?> valuesIterator = vet.elements() .iterator();

  while (valuesIterator.hasNext()) {

  Element value = (Element) valuesIterator.next();

  if (value.getName().equals("value")){

  propertiesMap.put(key, value.getText());

  }

  if (value.getName().equals("ref")) {

  propertiesMap.put(key, new String[]{

  value.attributeValue("bean")

  });

  }

  }

  }

  }

  bean.getProperties().put(name, propertiesMap);

  //看完反正我是默默放弃了。。。

  }

  12345678910111213141516171819202122232425

  第二步:调用getBean方法,getBean是用来获取applicationContext.xml文件里bean的,()写的是bean的id。一般情况都会强转成我们对应的业务层(接口)。例如SpringService springService =(SpringService)ac.getBean("Service");

  第三步:这样我们就可以调用业务层(接口实现)的方法。

  具体如下:

  Java反射博大精深,我也不很懂,具体请查看Java基础之—反射

  那么bean中的东西到底是怎么注入进去的?**简单来讲,就是在实例化一个bean时,实际上就实例化了类,它通过**反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。这样就回到了我们Java最原始的地方,对象.方法,对象.属性

  什么是spring? spring是一个容器框架,它可以接管web层,业务层,dao层,持久层的各个组件,并且可以配置各种bean, 并可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以直接getBean(id),使用即可

  Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象) ,Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

  层次框架图: 说明: web层: struts充当web层,接管jsp,action,表单,主要体现出mvc的数据输入,数据的处理,数据的显示分离。

  model层: model层在概念上可以理解为包含了业务层,dao层,持久层,需要注意的是,一个项目中,不一定每一个层次都有。

  持久层: 体现oop,主要解决关系模型和对象模型之间的*阻抗*

  IOC

  ioc(inverse of control)控制反转: 所谓反转就是把创建对象(bean)和维护对象(bean)之间的关系的权利从程序转移到spring的容器(spring-config.xml)

  说明:这对标签元素的作用:当我们加载spring框架时,spring就会自动创建一个bean对象,并放入内存相当于我们常规的new一个对象,而中的value则是实现了“对象.set方法”,这里也体现了注入了概念

  DI

  di(dependency injection)依赖注入: 实际上di和ioc是同一个概念,spring的设计者,认为di更准确的表示spring的核心

  spring提倡接口编程,在配di技术就可以达到层与层解耦的目的,为什么呢?因为层与层之间的关联,由框架帮我们做了,这样代码之间的耦度降低,代码的复用性提高

  接口编程的好处请访问(https://blog.csdn网站站点" rel="nofollow" />

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  第二步:加载我们的xml文件 第三步:创建SqlSessionFactoryBuilder 第四步:创建SqlSessionFactory 第五步:调用openSession(),开启sqlSession 第六步:getMapper()来获取我们的mapper(接口),mapper对应的映射文件,在加载mybatis.xml时就会加载 第七步:使用我们自己的mapper和它对应的xml来完成我们和数据库交互。即增删改查。 第八步:提交session,关闭session。

  代码如下:

  String resource = "mybatis-config.xml";

  SqlSession sqlSession = null;

  InputStream inputStream = Resources.getResourceAsStream(resource);//读取mybatis配置文件

  //SqlSessionFactoryBuilder这个类的作用就是为了创建SqlSessionFactory的

  SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

  SqlSessionFactory factory = builder.build(inputStream);

  /**

  * factory.openSession(); //需手动提交事务

  * factory.openSession(true); //系统自动提交事务

  */

  sqlSession = factory.openSession();

  CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class);

  //增删改查的操作

  sqlSession.mit();//如果没有提交,数据库的数据不会改变

  sqlSession.close();

  123456789101

  需要注意的是,sqlSession也自带一些数据交互的操作

  什么是Mybatis? mybatis专注sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。mybatis是一个持久层的框架,是apache下的项目。mybatis托管到goolecode下,后来托管到github下:mybatis Github地址mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

  mybatis底层实现 mybatis底层还是采用原生jdbc来对数据库进行操作的,只是通过 SqlSessionFactory,SqlSession Executor,StatementHandler,ParameterHandler,ResultHandler和TypeHandler等几个处理器封装了这些过程

  对原生态jdbc程序(单独使用jdbc开发)问题总结: 1、数据库连接,使用时创建,不使用就关闭,对数据库进行频繁连接开启和关闭,造成数据库资源的浪费 解决:使用数据库连接池管理数据库连接 2、将sql 语句硬编码到Java代码中,如果sql语句修改,需要对java代码重新编译,不利于系统维护 解决:将sql语句设置在xml配置文件中,即使sql变化,也无需重新编译 3、向preparedStatement中设置参数,对占位符位置和设置参数值,硬编码到Java文件中,不利于系统维护 解决:将sql语句及占位符,参数全部配置在xml文件中 4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。 解决:将查询的结果集,自动映射成java对象

  mybatis工作原理 mybatis通过配置文件创建sqlsessionFactory,sqlsessionFactory根据配置文件,配置文件来源于两个方面:一个是xml,一个是Java中的注解,获取sqlSession。SQLSession包含了执行sql语句的所有方法,可以通过SQLSession直接运行映射的sql语句,完成对数据的增删改查和事物的提交工作,用完之后关闭SQLSession。

  Mybatis输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型

  Mybatis输出映射 1、resultType 作用:将查询结果按照sql列名pojo属性名一致性映射到pojo中。使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。如果查询出来的列名和pojo中的属性名全部不一致,则不会创建pojo对象。只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。 2、resultMap** 使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。association: 作用:将关联查询信息映射到一个pojo对象中。场:为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。 collection: 作用:将关联查询信息映射到一个list中。场:为了方便查询遍历关联信息可以使用collection将关联信息映射到list中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。如果使用resultType无法将查询结果映射到list中。

  Mybatis的动态sql

  什么是动态sql? mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。包括, where ,if,foreach,choose,when,otherwise,set,trim等标签的使用

  数据模型分析思路 1、每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程 2、每张表重要的字段设置 非空字段、外键字段

  3、数据库级别表与表之间的关系 外键关系

  4、表与表之间的业务关系 在分析表与表之间的业务关系时一定要建立 在 某 个 业 务 意 义 基 础 上 去 分 析 。 color{red}{在某个业务意义基础上去分析。}在某个业务意义基础上去分析。

以上内容就是关于s框架原理及流程图和s框架原理图的精彩内容,是由小编认真整理编辑的,如果对您有帮助欢迎收藏转发...谢谢!