java EE 知识点

 

Hibernate

1、ORM映射。

   对象模型和关系模型的映射关系。也就是说,哪个类对应哪个表,哪个属性对应哪个列。而我们做持久层的目的就是完成对象模型和关系模型的数据转换。

 

2、hibernate优点和缺点。

  优点:

    Hibernate是一种开放源代码的对象/关系映射持久层框架

     事务处理,生命周期管理不依赖于J2EE容器

     解决数据库的方言问题

    hibernate只需要操作对象就可以完成数据库的增、删、改、查操作。使用hibernate更面向对象

     轻量级、无侵入性,移植性很好

 

   缺点:

    不适用于批量对对象进行操作时

         不能使用数据库特定映射

    表间关系很复杂时,会造成性能问题

 

 

 

3、hiberante环境的搭建

4、hibernate的编码。SessionFactory、Session、Query接口的使用。事务的开启、回滚、提交。

 

 

5、主键生成策略。

  increment:由hibernate来生成主键。数据库可以不是自动增长列,不能用于集群。

  identity:利用DB2、sqlserver、mysql的自动增长列来产生主键。

  sequence:利用oracle的序列产生主键。

  uuid:利用UUID算法产生字符串主键。

  native:根据方言描述,来决定采用identity或sequence产生主键。

  foreign:使用另一个表的主键,作为当前表的主键。用于一对一的主键关联。

  

6、对象状态

   瞬时状态:对象是新建的。数据库中没有相关的记录,不受sesion管理。

   持久状态:数据库中有相关记录,受session管理。对象数据和数据库数据随时同步。

   游离状态:当session一提交,数据库中有相关记录。但该对象不受session管理。

        

 

7、原生SQL查询,利用SqlQuery接口查询,使用SQL语句来查询,用于比较复杂的查询。

8、HQL查询,利用Query接口查询,利用实体类、属性来查询数据。

 

9、get和load的区别。

  get:立即加载,无论是否使用都发出sql语句作查询。如果主键不存在时,返回null

  

  load:延迟加载,不立即发出sql语句查询,要使用时,再发出SQL语句查询。如果主键不存在,抛出异常。

 

10、HQL查询中参数绑定的两种方式(参数名称:name  

参数位置?,从0开始)

参数名称:

Query query=session.createQuery(

“from User user where user.name=:customername ”);

query.setString("customername","张三");

 

参数位置:

Query query=session.createQuery(

“from User user where user.name=? ”);

query.setString(0,"张三");

 

 

11、HQL查询中的分页。

  Query query = session.createQuery("from UserInfo");

   //设置起始条数,第一条从0开始。

  query.setFirstResult(0);

   //设置显示条数

  query.setMaxResults(2);

 

 

 

12、hibernate的实体映射

一对一(主键关联(一个表的主键同时又是另一个表的外键,没有专门的外键列),外键关联(有专门的外键列,是唯一的,是一对多的特例))一般使用外键关联,外键可以设置为null,但主键不行。

一对多、多对多

 

13、掌握cascade和inverse区别。

cascade类似数据库的级联操作,主表记录更改或删除,从表记录是否做相应的操作。维护是记录。

inverse控制反转。如果为true。表示在插入当前对象时,不插入外键,外键的维护由另一方完成。一般设置在一方,外键关系一般由多方维护,维护的是外键。

 

14、一级缓存和二级缓存的区别。

一级缓存:(事务级缓存) 是基于   Session的生命 周期实现的,session一旦关闭,一级缓存就清除,一级缓存为hibernate自带的缓存,是必需的。

 

二级缓存:(应用级缓存)即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享.在Hibernate中,应用级缓存由SessionFactory实现

 

 

15、二级缓存的产品EHcache、Oscache。及相关的配置。查询缓存是针对查询出的集合进行缓存,由于条件不一致导致集合内容不一致,利用率不高。

 

16、延迟加载的概念。分为对象延迟加载(load),集合延迟加载(一对多、多对多的关联集合),属性延迟加载(clob大数据使用时)

 

