分享知识-快乐自己:搭建第一个 Hibernate (Demo)

使用 Hibernate 完成持久化操作 七大 步骤:

1、读取并解析配置文件及映射文件:

  Configuration configuration=new Configuration().configure();

根据默认位置的 Hibernate 配置文件中的信息,构建 Configuration  对象。 Configuration  负责管理 Hibernate  的配置信息。

2、依据配置文件和映射文件中的信息,创建 SessionFactory 对象;

  SessionFactory sessionFactory=configuration.buildSessionFactory();

Configuration 对象会根据当前的数据库配置信息, 构造 SessionFactory 对象。SessionFactory 对象一旦构造完毕,Configuration 对象的任何变更不会影响已经创建的 SessionFactory 对象。

如果 Hibernate 配置信息有改动,那么需要基于改动后的 Configuration 对象重新构建一个 SessionFactory 对象。

3、打开 Session ;

  Session  session=sessionFactory.getCurrentSession(); 或 sessionFactory.openSession();

SessionFactory 负责创建 Session 对象。Session 是持久化操作的基础。Session 作为贯穿 Hibernate 的持久化管理的核心,提拱了众多持久化方法,如 save()、delete()、update()、get()、load()等...

通过这些方法,即可透明地完成对象的 增删改查(CRUD)

4、开始一个事务;

  Tansaction tx = session.beginTansaction();

5、数据库操作;

  session.save();//保存操作

6、结束事务;

  tx.commit();//提交事务  或 回滚事务

7、如果是通过 SessionFactory 的 openSession() 方法获取的 Session 对象,则需要关闭 session。

  session.close();

提示:如果在 Hibernate 配置文件中将参数 current_session_context_class 设置为 thread,并采用 SessionFactory 的 getCurrentSession()方法 获得 Session 对象。

   则不需要执行 session.close() 方法,通过这种方式获得的Session 对象,会在关联的事务结束(提交或回滚)时自动关闭。

更新数据的方法:

1): update() 方法,用于将游离的对象恢复为持久状态,同时进行数据库更新操作。当参数对象的 OID 为 null 时会报错异常

2):saveOrUpdate()方法,同时包含了save()与update()方法的功能,如果入参是瞬时状态的对象,就调用 save()方法;如果入参是游离状态的对象,则调用update()方法。

3):merge()方法,能够把作为参数传入的游离状态对象的属性 复制到一个拥有相同 OID 的持久状态对象中,通过对持久状态的对象的脏检查实现更新操作,并返回该持久状态对象;

    如果无法从Session 缓存或数据库中加载到相应的持久状态对象,即传入的是瞬时对象,则创建其副本执行插入操作,并返回这一新的持久状态对象。无论何种情况,传入的对象状态都不受影响。

案例目录结构:

1):环境搭建前期准备:

目前以及后期需要的 JAR:

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.3</version>
    </dependency>

    <!-- 添加Hibernate依赖 -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>3.6.10.Final</version>
    </dependency>

    <!-- 添加Log4J依赖 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-nop</artifactId>
      <version>1.6.4</version>
    </dependency>

    <!-- 添加javassist -->
    <dependency>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.12.0.GA</version>
    </dependency>

    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.0-api</artifactId>
      <version>1.0.1.Final</version>
    </dependency>

    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
      <version>1.1</version>
    </dependency>
    <!-- mysql数据库的驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

  </dependencies>

  <build>
    <!--  加载我们的各种hbm.xml文件,如果hbm.xml文件在resources文件夹下面就不需要了-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>
  </build>

配置核心配置文件:hibernate.cfg.xml  (必须以 .cfg.xml 为后缀)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
    <session-factory>
        <!--配置连接数据库的四要素-->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://39.105.105.186:3306/MyBatisCode?useUnicode=true&amp;characterEncoding=UTF-8</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <!--是否显示底层生成的sql语句-->
        <property name="hibernate.show_sql">true</property>
        <!--是否格式化sql语句-->
        <property name="hibernate.format_sql">true</property>
        <!--方言设置-->
        <!--MySql 驱动程序 eg. mysql-connector-java-5.0.4-bin.jar-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--当前会话上下文-->
        <property name="current_session_context_class">thread</property>
        <!--hbm2ddl   就是把xx.hbm.xml文件中的配置生成数据库中DDL(数据定义语言)
        create:  每次运行都会删除 上次生成的表,还会创建新的!
        update: 没有表会自动创建,有表就增加数据!
        validate: 如果hbm文件和数据库中的字段对应 就会新增,
                  否则抛出异常!
       create-drop:  每次运行都会删除 上次生成的表,前提是sessionFactory关闭
        -->
        <property name="hbm2ddl.auto">update</property>
        <!--加载需要的hbm.xml映射文件-->
        <mapping resource="mapping/user.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

