问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何学好JAVA的 spring和hibernate,具体点说,别拷贝一大堆没用的

发布网友 发布时间:2022-04-10 00:16

我来回答

8个回答

热心网友 时间:2022-04-10 01:46

spring很简单的,就是依赖注入也叫做控制反转(IOC) inverse of control!
他的依赖注入主要是解决耦合的问题,他的AOP主要是用于事务的动态植入这点有点类似EJB,不过EJB是重量级的,spring是轻量级的!
spring还包括了DAO模式的实现,包括对一些框架的集成!
还有一些Template和CallBack的简化!
也就这点东西,不是很难,如果学会有一周足够了,想深入的了解,你就要去看看CgLib和java本身的动态代理类,看看具体是如何做AOP的,在学习一些设计模式例如DAO或者Template模式,CallBack模式,自然就明白spring的理论和实现了!

hibernate学好还不简单,当你认为这个问题你能学好时,你就已经学好了一半了,当然需要些根据的,比如一个好的视频教程。
看十天书不如看一天视频呀。 刻骨铭心的理解。当然看了教程之后你也要看看书的,毕竟理论的掌握好。

学习它们两个个一个共同之处是配置文件初学时尽量自己多写写!

我是一名JAVA程序员,不会的可以请教我~~~呵呵

希望我的回答能够帮到您!~~~

热心网友 时间:2022-04-10 03:04

1 学会用
2 问问为什么

热心网友 时间:2022-04-10 04:38

spring 需要了解的主要是对于XML文件解析的定义和规则,java已经提供了解析XML文件的基本框架。目标是:【作为对象之间的关系管理的容器】。

hibernate 关键在于了解对象关系映射,这里的关系当然是关系数据库了,java提供了JDBC规范来提供数据库的基本操作,再有一套JPA来专门用于持久化的操作。目标是:【建立对象关系(关系数据库)映射+包装持久化操作】

现在,java框架的学习、教学都很流行了,但是很多情况下,都是从主流框架的实体本身起,这些框架带有的特定形式,使得在形式上的学习花费了太多的学习时间,而往往到了框架工具应用的本质时反而容易被忽略。
学习框架前,最好踏踏实实地先只用servlet+手工实体类,多多练习几个项目,应该就能体会到在这些工作中,很多时候的工作是重复的、繁琐的,我们完全可以把这些工作作一次性总结,每当遇到相似的工作就交给程序来完成,这就是框架的形成。

本着这样的学习方式,我只用了两个月,也自己写了一个简单框架,是集合了MVC+ORM+DI的框架,我也觉得,学习框架最好能够自己试着写一下。

最主要的是要把握好每种框架的主要目标,很多繁琐的工具,并不是一定都要记住的,用的多了就OK了。

热心网友 时间:2022-04-10 06:30

我现在也在学呢,我喜欢看视频教程。从网上下一些教程吧。

热心网友 时间:2022-04-10 08:38

以我的一点点经验来给你说吧,看你给分也挺多的。
我是做JavaEE方面开发的,学过ssh框架。对于Java学习我给这么点建议:
1、学校程序基础最重要,没有打好基础就去追求学习很广的技术,我个人觉得是不可的,前段面试,发现人家公司对于基础是相当看重的,因为基础代表了你的潜力。这个基础不但包括Java方面的基础,还包括一些诸如数据库、数据结构、网络等方面哈。学习Java基础,我觉得可以多看几遍Think in Java。
2、在学好基础的前提下,可以做些项目或者看些优秀代码来提高自己的编码水平,这是很有效的,特别是静下心来看代码。然后模仿人家的代码写程序,这样下来能提高不少哈。
3、对于框架的一点建议,其实框架要会用是很容易的,看点视频就行了,但这样是不够的,培训机构大把大把的人会用这些流行框架。要做到理解框架的底层实现原理才行,淘宝阿里的面试就看重你有没有看过ssh框架这些源码,你懂不懂他的底层实现,其实这些框架都是优秀代码,可以多话时间看看人家的实现,当然这是要有很好的Java基础才行的。