17、连接池的概念及工作原理。(c3p0、dbcp、proxool)

    传统的持久层操作中,每一次请求都要建立一次数据库连接,使用完后都得断开,以释放内存资源。频繁的数据库连接操作势必导致流操作过多,占用很多的系统资源,从而导致响应速度下降。而且不能控制被创建的连接对象数,导致系统资源被毫无顾及的分配出去,最终可能导致服务器内存崩溃。

    而连接池就是为数据库连接建立一个“缓冲池”。预先在连接池中放入一定数量的连接,当需要建立数据库连接时,只需从连接池中取出一个,使用完毕之后再放回去。由于连接一直不关闭从而减少了流操作,同时可以设置最大连接数来控制所建立的连接数量,防止服务器内存崩溃。

    工作流程:当持久层需要一个连接对象时,先去连接池中寻找空闲连接。找到后,将连接对象状态设置为忙碌;用完后,放回连接池后,又将连接对象状态设置为空闲。

如果连接池中没有空闲连接,则检查连接池是否到达最大连接数。如果没有到达最大连接池,则创建新连接并分配给请求的用户;如果达到了最大连接数,则等待一段时间。在等待时间内如果有连接被释放,则分配给等待用户。如果在等待时间结束后,还没有连接释放,则返回null。

 

 

18、锁机制:当多个用户同时存取或查询数据时,在一个用户操作时保证数据不被别的用户修改。

悲观锁:一个用户操作记录时不允许别的用户进行操作。类似于线程同步。效率低,适合短事务。

乐观锁:通过版本控制器实现,一个用户操作时,会记录版本号,在提交时,会检查版本号和记录版本号是否一致。如果一致,则提交,并将版本号加一;如果不一致,需要重新下载新的记录。

 

19、掌握注解的使用。及使用注解环境的搭建。

 

 

 

 

 

 

 

 

Spring

1、spring容器的作用

      a、Spring能有效地组织并管理中间层对象,减少类与类之间的依赖,达到松耦合的目的。 

         b、由于spring容器中取出的对象默认是单例模式,从而可以避免单例模式在项目中过多的使用。

         c、spring容器可以实现真正的面向接口编程

         d、spring的AOP通过代理模式,提供面向切面编程。并提供声明性事务管理。

         e、spring支持JDBC及常见的ORM框架,以及支持常见的MVC框架

 

 

2、IOC是什么?

    控制反转,不直接建对象,由配置文件描述类与类的关系。采用工厂模式将各个组件组合在一起。

   

   

3、IOC注入数据的方式:

    接口注入,setter注入(set方法注入),构造方法注入(利用构造方法完成属性的注入)

       ioc容器通过读取配置文件进行装配

         IoC把工厂方法和对象生成这两者合并在一起

         IoC的目的就是提高程序的灵活性和可维护性

         IoC中最基本的Java技术就是“反射”编程

   

4、spring环境的搭建。(aop、core、mvc、orm、web)

5、spring容器:

   Bean工厂、应用上下文。

   

6、Bean工厂和应用上下文的区别。

   应用上下文是Bean工厂的子接口,功能更为强大。

  Bean工厂是延迟加载,应用上下文是立即加载。

  spring容器中取出的实体对象默认是单例模式

  

7、应用上下文的实现类作用。

ClassPathXmlApplicationContext  从src目录下查询配置文件。

FileSystemXmlApplicationContext 从工程下查询配置文件(只能用于java项目)

XmlWebApplicationContext  从web项目的目录下查询配置文件(只能用于web项目)

 

8、

         bean装配的方式,value和ref的含义。

         value是直接赋值,ref引用已经注册的bean。

         bean默认是单例模式。利用scope="prototype"singleton="false"提供多实例。

         bean的装配支持数组、List、Set、Map、Properties

         bean标记提供基本类型、包装类、String、Resource类型(物理提供的资源)注入。不支持如date等复杂类型注入。

 

9、bean中id和name的区别。

         id唯一,不能有特殊字符。name可以为一个bean建多个name。并可以有特殊字符。如果在整合Struts1时,必须用name

        

10、了解如何通过构造方法注入。

         利用实体类的构造方法完成属性值的注入。

         <constructor-argindex="0">

   <value>aaaa</value>

 </constructor-arg>

  需要依赖实体类的构造方法。在创建对象时进行属性值注入。

  相比而言,利用setter注入更为灵活

        

        

11、熟练掌握动态代理和静态代理代码的实现。

 

12、掌握AOP相关的术语。

         切面(Aspect):要实现的交叉的非核心业务功能

         通知(advice):通知切面的实际实现代码

         目标对象(target):被通知的对象

         代理对象(proxy):将通知应用到目标对象后创建的对象

         切入点(Pointcut):定义通知应用在哪些连接点

        