编写映射文件 user.hbm.xml (必须以 .hbm.xml 为后缀)

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
package: 需要映射的实体类所在包
class节点:
name:对应的是实体类的类名,如果没有书写package,则必须是完整限定类名

table:数据库中的表名,如果表名和实体类名一致,可以省略
id节点:表中的主键
generator:主键生成策略 ,主键由谁去创建?程序猿?Hibernate?数据库
name:  必须和实体类中的属性名一致
column : 必须和数据库中的列名一致,如果列名和属性名一致,可以省略
-->
<!--dynamic-update="false":默认非动态更新-->
<hibernate-mapping package="com.mlq.bena">
    <class name="com.mlq.bena.User" table="`user`" dynamic-update="true">
        <id name="uId" column="uId">
            <!--<generator class="assigned"/>&lt;!&ndash;主键生成策略&ndash;&gt;-->
            <generator class="increment"></generator>
        </id>
        <property name="userName" column="userName"/>
        <property name="userPwd" column="userPwd"/>
        <property name="realName" column="realName"/>
    </class>
</hibernate-mapping>
<!--Oracle序列增长-->
<!--<generator class="squence">-->
<!--<param name="squence">SEQ_DEPTNO</param>-->
<!--</generator>-->
<!--数据库中查询最大值+1-->
<!--<generator class="increment"></generator>-->
<!--没有制定使用那种方式:需要结合数据库方言自增-->
<!--<generator class="native"></generator>-->
<!--uuid:生成32位字符串-->
<!--<generator class="uuid"></generator>-->

User 实体类:

package com.mlq.bena;
import java.io.Serializable;
public class User implements Serializable {
    private Integer uId;
    private String userName;
    private String userPwd;
    private String realName;
    @Override
    public String toString() {
        return "User{" +
                "uId=" + uId +
                ", userName=‘" + userName + ‘\‘‘ +
                ", userPwd=‘" + userPwd + ‘\‘‘ +
                ", realName=‘" + realName + ‘\‘‘ +
                ‘}‘;
    }
    public Integer getuId() {
        return uId;
    }
    public void setuId(Integer uId) {
        this.uId = uId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    public String getRealName() {
        return realName;
    }
    public void setRealName(String realName) {
        this.realName = realName;
    }

}

BaseDao 层:

package com.mlq.bena;
import com.mlq.uitl.SessionTool;
import org.hibernate.Session;
/**
 * 获取连接的提升封装
 * @author asus
 */
public class BaseDao {

    public Session getSession()
    {
        return SessionTool.getSession();
    }

}

mapper 层:

package com.mlq.mapper;
import com.mlq.bena.User;

import javax.jws.soap.SOAPBinding;
import java.io.Serializable;
/**
 * @author asus
 */
public interface UserMapper {

    /**
     * 添加方法
     * @param user
     */
    public void addUser(User user);

    /**
     * 根据Id查询
     * @param id
     * @return
     */
    public User getUser(Serializable id);

    /**
     * 根据Id查询
     * @param id
     * @return
     */
    public User loadUser(Serializable id);

    /**
     * 修改用户信息:非动态更新
     * 指的是在 映射文件中修改:dynamic-update="false":默认非动态更新
     * @param user
     */
    public void updateUser(User user);

    /**
     * 修改用户信息:动态更新
     * 指的是在 映射文件中修改:dynamic-update="false":默认非动态更新
     * @param user
     */
    public void mergeUser(User user);

    /**
     * 删除用户信息:需要首先调用查询方法
     * @param id
     */
    public void delUser(Serializable id);
    /**
     * 删除用户信息:根据自己定义的对象信息删除
     * @param user
     */
    public void delUser1(User user);

    /**
     * 当传递的 user 主键不生效的时便执行save方法
     * @param user
     */
    public void saveUpdate(User user);

    /**
     * 可以实现更新 也可以实现 save保存 同样根据主键是否有效
     * 当主键不生效的时候变执行的是 save保存
     * @param user
     * @return
     */
    public User testMerge(User user);

}

mapperImpl:

package com.mlq.mapper;
import com.mlq.bena.BaseDao;
import com.mlq.bena.User;
import com.mlq.uitl.SessionTool;
import org.hibernate.Session;

import java.io.Serializable;
/**
 * @author asus
 */
