使用 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);
}
}

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

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

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  2. Hibernate框架_搭建第一个Hibernate框架

    一.eclipse搭建 A.创建动态web项目 New-->Dynamic web project(web project) B.导入jar包 1.数据库驱动包 2.hibernate开发必须j ...

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

    1):struts2 的基本概念: 1-1):Struts2 是什么? 1.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2 ...

  4. 快速搭建一个直播Demo

    缘由 最近帮朋友看一个直播网站的源码,发现这份直播源码借助 阿里云 .腾讯云这些大公司提供的SDK 可以非常方便的搭建一个直播网站.下面我们来给大家讲解下如何借助 腾讯云 我们搭建一个简易的 直播示例 ...

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

    刚刚接触了SpringMVC这个框架,因此有必要把它拿过来同hibernate.Spring框架进行集成和开发一个实例,在真正企业从头开发的项目中往往一个稳定的开发环境至关重要,开发一个项目选择什么样 ...

  6. 一个Hibernate小程序

    基本步骤 在前一篇博文Hibernate环境搭建中为大家详细的介绍如何搭建一个学习新类库的学习环境.今天,为大家带来一个Hibernate小例子,让大家能够快速上手. 步骤如下: 1.配置hibern ...

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

    上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...

  8. Maven搭建struts2+spring+hibernate环境

    Maven搭建struts2+spring+hibernate环境(一) 本文简单的使用STS的自带的maven插件工具搭建ssh(struts2+spring+hibernate)开发环境,图文并茂 ...

  9. vue2.0+element+node+webpack搭建的一个简单的后台管理界面

    闲聊: 今天是六一儿童节哟,小颖祝大家节日快乐哈哈哈.其实这个demo小颖断断续续做了将近两个礼拜了,心塞的,其实这个也没有多难,主要是小颖有点最近事情有点多,所以就把这个一直拖着,今天好不容易做好了 ...

随机推荐

  1. URAL1306 Sequence Median(卡内存神题)

    给出n个数,n<=250000,求这n个数的中位数,内存限制1mb 卡内存的神题,用数组存下来刚好1mb,再加上执行时消耗内存.立即爆. 因此我们用优先队列存储一半的数. 网上的某些代码,用pr ...

  2. servlet实现文件下载所需步骤及说明

      servlet实现文件下载所需步骤及说明 CreateTime--2017年9月1日15:46:22 Author:Marydon 参考链接:http://blog.sina.com.cn/s/b ...

  3. 3、C++新的关键字

        C++ 添加了一些全新的关键字. 1.new     new 来进行动态内存的分配,而delect 则是进行内存的释放, 申请的方式: 变量申请: int *p = new int; // 申 ...

  4. SpringBoot学习之常用注解

    @SpringBootAppliaction:通常注解写在SpringBoot启动类中,主要包括三个作用: 1.@Configuration表示将该类作用springboot配置文件类. 2.@Ena ...

  5. VMware Workstation 永久许可证密钥

    VMware是功能最强大的虚拟机软件,用户可在虚拟机同时运行各种操作系统,进行开发.测试.演示和部署软件,虚拟机中复制服务器.台式机和平板环境,每个虚拟机可分配多个处理器核心.主内存和显存. VMwa ...

  6. sealed,new,virtual,abstract与override关键字的区别?

    1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或属性时,sealed修饰符必须始终与override一起使用. ...

  7. 关于erlang的-run 的启动参数

    在github上,关于erlang的一致性hash,有erlang-ryng和 hash_ring .在这里先聊下erlang-ryng这个. 在erlang-ryng的启动方式上,github上提供 ...

  8. Navicat Premium创建事件计划调用MySql存储过程

    1.检查事件计划,操作:工具——命令行界面——执行命令 show variables like '%event_scheduler%'; (分号不能丢)—— event_scheduler  ON 表 ...

  9. 【BZOJ2083】[Poi2010]Intelligence test 二分

    [BZOJ2083][Poi2010]Intelligence test Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸 ...

  10. 九度OJ 1005:Graduate Admission (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5646 解决:1632 题目描述: It is said that in 2011, there are about 100 graduat ...