13、掌握通知类型:

         前置通知(方法执行前)

         返回后通知(方法正常执行后执行。有异常不执行)

         后通知(方法执行后,无论是否有异常都会执行)

         环绕通知(方法执行前和方法执行后都附加逻辑)

         抛出异常通知(异常抛出后)

        

14、ProxyFactoryBean 用于产生代理对象。PointCut用于产生切入点。

 

15、掌握通过自动代理+注解方式实现AOP。

   通过自动代理,配置代码更少,程序代码可读性更好,更简洁,但性能较低

  

自动代理:<aop:aspectj-autoproxy/>

前置通知:@Before("execution(* com..*.*(..))")

返回后通知:@AfterReturning("execution(* com...*.*(..))")

环绕通知:@Around("execution(* com.lovo..*.*(..))")

 ProceedingJoinPoint point;

 Object targetObj = point.getTarget();//得到目标对象

 Object returnObj = point.proceed();//执行目标方法

抛出异常通知:

@AfterThrowing("execution (*com.lovo.bean..*.*(..))")

 

 

16、熟练掌握SSH整合的步骤。

 

17、可以利用DataSource标记提供数据库连接,代替hibernate基本配置文件的设置。同时可以通过dbcp连接池的设置提高效率。

 

18、spring事务管理

利用HibernateTransactionManager定义事务管理器

spring可以利用@Transactional注解实现事务。

利用AOP环绕通知,通过代理模式实现事务管理。

 

 

19、单例模式

public class Single{

         privatestatic Single s = new Single();

  private Single(){}

   public static Single getSingle(){

                   returns;

    }

}

 

 

20、web容器加载spring的方式:

ContextLoaderServlet 利用servlet加载

ContextLoaderPlugIn  利用struts插件加载

ContextLoaderListener 利用监听器加载

 

利用这些方式读取spring相关的配置文件,从而加载spring容器管理的各个组件。

 

 

21、理解三层架构

三层架构是一种架构模式,指的是表现层、业务层、持久层。

 

持久层:采用DAO模式。建立实体类和数据库表映射。将类和表,属性和列建立映射关系。也就是说,哪个类对应哪个表,哪个属性对应哪个列。而持久层的目的也就是完成对象数据和关系数据的转换。

 

业务层:采用事务脚本模式。将一次请求的内容封装成一个方法,保证该方法中所做的数据库更新操作同时成功同时失败,从而避免数据混乱。

 

表现层:采用MVC模式。M为模型,也就是实体类,作用是封装和传输数据。V为视图,也就是jsp和html,负责展示数据。C为控制,也就是servlet和Action,负责业务流程的控制及业务组件的调用

SpringMVC

1、掌握springMVC的特点。

          spring MVC是一个基于MVC模式的表现层框架,在spring2.5以后新增了注解功能。和同类的MVC表现层框架相比,有如下特点:

         1、基于的是servlet/jsp模式

         2、控制器不在需要继承其它类,只需要用@Controller注解

         3、不需要有formbean之类的对象了,方法参数中需要的页面值,可通过@RequestParam直接从页面请求中获得。

         4、控制器方法签名定义灵活。

         5、返回页面直接在方法中指定,可以是String,也可以是其它的,比如:ModelAndView或void等。

         6、性能也很优秀,性能高于struts2,和struts1相当。

        

2、springMVC环境的搭建。

导入相关的jar包

 

注册前端控制器DispatcherServlet。需要指明spring配置文件路径

<servlet>

       <servlet-name>springmvc</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

         <init-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>classpath:app*.xml</param-value>

     </init-param>

         <load-on-startup>1</load-on-startup>

 </servlet> 

 

<servlet-mapping>

       <servlet-name>springmvc</servlet-name>

       <url-pattern>*.do</url-pattern>

 </servlet-mapping>

 

默认情况下:DispatcherServlet会寻找WEB-INF下,命名规范为[servlet-name]-servlet.xml文件。也可以通过init-param改变默认配置

 

在spring 配置文件中,加入

<mvc:annotation-driven/>提供对spring mvc注解、验证支持

 

<context:component-scanbase-package="com.lovo.action"/>扫描指定文件夹中的@Controller类,读取类中的注解。该标签可以加入多个,以读取不同文件夹中的类

 

3、springMVC的工作流程

在springMVC中存在两种控制器:前端控制器和应用控制器。

前端控制器(DispatcherServlet),负责接收客户端请求,根据请求路径访问应用控制器,负责将页面参数填充javabean,负责转发页面,对标签类进行调用。