public class UserMapperImpl extends BaseDao implements UserMapper {
    private Session session=null;
    @Override
    public void addUser(User user) {
        session= super.getSession();
        session.save(user);
    }
    @Override
    public User getUser(Serializable id) {
        session= super.getSession();
        return (User) session.get(User.class,id);
    }
    @Override
    public User loadUser(Serializable id) {
        session= super.getSession();
        return (User) session.load(User.class,id);
    }
    @Override
    public void updateUser(User user) {
        session= super.getSession();
        session.update(user);
    }
    @Override
    public void mergeUser(User user) {
        session= super.getSession();
        session.merge(user);
    }
    @Override
    public void delUser(Serializable id) {
        session= super.getSession();
        session.delete(this.loadUser(id));
    }
    @Override
    public void delUser1(User user) {
        session= super.getSession();
        session.delete(user);
    }
    @Override
    public void saveUpdate(User user) {
        session= super.getSession();
        session.saveOrUpdate(user);
    }
    @Override
    public User testMerge(User user) {
        session= super.getSession();
        User merge = (User)session.merge(user);
        return merge;
    }
}

service 层:

package com.mlq.seivice;

import com.mlq.bena.User;

import java.io.Serializable;

/**
 * @author asus
 */
public interface UserService {
    /**
     * 添加方法
     * @param user
     */
    public void addUser(User user);

    /**
     * 根据Id查询
     * @param id
     * @return
     */
    public User getUser(Serializable id);

    /**
     * 根据Id查询
     * @param id
     * @return
     */
    public User loadUser(Serializable id);

    /**
     * 数据更新
     * @param user
     */
    public void updUser(User user);

    /**
     * 非动态更新数据,会给所有字段赋值
     * 指的是在 映射文件中修改:dynamic-update="false":默认非动态更新
     * @param user
     */
    public void updateUser(User user);

    /**
     * 修改用户信息:动态更新
     * 指的是在 映射文件中修改:dynamic-update="false":默认非动态更新
     * @param user
     */
    public void mergeUser(User user);

    /**
     * 删除用户信息:需要首先调用查询方法
     * @param id
     */
    public int delUser(Serializable id);

    /**
     * 删除用户信息:根据自己定义的对象信息删除
     * @param user
     */
    public int delUser1(User user);

    /**
     * 当传递的 user 主键不生效的时便执行save方法
     * @param user
     */
    public void saveUpdate(User user);

    /**
     * 可以实现实现 更新 也可以实现 save保存 同样根据主键是否有效
     * @param user
     * @return
     */
    public User testMerge(User user);

}

service impl:

package com.mlq.seivice.impl;

import com.mlq.bena.User;
import com.mlq.mapper.UserMapper;
import com.mlq.mapper.UserMapperImpl;
import com.mlq.seivice.UserService;
import com.mlq.uitl.SessionTool;
import com.sun.xml.internal.ws.handler.HandlerException;
import org.hibernate.Transaction;

import java.io.Serializable;

/**
 * 实现数据查询
 * @author asus
 */
public class UserServiceImpl implements UserService {

    Transaction transaction=null;
    private UserMapperImpl userMapper=null;

    @Override
    public void addUser(User user) {
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            userMapper.addUser(user);
            transaction.commit();
        }catch (HandlerException e)
        {
            e.printStackTrace();
            transaction.rollback();
        }
    }

    @Override
    public User getUser(Serializable id) {
        User user=null;
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            user = userMapper.getUser(id);
            transaction.commit();
        }catch (HandlerException e)
        {
            e.printStackTrace();
            transaction.rollback();
        }
        return user;
    }

    @Override
    public User loadUser(Serializable id) {
        User user=null;
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            user = userMapper.loadUser(id);
            System.out.println(user+"-----------");
            transaction.commit();
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            e.printStackTrace();
            transaction.rollback();
        }
        return user;
    }

    @Override
    public void updUser(User user) {
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            User info = userMapper.loadUser(user.getuId());
            info.setUserName(user.getUserName());
            info.setUserPwd(user.getUserPwd());
            info.setRealName(user.getRealName());
            transaction.commit();
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            e.printStackTrace();
            transaction.rollback();
        }
    }

    @Override
    public void updateUser(User user) {
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            userMapper.updateUser(user);
            transaction.commit();
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            e.printStackTrace();
            transaction.rollback();
        }
    }

    @Override
    public void mergeUser(User user) {
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            userMapper.mergeUser(user);
            transaction.commit();
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            e.printStackTrace();
            transaction.rollback();
        }
    }

    @Override
    public int delUser(Serializable id) {
        int count=0;
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            userMapper.delUser(id);
            transaction.commit();
            count= 1;
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            count=0;
            e.printStackTrace();
            transaction.rollback();
        }
        return count;
    }

    @Override
    public int delUser1(User user) {
        int count=0;
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            userMapper.delUser1(user);
            transaction.commit();
            count= 1;
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            count=0;
            e.printStackTrace();
            transaction.rollback();
        }
        return count;
    }

    @Override
    public void saveUpdate(User user) {
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            userMapper.saveUpdate(user);
            transaction.commit();
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            e.printStackTrace();
            transaction.rollback();
        }
    }

    @Override
    public User testMerge(User user) {
        User user1=null;
        try{
            userMapper=new UserMapperImpl();
            transaction=userMapper.getSession().beginTransaction();
            user1 = userMapper.testMerge(user);
            transaction.commit();
        }catch (Exception e)
        {
            System.out.println("相爱相杀一场!!!");
            e.printStackTrace();
            transaction.rollback();
        }
        return user1;
    }
}