好了 就这么多了,希望对你有所帮助。

热心网友 时间:2022-04-10 11:02

我为这个问题专门写了一个测试用例:

看下面的几个文件:
可能贴的顺序上有点问题,楼主可以自己整理一下:

(1) applicationContext.xml

---------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "">

<beans>
<!-- 引入参数配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>jdbc.properties</value>
</list>
</property>
</bean>

<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass"><value>$</value></property>
<property name="jdbcUrl"><value>$</value></property>
<property name="user"><value>$</value></property>
<property name="password"><value>$</value></property>
<property name="initialPoolSize"><value>$</value></property>
<property name="minPoolSize"><value>$</value></property>
<property name="maxPoolSize"><value>$</value></property>
</bean>

<!-- spring Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.jdbc.fetch_size">80</prop>
<prop key="hibernate.jdbc.batch_size">35</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/spring/demo/bean/mapping/Book.hbm.xml</value>
</list>
</property>
</bean>

<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<!-- 事务代理*的配置 -->
<bean id="baseTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean id="hibernate_BookDao" class="com.spring.demo..Hibernate_BookDao" >
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<bean id="hibernate_BookManager" parent="baseTransactionProxy">
<property name="target">
<bean class="com.spring.demo.manager.Hibernate_BookManager">
<property name="">
<ref bean="hibernate_BookDao"/>
</property>
</bean>
</property>
</bean>

</beans>

---------------------

(2) jdbc.properties
## 这个事连接mysql数据库的具体参数配置,
## 楼主要根据自己的数据来配置,不可直接使用
---------------------

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/springdemo?useUnicode=true&characterEncoding=utf-8

jdbc.user=root
jdbc.password=root
jdbc.initialPoolSize=1
jdbc.minPoolSize=1
jdbc.maxPoolSize=10

---------------------

说明:applicationContext.xml 应用了jdbc.properties文件

,我自己测试,没有问题,而且是spring配置式事务的。

需要JAR包

spring.jar
c3p0.jar
mysql.jar
cglib.jar
asm.jar
antlr.jar
hibernate3.jar
jta.jar
dom4j.jar
commons-collections.jar
commons-logging.jar

-----------

Hibernate_BookDao.java

--------------

package com.spring.demo.;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.spring.demo.bean.Book;

/**
*
* @author wangyudong
*
*/
public class Hibernate_BookDao extends HibernateDaoSupport {

/**
* 添加一本书
* @param book
*/
public void insertBook(Book book){
this.getHibernateTemplate().save(book);
}

/**
* 修改一本书
* @param book
*/
public void updateBook(Book book){
this.getHibernateTemplate().update(book);
}

/**
* 根据ID来删除一本书
* @param id
*/
public void deleteBook(Integer id){
Book book = new Book();
book.setId(id);
this.getHibernateTemplate().delete(book);
}

/**
* 根据ID来查询书对象
* @param id
* @return
*/
public Book selectBookById(Integer id){
String hql = "from Book b where b.id=?";
Object[] params = new Object[];
List list = this.getHibernateTemplate().find(hql, params );

if(list!=null && list.size()>0){
return (Book)list.get(0);
}
return null ;
}

/**
* 根据书名来查询相关*录列表
* @param name
* @return
*/
public List selectBookByName(String name){

String hql = "from Book b where b.name like ?";
Object[] params = new Object[];
return this.getHibernateTemplate().find(hql, params);
}

}

--------------

(2) Hibernate_BookManager.java

---------------

package com.spring.demo.manager;

import java.util.List;

import com.spring.demo.bean.Book;
import com.spring.demo..Hibernate_BookDao;