应用控制器(用户书写的Action),负责产生业务组件,调用业务组件的方法完成业务,根据结果返回转发的页面对象

 

工作流程:

当客户端以XX.do请求服务器,服务器使用前端控制器DispatcherServlet接收请求。DispatcherServlet借助HandlerMapping,根据请求的URL路径,定位到具体的Controller。

和应用控制器的具体方法。并将封装好数据的实体对象传入应用控制器方法。由应用控制器方法,完成业务组件的业务方法的调用,然后根据业务方法处理的结果,返回需要转发的页面路径。DispatcherServlet根据路径,完成页面转发。

 

 

4、应用控制器的使用。

应用控制器类前加入@Controller,注册为应用控制器,默认为单实例。

 

 a、   

   @RequestMapping("/reg")

         publicString mytest() throws Exception{

       ……

      }

    客户端请求路径为/reg.do

 

  b、 

  @RequestMapping("/test")

   public class UserAction {

     @RequestMapping("reg")

         publicString mytest() throws Exception{

       ……

      }

     客户端请求路径为/test/reg.do

    

 

 

 

 

5、Spring MVC方法签名

 

a、

public String mytest(

@RequestParam(value="name")String userName,接收客户请求参数name赋值给形参userName

int age ,    如果请求参数名和形参名一致,可以不写@RequestParam

HttpServletRequest request,  请求对象

HttpServletResponse response  响应对象){

}

 

 

b、

@RequestMapping("ps/{id}",method=RequestMethod.GET")

         publicString test(

                   @PathVariable("id")int myid){

 

}

<a href="ps/1.do">访问</a>

该请求只能处理GET方式。

利用PathVariable("id")得到路径参数数据

 

 

c、

@RequestMapping("/reg")

         publicString test(

         @RequestParam(value="tid",defaultValue="2")intid){

 

}

页面上提交tid的键值对,将值赋值给id参数。如果页面没有提交tid的键值对,那么默认将defaultValue的值赋值给id。

 

 

d、

   @RequestMapping("/reg")

         publicString mytest(

@ModelAttribute("user")  UserBean bean,将请求参数的值赋给bean对象。同时将bean放置在request中。等价于request.setAttribute("user",bean);

    ){

 

       return "/index.jsp";表示执行完该方法后,内部转发至index.jsp

        // return "redirect:/index.jsp";重定向到index.jsp

}

 

 

6、自定义转换器

Spring类型转换器分为:局部类型转换器和全局类型转换器

 

全局类型转换器

public class DateConverter implementsConverter<String, java.util.Date>{

         publicDate convert(String arg0) {

                   SimpleDateFormatdateFormat = new SimpleDateFormat("yyyy-MM-dd");

                   Datedate = null;

                            date= dateFormat.parse(arg0);

 

                   returndate;

         }

 

}

 

applicationContext.xml:

<mvc:annotation-drivenconversion-service="tc"/>

<bean id="tc"class="org.springframework.context.support.ConversionServiceFactoryBean">

   <property name="converters">

         <list>

                 <beanclass="com.lovo.util.DateConverter"/>

         </list>

    </property>

</bean>

 

 

7、文件上传

@RequestMapping("/reg")

         publicString register(HttpServletRequest request,

@RequestParam("head")CommonsMultipartFile mFile) head为表单名

{

String fileName  = mFile.getOriginalFilename();上传文件名

ServletContext context =request.getSession().getServletContext();

String path = context.getRealPath("face")+"/"+fileName;

mFile.transferTo(new File(path)); ;//写入数据

}

在spring配置文件中加入上传组件支持

<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

 </bean>

 

 

8、异常处理

public class MyHandler implements HandlerExceptionResolver{

         publicModelAndView resolveException(HttpServletRequest arg0,                          HttpServletResponse arg1, Object arg2,Exception ex) {

                   //转向出错页面              

              return newModelAndView("/error.jsp");

}}

 

 

9、spring和springMVC整合

需要分成springMVC的配置文件和spring基本配置文件

 

spring 基本配置文件一般为和持久层框架整合信息

<!-- 扫描指定包中的spring注解类 -->

<context:component-scanbase-package="com.lovo.service">

</context:component-scan>

 

 

springMVC配置文件一般配置springMVC相关的信息

<context:component-scanbase-package="com.lovo.action">

</context:component-scan>

 

 

 

在web容器加载时,在上下文监听器中加载spring基本配置文件。

<context-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>classpath:applicationContext-base.xml</param-value>spring基本配置文件路径    

</context-param>  

<listener>        

                   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

 

 

在注册springMVC前端控制器时,加载springMVC配置文件

<servlet>

                   <servlet-name>mvc</servlet-name>

                   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

                   <init-param>

                            <param-name>contextConfigLocation</param-name>

                          <param-value>classpath:applicationContext-action.xml</param-value>

                   </init-param>

                   <load-on-startup>1</load-on-startup>

</servlet>     

 

 

 

 

 

 

 

 

Mybatis

1、mybatis特点:

    mybatis是一种持久层框架,也属于ORM映射,前身是ibatis。

    相比于hibernate,hibernate为全动自动化,配置文件书写之后不需要书写SQL语句,但欠缺灵活,很多时候需要优化

    mybatis为半自动化,需要自已写SQL语句,需要自己定义映射。增加了程序员的一些操作,但带来了设计上的灵活

    mybatis为对数据库的兼容性比hibernate差。移植性不好,但可编写灵活和高性能的SQL语句

   

2、mybatis环境搭建。

 

3、命名空间

         在orm映射文件根元素下加入

         <mapper namespace="user">

                    设置命名空间

 

         命名空间的作用:

         更好地分类SQL语句块,更好维护

         防止SQL语句块重名

 

         在设置了命名空间后,那么在相应的程序调用中,方可以使用 “命名空间 . 语句块名”进行调用相应的sql语句。

 

4、resultMap和resultType的使用

resultMap可以定义属性和数据库列的对应关系,提高重用性,其它查询语句也可以引用。

<resultMapid="resMan" class="com.lovo.bean.ManBean">

    <result property="manId"column="id"/>

   

         </resultMap>

书写SQL引用结果集

<selectid="findAll" resultMap="resMan">

                select* from t_man

       </select>

 

 

resultType为查询返回的类型,只能查询基本信息,不能查询关联信息,只能在属性名和列名相同时使用。

<selectid="all" resultClass="users">

select *from t_user

</select>

 

5、条件查询

mybatis同时支持parameterType和Map集合提供参数

parameterType方式:

<selectid="findByName" resultType="man"  parameterType="user">

  select * from t_man where userName like#{userName}

       </select>

 

Map方式:   

<selectid="findUserByName" resultType="user">

select *from t_user where id=#{id};//引用Map的id键对应的值

</select>

 

MapqueryMap  = new HashMap();

                   queryMap.put("id",3);

List<UserBean>list = this.getSqlSessionTemplate().

              selectList("findUserByName",queryMap);

              

6、条件查询SQL语句的书写

如果在SQL语句中有特殊字符,可以在CDATA块中书写。

<![CDATA[

                   select * from t_man wherebirthday < #{birthday}

         ]]>

 

7、$和#的区别

#在生成SQL时,对于字符类型参数,会拼装引号

$在生成SQL时,不会拼装引号,可用于orderby之类的参数拼装

 

 

8、批量操作和foreach标签

<deleteid="delManyMessage" parameterClass="message">

                   delete from t_message whereid in(

                   <foreachcollection="ids" item="id" separator=",">

                            #{id}

                   </foreach>

                   )

         </delete>

collection为用于遍历的元素(必选)

item表示集合中每一个元素进行迭代时的别名.

separator表示在每次进行迭代之间以什么符号作为分隔 符.

 

9、动态SQL

当查询条件需要动态生成时,需要使用动态SQL

<selectid="dynaFindUser" resultMap="user">

                   select * from t_user where1=1

                   <if test="id !=0">

                            and u_id > #{id}

                   </if>

                   <if test="userName !=null">

                            and u_userName like'%${userName}%'

                   </if>

         </select>

        

10、掌握一对多、多对多关系映射配置

    <!-- 属性名resultList 类型为List集合 

          column是本表要传入的select语句块中的参数,集合查询的sql语句id定义为resultByUid-->

    <collectionproperty="resultList" column="t_id"select="resultByUid"/>

 

11、掌握mybatis和spring整合

dataSource定义数据源DriverManagerDataSource。

配置核心对象sqlSession

配置事务管理器DataSourceTransactionManager

 

12、掌握动态分页查询

使用<includerefid="dynaUserSql"/>

链接已存在的sql语句块<sqlid="dynaUserSql">

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值