spring+hibernate
来源:互联网 发布:日本搞笑电影知乎 编辑:程序博客网 时间:2024/05/16 14:25
加载的jar有:
log4j-1.2.16.jar
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.14-bin.jar
org.springfaramework.asm-3.0.5.release.jar
org.springfaramework.beans-3.0.5.release.jar
org.springfaramework.context-3.0.5.release.jar
org.springfaramework.core-3.0.5.release.jar
org.springfaramework.expression-3.0.5.release.jar
commons-logging-1.1.1.jar
commons-collections-3.1.jar
antlr-2.7.6.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
slf4j-api-1.5.8.jar
slf4j-nop-1.5.8.jar
文件结构图如下:
代码演示:
MainOrder.java
package org.baicai.spring.entity;
import java.io.Serializable;
public class MainOrder implements Serializable {
private static final long serialVersionUID = 6934677354492244854L;
private java.lang.Integer orderId;
private java.lang.String customer;
private java.lang.String description;
public MainOrder() {
}
public MainOrder(java.lang.Integer orderId,java.lang.String customer,java.lang.String description) {
this.orderId = orderId;
this.customer = customer;
this.description = description;
}
public void setOrderId (java.lang.Integer orderId)
{
this.orderId = orderId;
}
public java.lang.Integer getOrderId()
{
return orderId;
}
public void setCustomer (java.lang.String customer)
{
this.customer = customer;
}
public java.lang.String getCustomer()
{
return customer;
}
public void setDescription (java.lang.String description)
{
this.description = description;
}
public java.lang.String getDescription()
{
return description;
}
@Override
public String toString()
{
return String.format("orderId:%s,customer:%s,description:%s",orderId,customer,description);
}
}
SubOrder.java
package org.baicai.spring.entity;
import java.io.Serializable;
public class SubOrder implements Serializable {
private static final long serialVersionUID = 2608058366049676469L;
private java.lang.Integer subId;
private java.lang.Integer orderId;
private java.lang.String goods;
private java.lang.String description;
public SubOrder()
{
}
public SubOrder(java.lang.Integer subId,java.lang.Integer orderId,java.lang.String goods,java.lang.String description)
{
this.subId = subId;
this.orderId = orderId;
this.goods = goods;
this.description = description;
}
public void setSubId (java.lang.Integer subId)
{
this.subId = subId;
}
public java.lang.Integer getSubId()
{
return subId;
}
public void setOrderId (java.lang.Integer orderId)
{
this.orderId = orderId;
}
public java.lang.Integer getOrderId()
{
return orderId;
}
public void setGoods (java.lang.String goods)
{
this.goods = goods;
}
public java.lang.String getGoods()
{
return goods;
}
public void setDescription (java.lang.String description)
{
this.description = description;
}
public java.lang.String getDescription()
{
return description;
}
@Override
public String toString()
{
return String.format("subId:%s,orderId:%s,goods:%s,description:%s",subId,orderId,goods,description);
}
}
Mainorder.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.baicai.spring.entity">
<class name="MainOrder" table="mainorder">
<id name="orderId" type="java.lang.Integer">
<column name="orderId" sql-type="INT" not-null="true" precision="11" scale="0">
</column>
<generator class="native"></generator>
</id>
<property name="customer" type="java.lang.String">
<column name="customer" sql-type="VARCHAR(50)" not-null="false" length="50">
</column>
</property>
<property name="description" type="java.lang.String">
<column name="description" sql-type="VARCHAR(500)" not-null="false" length="500">
</column>
</property>
</class>
</hibernate-mapping>
Suborder.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.baicai.spring.entity">
<class name="SubOrder" table="suborder">
<id name="subId" type="java.lang.Integer">
<column name="subId" sql-type="INT" not-null="true" precision="11" scale="0">
</column>
<generator class="native"></generator>
</id>
<property name="orderId" type="java.lang.Integer">
<column name="orderId" sql-type="INT" not-null="true" precision="11"scale="0">
</column>
</property>
<property name="goods" type="java.lang.String">
<column name="goods" sql-type="VARCHAR(50)" not-null="false" length="50">
</column>
</property>
<property name="description" type="java.lang.String">
<column name="description" sql-type="VARCHAR(500)" not-null="false"length="500">
</column>
</property>
</class>
</hibernate-mapping>
HibernateUtil.java
package org.huhuiyu.spring.util;
import org.apache.log4j.Logger;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static HibernateUtil util = new HibernateUtil();
private static Logger logger = Logger.getLogger(HibernateUtil.class);
private HibernateUtil()
{
Configuration conf = new Configuration().configure();
sessionFactory = conf.buildSessionFactory();
}
public static HibernateUtil getUtil()
{
return util;
}
public Session getSession()
{
return sessionFactory.getCurrentSession();
}
public static void main(String[] args)
{
Session session = HibernateUtil.getUtil().getSession();
logger.debug(session);
session.close();
}
}
BasicDao.java
package org.baicai.spring.util;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
public class BasicDao {
private HibernateUtil hibernateUtil;
public BasicDao()
{
}
public HibernateUtil getHibernateUtil()
{
return hibernateUtil;
}
public void setHibernateUtil(HibernateUtil hibernateUtil)
{
this.hibernateUtil = hibernateUtil;
}
private Session getSession()
{
Session session=hibernateUtil.getSession();
return session;
}
/**
* 添加一笔记录
* @param t
* 记录Bean
* @throws Exception
*/
protected <T> void saveEntity(T t) throws Exception
{
getSession().save(t);
}
/**
* 修改一笔记录
* @param t
* 记录Bean
* @throws Exception
*/
protected <T> void updateEntity(T t) throws Exception
{
getSession().update(t);
}
/**
* 删除一笔记录
* @param t
* @throws Exception
*/
protected<T> void deleteEntity(T t) throws Exception
{
getSession().delete(t);
}
/**
* 查询同一对象的总记录
* @param c
* 对象类型
* @return
* 总记录
* @throws Exception
*/
protected <T> int queryEntityCount(Class<T> c) throws Exception
{
Criteria criteria= getSession().createCriteria(c).setProjection(Projections.rowCount());
long count=(Long) criteria.uniqueResult();
return (int) count;
}
/**
* 查询同的对象的所有记录
* @param c
* 对象类型
* @return
* 保存所有记录的集合
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> List<T> queryAllEntity(Class<T> c)throws Exception
{
List<T> list =getSession().createCriteria(c).list();
return list;
}
/**
* 根据主键查询到唯一一笔记录
* @param key
* 主键
* @param c
* 对象类型
* @return
* 查询结果
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> T queryEntityByKey(Serializable key,Class<T> c)throws Exception
{
return (T) getSession().get(c, key);
}
/**
* 查询同一对象的start到end编号的记录 分页查询
* @param c
* 对象类型
* @param start
* 开始范围
* @param end
* 结束范围
* @return
* 查询结果
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> List<T> queryEntityByPage(Class<T>c, int start,int end)throws Exception
{
Criteria criteria=getSession().createCriteria(c);
criteria.setFirstResult(start);
criteria.setMaxResults(end);
List<T> list = criteria.list();
return list;
}
/**
* 根据类中的hql查询同一类型并符合条件筛选的记录总和
* @param hql
* 类中的hql语句
* @param params
* 条件筛选值
* @return
* 查询结果
* @throws Exception
*/
protected <T> int queryHqlCount(String hql,Object...params)throws Exception
{
Query query=getSession().createQuery(hql);
processParams(query,params);
long count=(Long) query.uniqueResult();
return (int) count;
}
/**
* 根据类中的hql查询同一类型并符合条件筛选的所有记录
* @param hql
* 类中的hql语句
* @param params
* 条件筛选值
* @return
* 查询结果
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> List<T> queryHqlEntitylist(String hql,Object...params)throws Exception
{
Query query= getSession().createQuery(hql);
processParams(query, params);
return query.list();
}
/**
* 根据类中的hql查询同一类型并符合条件筛选的唯一一笔记录
* @param hql
* 类中的hql语句
* @param params
* 筛选条件值
* @return
* 查询 结果
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> T queryHqlEntity(String hql,Object...params)throws Exception
{
Query query=getSession().createQuery(hql);
processParams(query, params);
return (T) query.uniqueResult();
}
/**
* 根据类中的hql查询同一类型并符合条件筛选的start到end编号的记录 分页查询
* @param hql
* 类中的hql语句
* @param start
* 开始值
* @param end
* 结束值
* @param params
* 筛选条件值
* @return
* 查询 结果
* @throws Exception
*/
@SuppressWarnings("rawtypes")
protected List queryHqlListByPage(String hql,int start,int end,Object... params)throws Exception
{
Query query=getSession().createQuery(hql);
processParams(query, params);
query.setFirstResult(start);
query.setMaxResults(end);
return query.list();
}
/**
* 根据配置文件(xml)中的hql查询同一类型并符合条件筛选的记录总和
* @param hqlName
* 配置文件的hql名称
* @param params
* 条件筛选值
* @return
* 查询结果
* @throws Exception
*/
protected <T> int queryNameHqlCount(String hqlName,Object...params)throws Exception
{
Query query= getSession().getNamedQuery(hqlName);
processParams(query,params);
long count=(Long) query.uniqueResult();
return (int) count;
}
/**
* 根据配置文件(xml)中的hql查询同一类型并符合条件筛选的statrt到end编号的记录 分页查询
* @param hqlName
* 配置文件的hql名称
* @param start
* 开始编号
* @param end
* 结束编号
* @param params
* 条件筛选值
* @return
* 查询结果
* @throws Exception
*/
@SuppressWarnings("rawtypes")
protected List queryNameHqlListByPage(String hqlName,int start,int end, Object...params)throws Exception
{
Query query=getSession().getNamedQuery(hqlName);
processParams(query, params);
query.setFirstResult(start);
query.setMaxResults(end);
return query.list();
}
/**
* 根据配置文件(xml)中的hql查询同一类型并符合条件筛选的所有记录
* @param hqlName
* 配置文件的hql名称
* @param params
* 条件筛选
* @return
* 查询结果
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> List<T> queryNameHqlEntityList(String hqlName,Object...params)throws Exception
{
Query query= getSession().getNamedQuery(hqlName);
processParams(query, params);
return query.list();
}
/**
* 根据配置文件(xml)中的hql查询同一类型并符合条件筛选的唯一一笔记录
* @param hqlName
* 配置文件的hql名称
* @param params
* 条件筛选
* @return
* 查询结果
* @throws Exception
*/
@SuppressWarnings("unchecked")
protected <T> T queryNamedHqlEntity(String hqlName,Object...params)throws Exception
{
Query query= getSession().getNamedQuery(hqlName);
processParams(query, params);
return (T) query.uniqueResult();
}
/**
* 根据类部hql修改或删除符合条件筛选的记录
* @param hql
* 类部hql
* @param params
* 参数值
* @return
* 修改或删除后的结果
* @throws Exception
*/
protected int excuteHql(String hql,Object...params)throws Exception
{
Query query= getSession().createQuery(hql);
processParams(query, params);
int result= query.executeUpdate();
return result;
}
/**
* 根据配置(xml)hql修改或删除符合条件筛选的记录
* @param hqlName
* 配置文件的hql名称
* @param params
* 参数值
* @return
* 修改或删除后的结果
* @throws Exception
*/
protected int executeNameHql(String hqlName,Object...params)throws Exception
{
Query query= getSession().getNamedQuery(hqlName);
processParams(query, params);
int result=query.executeUpdate();
return result;
}
protected void processParams(Query query, Object...params) {
if(params!=null)
{
for (int i = 0; i < params.length; i++)
{
query.setParameter(i, params[i]);
}
}
}
}
MainOrderDao.java
package org.baicai.spring.dao;
import java.util.List;
import org.baicai.spring.entity.MainOrder;
public interface MainOrderDao {
public void saveMainorder(MainOrder mainorder) throws Exception;
public void updateMainorder(MainOrder mainorder) throws Exception;
public void deleteMainorder(MainOrder mainorder) throws Exception;
public MainOrder queryMainorderByKey(MainOrder mainorder) throws Exception;
public List<MainOrder> queryAllMainorder() throws Exception;
}
SubOrderDao.java
package org.baicai.spring.dao;
import java.util.List;
import org.baicai.spring.entity.SubOrder;
public interface SubOrderDao {
public void saveSubOrder(SubOrder subOrder) throws Exception;
public void updateSubOrder(SubOrder subOrder) throws Exception;
public void deleteSubOrder(SubOrder subOrder) throws Exception;
public SubOrder querySubOrderByKey(SubOrder subOrder) throws Exception;
public List<SubOrder> queryAllSubOrder() throws Exception;
}
MainOrderDaoImpl.java
package org.baicai.spring.dao.impl;
import java.util.List;
import org.baicai.spring.dao.MainOrderDao;
import org.baicai.spring.entity.MainOrder;
import org.baicai.spring.util.BasicDao;
public class MainOrderDaoImpl extends BasicDao implements MainOrderDao {
@Override
public void saveMainorder(MainOrder mainorder) throws Exception
{
super.saveEntity(mainorder);
}
@Override
public void updateMainorder(MainOrder mainorder) throws Exception
{
super.updateEntity(mainorder);
}
@Override
public void deleteMainorder(MainOrder mainorder) throws Exception
{
super.deleteEntity(mainorder);
}
@Override
public MainOrder queryMainorderByKey(MainOrder mainorder) throws Exception
{
return super.queryEntityByKey(mainorder.getOrderId(), MainOrder.class);
}
@Override
public List<MainOrder> queryAllMainorder() throws Exception
{
return super.queryAllEntity(MainOrder.class);
}
}
SubOrderDaoImpl.java
package org.baicai.spring.dao.impl;
import java.util.List;
import org.baicai.spring.dao.SubOrderDao;
import org.baicai.spring.entity.SubOrder;
import org.baicai.spring.util.BasicDao;
public class SubOrderDaoImpl extends BasicDao implements SubOrderDao{
@Override
public void saveSubOrder(SubOrder subOrder) throws Exception
{
super.saveEntity(subOrder);
}
@Override
public void updateSubOrder(SubOrder subOrder) throws Exception
{
super.updateEntity(subOrder);
}
@Override
public void deleteSubOrder(SubOrder subOrder) throws Exception
{
super.deleteEntity(subOrder);
}
@Override
public SubOrder querySubOrderByKey(SubOrder subOrder) throws Exception
{
return super.queryEntityByKey(subOrder.getSubId(), SubOrder.class);
}
@Override
public List<SubOrder> queryAllSubOrder() throws Exception
{
return super.queryAllEntity(SubOrder.class);
}
}
DemoService.java
package org.baicai.spring.service;
import java.util.List;
import org.baicai.spring.entity.MainOrder;
import org.baicai.spring.entity.SubOrder;
public interface DemoService {
public void saveOrder(MainOrder order,List<SubOrder> subs)throws Exception;
public List<MainOrder> queryAllMainOrder() throws Exception;
public List<SubOrder> queryAllSuborder() throws Exception;
}
DemoserviceImpl.java
package org.baicai.spring.service.impl;
import java.util.List;
import org.baicai.spring.dao.MainOrderDao;
import org.baicai.spring.dao.SubOrderDao;
import org.baicai.spring.entity.MainOrder;
import org.baicai.spring.entity.SubOrder;
import org.baicai.spring.service.DemoService;
import org.baicai.spring.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class DemoserviceImpl implements DemoService {
private HibernateUtil hibernateUtil;
private MainOrderDao mainOrderDao;
private SubOrderDao subOrderDao;
public HibernateUtil getHibernateUtil()
{
return hibernateUtil;
}
public void setHibernateUtil(HibernateUtil hibernateUtil)
{
this.hibernateUtil = hibernateUtil;
}
public MainOrderDao getMainOrderDao()
{
return mainOrderDao;
}
public void setMainOrderDao(MainOrderDao mainOrderDao)
{
this.mainOrderDao = mainOrderDao;
}
public SubOrderDao getSubOrderDao()
{
return subOrderDao;
}
public void setSubOrderDao(SubOrderDao subOrderDao)
{
this.subOrderDao = subOrderDao;
}
@Override
public void saveOrder(MainOrder order, List<SubOrder> subs)throws Exception
{
Session session=hibernateUtil.getSession();
Transaction tran = session.beginTransaction();
try {
mainOrderDao.saveMainorder(order);
for (SubOrder subOrder : subs)
{
subOrder.setOrderId(order.getOrderId());
subOrderDao.saveSubOrder(subOrder);
}
tran.commit();
} catch (Exception e) {
tran.rollback();
throw e;
}
}
@Override
public List<MainOrder> queryAllMainOrder() throws Exception
{
Session session=hibernateUtil.getSession();
Transaction tran = session.beginTransaction();
try {
List<MainOrder>list =mainOrderDao.queryAllMainorder();
tran.commit();
return list;
} catch (Exception e) {
tran.rollback();
throw e;
}
}
@Override
public List<SubOrder> queryAllSuborder() throws Exception
{
Session session=hibernateUtil.getSession();
Transaction tran = session.beginTransaction();
try {
List<SubOrder>list =subOrderDao.queryAllSubOrder();
tran.commit();
return list;
} catch (Exception e) {
tran.rollback();
throw e;
}
}
}
Demo.java
package org.baicai.spring.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.baicai.spring.entity.MainOrder;
import org.baicai.spring.entity.SubOrder;
import org.baicai.spring.service.DemoService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
public static void main(String[] args) throws Exception
{
//添加测试数据
Random random=new Random();
MainOrder order=new MainOrder();
int sign =random.nextInt(10)+100;
order.setCustomer("mainOrder"+sign);
order.setDescription("description"+sign);
sign =random.nextInt(10)+100;
List<SubOrder> subs=new ArrayList<SubOrder>();
SubOrder subOrder= new SubOrder();
subOrder.setDescription("description"+sign);
subOrder.setGoods("goods"+sign);
subs.add(subOrder);
sign =random.nextInt(10)+100;
subOrder= new SubOrder();
subOrder.setDescription("description"+sign);
subOrder.setGoods("goods"+sign);
subs.add(subOrder);
//加载spring
ApplicationContext context = new ClassPathXmlApplicationContext("/context.xml");
System.out.println("========================================");
//测试
DemoService demoService=context.getBean("demoServiceDao",DemoService.class);
demoService.saveOrder(order, subs);
List<MainOrder> mlist = demoService.queryAllMainOrder();
for (MainOrder mainOrder : mlist)
{
System.out.println(mainOrder);
}
System.out.println("========================================");
List<SubOrder> slist= demoService.queryAllSuborder();
for (SubOrder subOrder2 : slist)
{
System.out.println(subOrder2);
}
}
}
hibernate.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>
<mapping resource="org/baicai/spring/hbm/MainOrder.hbm.xml"/>
<mapping resource="org/baicai/spring/hbm/SubOrder.hbm.xml"/>
</session-factory >
</hibernate-configuration>
hibernate.properties
#connection
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc\:mysql\://127.0.0.1\:3306/Spring?characterEncoding\=utf8
hibernate.connection.username=root
hibernate.connection.password=paul
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#common
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=15
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.current_session_context_class=thread
#other
system.url=jdbc\:mysql\://127.0.0.1\:3306/mysql?characterEncoding\=utf8
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 完整非侵入式Hibernate+Spring整合 -->
<bean id="hibernateUtil" class="org.baicai.spring.util.HibernateUtil" factory-method="getUtil"> </bean>
<bean id="basicDao" class="org.baicai.spring.util.BasicDao" abstract="true">
<property name="hibernateUtil" ref="hibernateUtil"></property>
</bean>
<bean id="mainOrderDao" class="org.baicai.spring.dao.impl.MainOrderDaoImpl" parent="basicDao"> </bean>
<bean id="subOrderDao" class="org.baicai.spring.dao.impl.SubOrderDaoImpl" parent="basicDao"></bean>
<bean id="demoServiceDao" class="org.baicai.spring.service.impl.DemoserviceImpl">
<property name="hibernateUtil" ref="hibernateUtil"></property>
<property name="mainOrderDao" ref="mainOrderDao"></property>
<property name="subOrderDao" ref="subOrderDao"></property>
</bean>
</beans>
create.sql
drop database if exists Spring;
create database Spring default character set utf8;
create.table.sql
create table MainOrder
(
orderId integer auto_increment primary key,
customer varchar(50) not null,
description varchar(500) not null
);
create table SubOrder
(
subId integer auto_increment primary key,
orderId integer not null references MainOrder(orderId),
goods varchar(50) not null,
description varchar(500) not null
);
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project default="reset.all">
<property file="../src/hibernate.properties"></property>
<path id="mysql">
<fileset file="../../../JAR_File/jdbc/mysql-connector-java-5.1.14-bin.jar"></fileset>
</path>
<target name="create.sql">
<sql userid="${hibernate.connection.username}" password="${hibernate.connection.password}" url="${system.url}" driver="${hibernate.connection.driver_class}" src="create.sql"
encoding="utf-8" delimiter=";">
<classpath refid="mysql"></classpath>
</sql>
</target>
<target name="create.table.sql">
<sql driver="${hibernate.connection.driver_class}"password="${hibernate.connection.password}" url="${hibernate.connection.url}" userid="${hibernate.connection.username}" delimiter=";" src="create.table.sql" encoding="utf-8" classpathref="mysql" />
</target>
<target name="reset.all">
<antcall target="create.sql" />
<antcall target="create.table.sql" />
</target>
</project>
注:log4j.dtd,log4j.xml就不呈现出来了 见《struts1 一个很简单的登录演示》
运行结果如下:
- Spring + Hibernate
- Spring + Hibernate
- spring+hibernate
- Spring + Hibernate
- hibernate+spring
- Spring+hibernate
- hibernate+spring
- Spring+Hibernate
- spring+hibernate
- spring-hibernate
- hibernate+spring
- spring hibernate
- Spring-Hibernate
- Spring+Hibernate
- spring+hibernate
- Spring Hibernate
- spring hibernate
- spring+hibernate
- 黑马程序员——day04
- 不容易系列之(3)—— LELE的RPG难题(递推)
- 五人过河问题的分析
- 99乘法表
- 设计模式之---Strategy 模式
- spring+hibernate
- As3 的组件资料2(不定时收集)
- 跳台阶问题
- 参照jquery_pagination写的一个生成html的类
- ExtJS常用表单操作
- 《那些年啊,那些事——一个程序员的奋斗史》——100
- ORA-01103错误解析
- JavaScript提供了许多操作窗口的工具
- ARM中断与软中断