public class Hibernate_BookManager {

private Hibernate_BookDao ;

/**
* 批量添加书本,如果列表长度超过3,就抛出异常
* @param books
*/
public void insertBooks(List books){

for(int i=0 ; i<books.size() ;i++){
if(i>2){
throw new RuntimeException("中断事务异常,当列表长度大于3的时候故意抛出,看看事务是否回滚");
}
Book book = (Book)books.get(i);
.insertBook(book);
}
}

/**
* 添加一本书
* @param book
*/
public void insertBook(Book book){
this..insertBook(book);
}

/**
* 修改一本书
* @param book
*/
public void updateBook(Book book){
this..updateBook(book);
}

/**
* 根据ID来删除一本书
* @param id
*/
public void deleteBook(Integer id){
this..deleteBook(id);
}

/**
* 根据ID来查询书对象
* @param id
* @return
*/
public Book selectBookById(Integer id){
return this..selectBookById(id);
}

/**
* 根据书名来查询相关*录列表
* @param name
* @return
*/
public List selectBookByName(String name){
return this..selectBookByName(name);
}

// getter and setter //
public Hibernate_BookDao getDao() {
return ;
}

public void setDao(Hibernate_BookDao ) {
this. = ;
}
}

---------------

(3)Book.java

--------------
package com.spring.demo.bean;

import java.io.Serializable;

/*

DROP TABLE IF EXISTS book ;

CREATE TABLE book(
id int(11) NOT NULL auto_increment COMMENT 'primary key',
name varchar(60) default NULL COMMENT 'book name',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='my book table';

*/

public class Book implements Serializable {

public Book(){}

public Book(String name){
this.name = name;
}

/**
* ID
*/
private Integer id ;

/**
* 书名
*/
private String name ;

// getter and setter
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}
--------------

(4)Book.hbm.xml
---------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"">

<hibernate-mapping>
<class name="com.spring.demo.bean.Book" table="BOOK" >
<id name="id" type="integer" length="11">
<column name="id" />
<generator class="identity" />
</id>

<property name="name" column="NAME" type="string" length="60" ></property>

</class>
</hibernate-mapping>
---------------

#mysql的造表语句,指定了数据库springdemo#
---------------------
MYSQL 的BOOK 表创建语句

CREATE DATABASE IF NOT EXISTS springdemo;

USE springdemo;

DROP TABLE IF EXISTS book ;

CREATE TABLE book(
id int(11) NOT NULL auto_increment COMMENT 'primary key',
name varchar(60) default NULL COMMENT 'book name',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='my book table';

---------------------

下面是我的测试方法:
===========

package com.spring.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.demo.bean.Book;
import com.spring.demo.manager.Hibernate_BookManager;

public class HibernateDemo {

/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml") ;

Hibernate_BookManager manager = (Hibernate_BookManager)context.getBean("hibernate_BookManager");

List books = new ArrayList();

books.add(new Book("book_01"));
books.add(new Book("book_02"));
books.add(new Book("book_03"));
books.add(new Book("book_04"));

manager.insertBooks(books);

System.out.println("OK");

}

}

确信是调通的,
==================

看在我专门为回答这个问题写了这个测试用例,
给个高分?

热心网友 时间:2022-04-10 13:44

spring和hibernate?个人觉得hibernate没什么用,尤其是处理复杂业务的时候。hql语句写起来太费劲了,如果楼主坚持要学hibernate,为什么不ssh?本人工作2年了,没见到有公司只用sh的。
至于如何学好,这个就需要自己努力了。如果有实习的机会那是再好不过,因为只有在企业里学习,才能够快速提高自己的水平。最主要还是靠自己的学习能力。
spring和hibernate的资料在网上多的是,在企业里,你需要了解项目的业务需求,设计出相关文档,包括数据库表结构、页面风格、功能说明。然后开始开发。在开发中遇到的技术问题及时上网找资料,这部分因为属于技术问题,应该没什么问题,网上肯定能找到答案。最主要就是逻辑分析能力,排错的能力。有一句话说的好:条条大路通罗马。不过在这里你就不能这样了。你需要用最干净利落的代码来实现你的功能,否则服务器吃不消的。写代码应该本着“以最小的服务器开销”、“容易被别人读懂”的方式去写。因为后期维护的时候是一个人或者两个人来维护。最后一个就是读代码的能力。需要做到能读懂大部分人写的代码,无论代码是否规范,如果你能读懂,对你来说是一种能力的提升。
你说你有java基础,不知道基础如何,如果不错,可以看看spring的源码,看看里面是如何进行处理请求、页面转发等等,当然,也可以将源码拷贝到工程中,设断点来看。祝你好运!