uitl 获取连接工具类:

package com.mlq.uitl;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
 * 读取配置信息
 */
public class SessionTool {
    private static SessionFactory sessionFactory=null;
    private static Configuration configuration=null;
    static
    {
        System.out.println("静态代码块------");
        configuration=new Configuration().configure();
        sessionFactory=configuration.buildSessionFactory();
    }
    public static Session getSession()
    {
        return sessionFactory.getCurrentSession();
    }

}

测试类:

package com.mlq;
import com.mlq.bena.User;
import com.mlq.seivice.impl.UserServiceImpl;
import org.junit.Test;
/**
 * 提取工具类的测试
 */
public class HibernateDemo {

    /**
     * get()查询
     */
    @Test
    public void getUser() {
        User user = new UserServiceImpl().getUser(42183);
        System.out.println(user);
    }
    /**
     * load()查询
     */
    @Test
    public void loadUser() {
       new UserServiceImpl().loadUser(42);
    }

    /**
     * 更新操作
     */
    @Test
    public void updUser()
    {
        User user=new User();
        user.setuId(42183);
        user.setUserName("aaa");
        user.setUserPwd("bbb");
        user.setRealName("vvv");
        new UserServiceImpl().updUser(user);
    }
    //------------------动态与非动态注意查看 控制台打印的 SQL-------------------------------//
    /**
     * 更新操作:非动态更新
     */
    @Test
    public void updatedUser()
    {
        User user=new User();
        user.setuId(42183);
        user.setUserName("aaa");
        user.setUserPwd("bcb");
        user.setRealName("vbv");
        new UserServiceImpl().updateUser(user);
    }
    /**
     * 更新操作2:动态更新
     */
    @Test
    public void mergeUser()
    {
        User user=new User();
        user.setuId(42184);
        user.setUserName("aaa");
        user.setUserPwd("bcb");
        user.setRealName("vbbbv");
        new UserServiceImpl().mergeUser(user);
    }
    /**
     * 删除用户信息:需要根据查询来获取用户对象 然后删除
     */
    @Test
    public void deleteUser()
    {
        int i = new UserServiceImpl().delUser(43420);
        System.out.println((i>0)?"删除成功":"删除失败");
    }
    /**
     * 删除用户信息:根据自己定义的对象删除
     */
    @Test
    public void deleteUser1()
    {
        User user=new User();
        user.setuId(43417);
        int i = new UserServiceImpl().delUser1(user);
        System.out.println((i>0)?"删除成功":"删除失败");
    }
    //当传递的 user 主键不生效的时便执行save方法
    @Test
    public void saveUpdate()
    {
        User user=new User();
        user.setuId(42183);
        user.setUserName("修改了");
        new UserServiceImpl().saveUpdate(user);//执行了Update方法更新
    }
    //当传递的 user 主键不生效的时便执行save方法
    @Test
    public void saveUpdate1()
    {
        User user=new User();
        user.setUserName("修改了");
        new UserServiceImpl().saveUpdate(user);//执行了save方法更新
    }

    //当传递的 user 主键不生效的时便执行save方法,否则施行更新
    @Test
    public void textMerge()
    {
        User user=new User();
        user.setUserName("Merge正在执行保存!!!");
        User user1 = new UserServiceImpl().testMerge(user);//执行了save方法更新
        System.out.println(user1);
    }
    @Test
    public void textMerge1()
    {
        User user=new User();
        user.setuId(42183);
        user.setUserName("原来的模样");
        User user1 = new UserServiceImpl().testMerge(user);//执行了更新方法更新
        System.out.println(user1);
    }
}

