JAVA基础入门教程 -

JAVA基础入门教程 -,第1张

第一阶段:Java语言基础

★ Java语言基础

1、面向对象思维JAVASE

2、(类加载机制与反射,annotation,泛型,网络编程,多线程,IO,异常处理,常用API,面向对象,JAVA编程基础)

3、Java8新特性

JAVA战狼班第二阶段:数据库

★ 数据库

1、Oracle(SQL语句、SQL语句原理、SQL语句优化、表、视图

2、序列、索引、Oracle数据字典、Oracle 数据库PL/SQL开发

3、数据库设计原则、 MySQL 、 JDBC

第三阶段:Web基础

★ Web基础

1、HTML5(H5)基本文档结构、链接、列表、表格、表单;

2、CSS 基础语法、盒子模型、浮动布局、定位;

3、JavaScript语言基础、DOM 编程、事件模型等),JQuery,AJAX框架,XML,BootStrap组件

第四阶段:Java Web技术和主流框架

★ Java Web技术和主流框架

1、JSP&Servlet、struts2,hibernate4,spring4,JPA,maven

2、SpringData,SpringMVC,MyBatis,SpringSecurity,shiro,Nginx

第五阶段:Linux

★ Linux

1、Linux安装、熟悉Linux的基础命令、vi编辑器的使用、awk和sed命令使用、用户和组

2、文件及目录权限管理、使用ACL进行高级访问控制、网络配置和软件包安装、启动流程和服务管理

3、系统监控和日志管理、进程管理和计划任务、ssh远程登录、shell基础和shell脚本。

第六阶段:大数据技术(Hadoop和Spark)

★ 大数据技术(Hadoop和Spark)

1、Hadoop (Hadoop基础和环境搭建,HDFS体系结构,MapReduce;Hadoop的集群模式、HDFS联盟,利用ZooKeeper来实现Hadoop集群的HA(高可用性)功能

2、Yarn的任务调度机制,Apache Hive,Pig数据处理,集成Hadoop和Sqoop

3、Flume以及Apache Kafka来实现数据的交换,安装部署HBase,Storm)

4、Scala 语言(Scala环境搭建、Scala基础语法、模式匹配、重载与构造器、Map与reduce、元组、继承、StringContext,Option Some None,Tuple;集合方法和运算,future 对象同步处理和异步处理返回结果)

5、Spark(Spark搭建,Spark-shell 的使用,Spark-submit 提交应用, Spark的内核设计和实现,并对内核中的实现架构、运行原理进行详细的讲解;Spark生态体系中的各个组件,包括:Spark Core,Shark,Spark SQL和Spark Streaming等等)

第七阶段:项目

★ 项目

1、China-UCSP 项目 SSM(Spring+SpringMVC+MyBatis)

2、用户关系管理系统 S2SH+Maven+Nodejs+MySQL技术实战开发

3、电子商务交易平台 S2SH+Maven+Shiro+Oracle

Mybatis是什么

mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。

MyBatis可以通过xml或注解完成ORM映射关系配置。

Mybatis和JDBC的关系

JDBC是Java提供的一个 *** 作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。

MyBatis对JDBC *** 作数据库做了一系列的优化:

(1) mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。

(2) mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。

(3)mybatis 提供了一级和二级缓存,提高了程序性能。

(4) mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置)

(5) mybatis对数据库 *** 作结果进行自动映射

MyBatis的优点和缺点

优点:

简单:易于学习,易于使用,通过文档和源代du码,可以比较完全zhi的掌握它的设计思路和实现。

实用:提供了数据映射功能,提供了对底层数据访问的封装(例如adonet),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。

灵活:通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

功能完整:提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在DAO框架中封装了ADONET,NHibernate和DataMapper。

增强系统的可维护性:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

缺点:

sql工作量很大,尤其是字段多、关联表多时,更是如此。

sql依赖于数据库,导致数据库移植性差。

由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。

字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)。

DAO层过于简单,对象组装的工作量较大。

不支持级联更新、级联删除。

编写动态sql时,不方便调试,尤其逻辑复杂时。

提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。使用不当,容易导致N+1的sql性能问题。

首先, 通过翻阅源码,我们来整理一下mybatis进行持久化 *** 作时重要的几个类:

SqlSessionFactoryBuilder:build方法创建SqlSessionFactory实例。

SqlSessionFactory:创建SqlSession实例的工厂。

SqlSession:用于执行持久化 *** 作的对象,类似于jdbc中的Connection。

SqlSessionTemplate:MyBatis提供的持久层访问模板化的工具,线程安全,可通过构造参数或依赖注入SqlSessionFactory实例。

Hibernate是与MyBatis类似的orm框架,这里与Hibernate进行一下对比,Hibernate中对于connection的管理,是通过以下几个重要的类:

SessionFactory:创建Session实例的工厂,类似于MyBatis中的SqlSessionFactory。

Session:用来执行持久化 *** 作的对象,类似于jdbc中的Connection。

HibernateTemplate:Hibernate提供的持久层访问模板化的工具,线程安全,可通过构造参数或依赖注入SessionFactory实例。

在日常的开发中,我们经常需要这样对MyBatis和Spring进行集成,把sqlSessionFactory交给Spring管理,通常情况下,我们这样配置:

<code class="hljs nimrod"><bean id=<span class="hljs-string">"sqlSessionFactory" class=<span class="hljs-string">"orgmybatisspringSqlSessionFactoryBean">

<property name=<span class="hljs-string">"dataSource" <span class="hljs-keyword">ref=<span class="hljs-string">"dataSource" />

</bean></span></span></span></span></span></code>