热心网友 时间:2022-04-10 16:42

楼上的GG们,你们不要误导人家. 还ssh...h就是指hibernate. 而且现在我去过的公司很少用ssh了. 大部分是ssh2.
和我一样.
刚开始学了2遍都没啥感觉.
1.去了解他们2个是做什么用的.
使用它的好处
这个你去搜搜或者书本上都有.况且他们不属于同一个概念.区分起来不会有问题. 你有过基础.
2.去用集成做一些简单的东西. 主要是能集成不出错,我想你会清晰很多. 如果没做过. 那去找一些简单的例子还是没问题的吧. 书上或网上多的是.
这都是些比较基础的东西. 而且你学过. 相信你只要做一次就应该能明白了.
(我想这样回答你比去解释那些代码好的多.)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在爱水APP哪个模块中可以填写个人信息,查询自己一天的饮水量? 黄金为什么是避险产品 避险买什么 避险品种是什么 避险产品什么意思 什么是避险产品 ...对联和我们平时使用的印章,说说使用了哪几个字体 对联上写的是什么字 ...有一空是让我评价我自己,请各位哥哥姐姐帮帮忙,帮我编一段,往好了... 艾灸用品哪种好 现在最新cpi数据是多少? 海尔热水器 什么型号比较好 省电 外观漂亮呢。 侧划打火机怎么换打火石 夏天热水器怎么样使用省电? 这样的打火机怎么换打火石 正品卡地亚打火机如何换打火石 请问生活达人,和家电类高手~海尔60升1500W热水器,怎么使用最省电? 现在最新的GDP和CPI数据是多少? 相对历史来说现在是处于CPI和GDP是处于高位还是低 zippo打火石断了,怎么给zippo打火机换火石 请问这种打火机怎样换打火石 我国现在的通货膨胀率是多少 这种打火机怎么换打火石 求高手帮忙,都彭PARIS型号的打火机,打火石怎么换,谢谢谢谢。。求大虾们帮忙。 美国和中国的时差? 齿轮打火机如何更换打火石 一个男人气量小的表现 打火机的火石怎么换啊 现在CPI是多少 金税三期纳税人基本信息怎么修改 金税三期个人所得税中要怎么修改基本信息 金税三期个税申报员工调出如何更改人员信息 ps4手柄可以用在steam上吗 什么面相的男人比较小气 金税三期个税申报员工离职如何更改人员信息 金税三期个人所得税扣缴系统生育险和工伤险怎么办 怎么用PS4手柄在电脑steam上玩黑魂2,求准确答案 金税三期税收管理系统操作手册 怎么导出word 小气的男人都有哪些特征? 金税三期个人所得税扣缴系统基础信息怎么填 steam 可以接ps4手柄玩么 吝啬男人的典型特征是什么? 金税三期怎样修改报税密码 小气吝啬的面相怎么看 我已经注销了,而且注销成功了很久了,提醒我怎么申报之类的信息,我怎么还收到国税局发的短信? 尖酸刻薄的男人啥表现 哪种面相的男人最吝啬 金税三期在哪里修改财务负责人 抠门的面相特点,小气的面相怎么看 男人小气都有哪些表现? 小气的男人有哪些表现