原文地址:https://www.cnblogs.com/mlq2017/p/9675271.html

时间: 2024-10-10 05:51:58

分享知识-快乐自己:搭建第一个 Hibernate (Demo)的相关文章

ArcGIS API for JavaScript开发环境搭建及第一个实例demo

原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3.9,它提供了更为丰富而又强大的功能.     一.安装前准备 1.ArcGIS Server for JavaScript API各版本下载地址:http://support.esrichina-bj.cn/2011/0223/960.html,我们选择下载最新的"ArcGIS API for Ja

分享知识-快乐自己:初始 Struts2 (基本概念)及 搭建第一个Demo

1):struts2 的基本概念: 1-1):Struts2 是什么? 1.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 2.Struts 2是Struts的下一代产品,是在 struts 1 和 WebWork 的技术基础上进行了合并的全新的Struts 2框架. 3.其全新的 Struts 2 的体系结构与 Struts 1 的体系结构差别巨大.Str

第一个Hibernate程序

一 新建一个Java工程(Hibernate) 在src目录下创建一个名为"hibernate.cfg.xml"的文件并配置好各个属性,如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" &qu

工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

上文中我们介绍<工作笔记2.软件开发常用工具> 从今天开始本文将教大家如何进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个独立配置:struts2. Hibernate. Spring 2)2个整合:整合Sring和struts2. 整合Spring和Hibernate 3)资源分类 开发包.软件.框架源码,已经共享到百度网盘:http://pan.baidu.com/s/1o6FkbA6 一.3个独立配置 1.Struts2: 1

一个Hibernate小程序

基本步骤 在前一篇博文Hibernate环境搭建中为大家详细的介绍如何搭建一个学习新类库的学习环境.今天,为大家带来一个Hibernate小例子,让大家能够快速上手. 步骤如下: 1.配置hibernate.cfg.xml 2.编写映射文件User.hbm.xml 3.编写一个持久化类User.java 4.编写辅助类HibernateUtil.java 5.加载并存储对象UserManager.java 配置Hibernate.cfg.xml a.在新建的XHibernate项目的src目录下

Maven搭建Spring+Struts2+Hibernate项目详解

前言 这篇主要采用Maven搭建Spring+Struts2+Hibernate的整合项目,复习一下SSH框架,虽然spring提供自己的MVC框架,但是Spring也提供和其他框架的无缝整合,采用组件形式对个框架进行管理,项目实例是按照真实企业里面的开发搭建,也是web的最后一片了.数据库使用mysql,连接池使用的是Druid数据源(这些都无关紧要,可以随时的替换),下面就将详细的介绍一下Maven搭建Spring,Struts2,和hibernation的步奏. 1.数据库设计 数据库库表

SpringMVC+Spring3+hibernate4 开发环境搭建以及一个开发实例教程

刚刚接触了SpringMVC这个框架,因此有必要把它拿过来同hibernate.Spring框架进行集成和开发一个实例,在真正企业从头开发的项目中往往一个稳定的开发环境至关重要,开发一个项目选择什么样的搭建平台也需要有经验才可以,并不是说你会搭建一个开发平台然后公司就会用你搭建的开发平台,一个项目或者一个公司看中的也不是你可以搭出框架,而是在这个框架使用过程中出现的各种问题你可以解决掉. 也就是说呢,无论开发什么项目要做到稳定.环境稳定.开发成本稳定.技术稳定.换句话说就是"风险可控"

Maven搭建struts2+spring+hibernate环境

Maven搭建struts2+spring+hibernate环境(一) 本文简单的使用STS的自带的maven插件工具搭建ssh(struts2+spring+hibernate)开发环境,图文并茂,简单上手,适合新手. 关于STS的介绍,请参考另一篇文章<Java IDE介绍:Spring开发利器-spring-tool-suite>地址:http://blog.csdn.net/sgl731524380/article/details/8831540 首先,STS自带的maven的插件已

[Java] 第一个Spring Demo

1  Spring关键字: DI:Dependency Injection,依赖注入.依赖指的是调用关系.A调用B则A依赖于B.注入指的是A不再new B对象,而是由Spring容器来注入B对象. IoC:控制反转,对象不再由调用者来new,而是把new对象的任务交给Spring容器,Spring从XML中读取对象的属性值. AOP:面向切面变成(区别于面向对象编程OOP).so,切面是什么?一些公共行为? DAI:Spring整合了针对多种数据库的访问方式(含JDBC.OXM等) 框架融合:可