通过上面的配置,Spring将自动创建一个SqlSessionFactory对象,其中使用到了orgmybatisspringSqlSessionFactoryBean,其 是MyBatis为Spring提供的用于创建SqlSessionFactory的类,将在Spring应用程序的上下文建议一下可共享的 MyBatis SqlSessionFactory实例,我们可以通过依赖注入将SqlSessionFactory传递给MyBatis的一些接口。

如果通过Spring进行事务的管理,我们需要增加Spring注解的事务管理机制,如下配置:

<code class="hljs nimrod"><bean id=<span class="hljs-string">"transactionManager" class=<span class="hljs-string">"orgspringframeworkjdbcdatasourceDataSourceTransactionManager">

<property name=<span class="hljs-string">"dataSource" <span class="hljs-keyword">ref=<span class="hljs-string">"dataSource" />

</bean>

<tx:annotation-driven/></span></span></span></span></span></code>

这样,我们就可以使用Spring @Transactional注解,进行事务的控制,表明所注释的方法应该在一个事务中运行。 Spring将在事务成功完成后提交事务,在事务发生错误时进行异常回滚,而且,Spring会将产生的MyBatis异常转换成适当的 DataAccessExceptions,从而提供具体的异常信息。

下面,我们通过分析SqlSessionUtils中getSession的源码,来详细的了解一下sqlSession的产生过程,源码如下:

<code class="hljs d"><span class="hljs-keyword">public <span class="hljs-keyword">static SqlSession getSqlSession(SqlSessionFactory sessionFactory, ExecutorType executorType, PersistenceExceptionTranslator exceptionTranslator) {

notNull(sessionFactory, <span class="hljs-string">"No SqlSessionFactory specified");

notNull(executorType, <span class="hljs-string">"No ExecutorType specified");

SqlSessionHolder holder = (SqlSessionHolder) getResource(sessionFactory);

<span class="hljs-keyword">if (holder != <span class="hljs-literal">null && holderisSynchronizedWithTransaction()) {

<span class="hljs-keyword">if (holdergetExecutorType() != executorType) {

<span class="hljs-keyword">throw <span class="hljs-keyword">new TransientDataAccessResourceException(<span class="hljs-string">"Cannot change the ExecutorType when there is an existing transaction");

}

holderrequested();

<span class="hljs-keyword">if (loggerisDebugEnabled()) {

logger<span class="hljs-keyword">debug(<span class="hljs-string">"Fetched SqlSession [" + holdergetSqlSession() + <span class="hljs-string">"] from current transaction");

}

<span class="hljs-keyword">return holdergetSqlSession();

}

<span class="hljs-keyword">if (loggerisDebugEnabled()) {

logger<span class="hljs-keyword">debug(<span class="hljs-string">"Creating a new SqlSession");

}

SqlSession session = sessionFactoryopenSession(executorType);

<span class="hljs-comment">// Register session holder if synchronization is active (ie a Spring TX is active)

<span class="hljs-comment">//

<span class="hljs-comment">// Note: The DataSource used by the Environment should be synchronized with the

<span class="hljs-comment">// transaction either through DataSourceTxMgr or another tx synchronization

<span class="hljs-comment">// Further assume that if an exception is thrown, whatever started the transaction will

<span class="hljs-comment">// handle closing / rolling back the Connection associated with the SqlSession

<span class="hljs-keyword">if (isSynchronizationActive()) {

Environment environment = sessionFactorygetConfiguration()getEnvironment();

<span class="hljs-keyword">if (environmentgetTransactionFactory() instanceof SpringManagedTransactionFactory) {

<span class="hljs-keyword">if (loggerisDebugEnabled()) {

logger<span class="hljs-keyword">debug(<span class="hljs-string">"Registering transaction synchronization for SqlSession [" + session + <span class="hljs-string">"]");

}

holder = <span class="hljs-keyword">new SqlSessionHolder(session, executorType, exceptionTranslator);

bindResource(sessionFactory, holder);

registerSynchronization(<span class="hljs-keyword">new SqlSessionSynchronization(holder, sessionFactory));

holdersetSynchronizedWithTransaction(<span class="hljs-literal">true);

holderrequested();

} <span class="hljs-keyword">else {

<span class="hljs-keyword">if (getResource(environmentgetDataSource()) == <span class="hljs-literal">null) {

<span class="hljs-keyword">if (loggerisDebugEnabled()) {

logger<span class="hljs-keyword">debug(<span class="hljs-string">"SqlSession [" + session + <span class="hljs-string">"] was not registered for synchronization because DataSource is not transactional");

}

} <span class="hljs-keyword">else {

<span class="hljs-keyword">throw <span class="hljs-keyword">new TransientDataAccessResourceException(

<span class="hljs-string">"SqlSessionFactory must be using a SpringManagedTransactionFactory in order to use Spring transaction synchronization");

}

}

} <span class="hljs-keyword">else {

<span class="hljs-keyword">if (loggerisDebugEnabled()) {

logger<span class="hljs-keyword">debug(<span class="hljs-string">"SqlSession [" + session + <span class="hljs-string">"] was not registered for synchronization because synchronization is not active");

}

}

<span class="hljs-keyword">return session;

}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。

需要使用的Jar包:mybatis-302jar(mybatis核心包)。mybatis-spring-100jar(与Spring结合包)。

MyBatis的前身是ibatis,但是在配置sql的语法上有明显的区别,并且spring目前的版本封装mybatis,至于mybatis-springjar文件也是mybatis团队复杂开发的jar包,用于和spring整合。之前ibatis的源码托管方是apache,而mybatis是google。

以上就是关于JAVA基础入门教程 -全部的内容,包括:JAVA基础入门教程 -、Mybatis是什么以及Mybatis和JDBC的关系、mybatis中怎么创建sqlsession等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9733544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存