带分页功能的SSH整合,DAO层经典封装

任何一个封装讲究的是,使用,多状态。
Action:
任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数。并根据这个参数进行查值。
然后在继承ServiceManage,ServiceManage类是用来 存放共用的东西:response,重要的是Service的get set
具体讲一下PageManage,
totalPages;//总页数
totalRecord;//总记录数
showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数
showPageNum;//当前页显示的记录数量
 
public class PageManage extends ServiceManage{/*** 分页的一些参数* @author sl*/
private static final long serialVersionUID = 1L;// 以下三个参数是分页需返回
// protected int currentPage = 1; // 当前页数
protected int totalPages; // 总页数
protected int totalRecord; // 总记录数
protected int pageNum = 1; // 当前页数//默认每页的数量
protected int numPerPage = 20; protected PageUtil pageUtil(int totalRecord_) {
return new PageUtil(pageNum, totalRecord_, numPerPage);
}//一些getset方法
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getNumPerPage() {
return numPerPage;
}
public void setNumPerPage(int numPerPage) {
this.numPerPage = numPerPage;
}}
View Code

其中涉及到的 PageUtil,这就分页的参数设置,和进行分页功能的一些逻辑判断,逻辑变动。

PageUtil:

PageUtil(Integer currentPage,Integer totalRecord,int showRecordNum)这个定义了一个page 以后调用就这个。
//分页用到的基本两个参数:1.总的记录条数  2.每页的记录条数
DEFAULT_CURRENT=1; //默认显示第一页
DEFAULT_PAGE_NUM=20;//默认显示20条记录
pageFirRecord=0;//当前页第一条记录
currentPage=1;//当前页数
totalPages;//总页数
totalRecord;//总记录数
showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数
showPageNum;//当前页显示的记录数量
prePage=1;
nexePage=1;
public class PageUtil{
//分页用到的基本两个参数:1.总的记录条数  2.每页的记录条数
//public static final Integer DEFAULT_CURRENT=1; //默认显示第一页
public static final Integer DEFAULT_PAGE_NUM=20;//默认显示20条记录protected Integer pageFirRecord=0;//当前页第一条记录
protected Integer currentPage=1;//当前页数
protected Integer totalPages;//总页数
protected Integer totalRecord;//总记录数
protected Integer showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数
protected Integer showPageNum;//当前页显示的记录数量
protected Integer prePage=1;
protected Integer nexePage=1;
public PageUtil(){}public PageUtil(Integer currentPage,Integer totalRecord){//两个参数,一个是当前页数,一个是总页数this.setTotalRecord(totalRecord);//调用set()方法来将参数赋值
this.setTotalPages();
this.setCurrentPage(currentPage);this.setShowPageNum();
this.setPageFirRecord();
this.setPrePage();
this.setNexePage();
}
/*** 重载* @param currentPage* @param totalRecord* @param showRecordNum*/
public PageUtil(Integer currentPage,Integer totalRecord,int showRecordNum){   //showRecordNum:为当前页的总记录条数this.setTotalRecord(totalRecord);
this.setShowRecordNum(showRecordNum);
this.setTotalPages();
this.setCurrentPage(currentPage);this.setShowPageNum();
this.setPageFirRecord();this.setPrePage();//计算前一页页码
this.setNexePage();//计算下一页页码
}
public Integer getPrePage() {
return prePage;
}
public void setPrePage() {//设置前一页的页码
this.prePage = currentPage-1;//为当前页数减1
}public Integer getNexePage() {
return nexePage;
}
public void setNexePage() {if(currentPage==totalPages){  //如果当前页码为总页码,即最后一页
this.nexePage = 0;//返回0
}else{
this.nexePage = currentPage+1;//当前页加1
}
if(totalPages==0){//如果总页数为0,怎么返回0;
this.nexePage = 0;
}
}public Integer getShowPageNum() {//返回当前页显示的记录数量
return showPageNum;
}
public void setShowPageNum() {//当前页显示的记录数量
if(currentPage*showRecordNum-totalRecord>0){//当前页数*每页显示的条数—总的记录条数>0 表示现在已经是最后一页了
this.showPageNum = totalRecord-(currentPage-1)*showRecordNum;
}else{
this.showPageNum=showRecordNum;
}}public Integer getShowRecordNum() {//返回每页的记录条数
return showRecordNum;
}
public void setShowRecordNum(Integer showRecordNum) {
this.showRecordNum = showRecordNum;
}public Integer getTotalPages() {//返回总的页数
return totalPages;
}
public void setTotalPages() {//计算总页数
if(totalRecord%showRecordNum==0){
this.totalPages = totalRecord/showRecordNum;
}else{
this.totalPages = totalRecord/showRecordNum+1;
}}public Integer getTotalRecord() {//返回总的记录条数
return totalRecord;
}
public void setTotalRecord(Integer totalRecord) {
this.totalRecord = totalRecord;
}public Integer getCurrentPage() {//返回当前的页数
return currentPage;
}
public void setCurrentPage(Integer currentPage) {if(currentPage==0||currentPage<0){
currentPage=1;
}
if(currentPage>totalPages&&totalPages!=0){
this.currentPage=totalPages;//当前页大于总页数时为总页数,并且保证不存在记录时不出错,即totalPages!=0
}else if(totalPages==0){
this.currentPage=1;
}else{
this.currentPage = currentPage;
}
}public void setPageFirRecord() {//第一条记录所在集合的标号,比实际排数少一
this.pageFirRecord = (getCurrentPage()-1)*showRecordNum;//第一条记录为当前页的前一页*每页显示的记录数
}
public Integer getPageFirRecord() {//返回第一条记录
return pageFirRecord;
}}
View Code

 


然后讲Service层:
只要继承一个父类CURDS;CURDS类里面的方法和封装好的DAO层hibernate带分页的分装方法一致
随便一个service层接口
一般的方法自然都在CURDS有了。以下是写一个特殊的方法
List<AuthApply> getApplie():
所以一般来说,CURDS里面的方法够用了。
public interface AuthApplyS extends CURDS<AuthApply>{
/**
* 根据认证的类型与状态获取相应的认证申请
* */
public List<AuthApply> getApplie(String type, String status, Integer memberId);
}

CURDS:    里面的方法是Service共用的方法

/**
* 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数
* */
public int getNums(Object ...args);
/**
* 根据条件集合
* */
public List<T> getList(PageUtil pageUtil, Object ...args);
/**
* 保存对象
* */
public T makePersitent(T entity); 
/**
* 根本编号获得对象
* */
public T findById(Integer id);
public interface CURDS<T> {
/*** 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数* */
public int getNums(Object ...args);
/*** 根据条件集合* */
public List<T> getList(PageUtil pageUtil, Object ...args);
/*** 保存对象* */
public T makePersitent(T entity); 
/*** 根本编号获得对象* */
public T findById(Integer id);
}
View Code

 

 service层实现:
    共用的CURDS接口里面的方法里面如果要用就实现,不用不需要 
  DAOManage:只是DAO接口的注入
public class AuthApplySI extends DAOManage implements AuthApplyS{public AuthApply findById(Integer id) {
return authApplyD.findById(id);
}public List<AuthApply> getList(PageUtil pageUtil, Object... args) {
return authApplyD.findByPage(getHQL((String)args[0]), pageUtil.getPageFirRecord(), pageUtil.getShowRecordNum());
}public int getNums(Object... args) {
return authApplyD.findByPage(getHQL((String)args[0]), 0, 0).size();
}private String getHQL(String type){
StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"'");
hql.append(" and auth.status = '"+AuthCon.SUBMIT_AUTH+"'");
return hql.toString();
}public AuthApply makePersitent(AuthApply entity) {
return authApplyD.makePersitent(entity);
}public List<AuthApply> getApplie(String type, String status, Integer memberId) {
StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"' and auth.status = '"+status+"'");
if(memberId != null){
hql.append(" and auth.member.memberId = "+memberId);
}
return authApplyD.findByPage(hql.toString(), 0, 0).size() == 0? null: authApplyD.findByPage(hql.toString(), 0, 0);
}}
View Code

下面看一下 DAO层的封装吧。

 经典的终于来了。前面注意分页的那些类:
首先 因为有一些是特殊的方法,所以我们也要定义
AuthApplyD接口:很简单吧。
    AuthApply 是bean类  
    GenericDAO 这继承的父类就是我们的封装。
public interface AuthApplyD extends GenericDAO<AuthApply>{
}
AuthApplyD实现类
super(AuthApply.class);这个方法很重要,调用的是GenericHibernateDAO的方法,而将Bean类传到DAO层。
public class AuthApplyDI extends GenericHibernateDAO<AuthApply> implements
AuthApplyD{public AuthApplyDI() {
super(AuthApply.class);//这super,就是调用父类的构造方法
}}
View Code
GenericDAO接口封装:
这才是我想说的经典
  
/**
* 通过ID获得实体对象
* @param id实体对象的标识符
* @return 该主键值对应的实体对象
*/
T findById(Integer id);
T findById(Long id);
/**
* 将实体对象持久化
* @param entity 需要进行持久化操作的实体对象
* @return 持久化的实体对象
*/
T makePersitent(T entity); 
/**
* 将实体变为瞬态
* @param entity需要转变为瞬态的实体对象
*/
void makeTransient(T entity);
/**
* 将一系列的实体变为瞬态,使用本地sql
* @param hql
*/
void makeTransientByIds(String sql);
/**
* 使用hql语句进行分页操作
* @param hql
* @param offset第一条记录索引
* @param pageSize每页需要显示的记录数
* @return查询的记录
*/
List<T> findByPage(final String hql,final int offset,final int pageSize);
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param value 如果hql有一个参数需要传入,value就是传入的参数
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
List<T> findByPage(final String hql , final Object value ,
final int offset, final int pageSize);
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param values 如果hql有一个参数需要传入,value就是传入的参数
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
List<T> findByPage(final String hql, final Object[] values,
final int offset, final int pageSize);
/**
* 使用sql 语句进行分页查询操作
* @param sql
* @param offset
* @param pageSize
* @return
*/
List<T> findByPageSQL(final String sql, 
final int offset, final int pageSize);
/**
* 根据语句查找总数
* @param hql hql语句
* @return 对应的数目
*/
Integer getCount(String hql);
void updateObj(final String hql,final Object[] values);
/**
* 更新
* */
void updateEntity(T entity);
/**
* 返回list集合
* */
@SuppressWarnings("unchecked")
public List getListDataByHQL(String hql);
/**
* hql查询单个字段
* */
public List<Object> findSingleDataByHQL(String hql);
/**
* hql查询多个字段
* */
public List<Object[]> findSomeDataByHQL(String hql);
}
/**** @param <T>*/public interface GenericDAO <T>{
/*** 通过ID获得实体对象* * @param id实体对象的标识符* @return 该主键值对应的实体对象*/
T findById(Integer id);
T findById(Long id);
/*** 将实体对象持久化* * @param entity 需要进行持久化操作的实体对象* @return 持久化的实体对象*/
T makePersitent(T entity); /*** 将实体变为瞬态* * @param entity需要转变为瞬态的实体对象*/
void makeTransient(T entity);/*** 将一系列的实体变为瞬态,使用本地sql* * @param hql*/
void makeTransientByIds(String sql);/*** * 使用hql语句进行分页操作* * @param hql* @param offset第一条记录索引* @param pageSize每页需要显示的记录数* @return查询的记录*/
List<T> findByPage(final String hql,final int offset,final int pageSize);/*** 使用hql 语句进行分页查询操作* * @param hql 需要查询的hql语句* @param value 如果hql有一个参数需要传入,value就是传入的参数* @param offset 第一条记录索引* @param pageSize 每页需要显示的记录数* @return 当前页的所有记录*/
List<T> findByPage(final String hql , final Object value ,final int offset, final int pageSize);/*** 使用hql 语句进行分页查询操作* * @param hql 需要查询的hql语句* @param values 如果hql有一个参数需要传入,value就是传入的参数* @param offset 第一条记录索引* @param pageSize 每页需要显示的记录数* @return 当前页的所有记录*/
List<T> findByPage(final String hql, final Object[] values,final int offset, final int pageSize);/*** 使用sql 语句进行分页查询操作* * @param sql* @param offset* @param pageSize* @return*/
List<T> findByPageSQL(final String sql, final int offset, final int pageSize);/*** 根据语句查找总数* @param hql hql语句* @return 对应的数目*/
Integer getCount(String hql);void updateObj(final String hql,final Object[] values);
/*** 更新* */
void updateEntity(T entity);
/*** 返回list集合* */
@SuppressWarnings("unchecked")
public List getListDataByHQL(String hql);
/*** hql查询单个字段* */
public List<Object> findSingleDataByHQL(String hql);
/*** hql查询多个字段* */
public List<Object[]> findSomeDataByHQL(String hql);
}
View Code
GenericHibernateDAO实现类:
public class GenericHibernateDAO<T> extends HibernateDaoSupport 
implements GenericDAO<T>{private Class<T> persistentClass;public GenericHibernateDAO(Class<T> persistentClass){
this.persistentClass=persistentClass;
}public Class<T> getPersistentClass(){
return persistentClass;
}public T findById(Integer id) {
return (T)getHibernateTemplate().get(getPersistentClass(), id);
}@SuppressWarnings("unchecked")
public List<T> findByPage(final String hql, final int offset, final int pageSize){
if(hql == null){
return new ArrayList<T>();
}
List<T> list= getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(final Session session)
throws HibernateException, SQLException{
Query query=session.createQuery(hql);
if(!(offset==0 && pageSize==0)){
query.setFirstResult(offset).setMaxResults(pageSize);
}
List<T> result = query.list();
return result;
}
});
return list;
}@SuppressWarnings("unchecked")
public List findByPageSQL(final String sql, final int offset, final int pageSize){
List list= getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(final Session session)
throws HibernateException, SQLException{
Query query=session.createSQLQuery(sql);
if(!(offset==0 && pageSize==0)){
query.setFirstResult(offset).setMaxResults(pageSize);
}
List result = query.list();
return result;
}
});
return list;
}@SuppressWarnings("unchecked")
public List<T> findByPage(final String hql, final Object value, 
final int offset, final int pageSize) {
List<T> list = getHibernateTemplate().executeFind(new HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
Query query=session.createQuery(hql).setParameter(0, value);
if(!(offset==0 && pageSize==0)){
query.setFirstResult(offset).setMaxResults(pageSize);
}
List<T> result = query.list();
return result;
}
});
return list;
}@SuppressWarnings("unchecked")
public List<T> findByPage(final String hql, final Object[] values, final int offset,
final int pageSize) {
List<T> list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException{
Query query=session.createQuery(hql);
for (int i = 0 ; i < values.length ; i++){
query.setParameter( i, values[i]);
}
if(!(offset==0 && pageSize==0)){
query.setFirstResult(offset).setMaxResults(pageSize);
}
List<T> result = query.list();
return result;
}
});
return list;
}@SuppressWarnings("unchecked")
public void updateObj(final String hql, final Object[] values) {
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException{
Query query=session.createQuery(hql);
for(int i=0;i<values.length;i++){
query.setParameter( i, values[i]);
}
query.executeUpdate();
return null;
}
});
}public Integer getCount(String hql) {
Integer count;
//iterate方法与list方法的区别是list取出全部,iterator取出主键,迭代的时候才取出数据
count = ((Long)getHibernateTemplate().iterate(hql).next()).intValue();
System.out.println("大小"+ count);
return count;
}public T makePersitent(T entity) {
getHibernateTemplate().saveOrUpdate(entity);
return entity;
}public void makeTransient(T entity) {
getHibernateTemplate().delete(entity);
}@SuppressWarnings("unchecked")
public void makeTransientByIds(final String sql) {
getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException{
Query query=session.createQuery(sql);
query.executeUpdate();
return null;
}
});
}public T findById(Long id) {
return (T) getHibernateTemplate().get(getPersistentClass(), id);
}public void updateEntity(T entity) {
this.getHibernateTemplate().update(entity);
}
@SuppressWarnings("unchecked")
public List getListDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}/*** hql查询单个字段* */
@SuppressWarnings("unchecked")
public List<Object> findSingleDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}
/*** hql查询多个字段* */
@SuppressWarnings("unchecked")
public List<Object[]> findSomeDataByHQL(String hql) {
return getHibernateTemplate().find(hql);
}
}
View Code

希望首页能再次通过,我修改下。

总结:带分页功能的SSH整合,DAO层经典封装
  考虑前台,一条线的传到后台,然后分工必须明确。
  DAO层的封装,可见java底层的魅力。
共同开发,共同努力。

转载于:https://www.cnblogs.com/Alandre/p/3366557.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 198. 打家劫舍 思考分析

目录1、题目2、求解思路3、代码1、题目 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动…

找不到Windows照片查看器解决方法

桌面创建一个txt文本 复制这些命令&#xff0c;之后将后缀改为.reg&#xff0c;右击管理员身份运行即可 Windows Registry Editor Version 5.00 ; Change Extensions File Type [HKEY_CURRENT_USER\Software\Classes\.jpg] "PhotoViewer.FileAssoc.Tiff" ; Change E…

伙伴分配器的一个极简实现

提起buddy system相信很多人不会陌生&#xff0c;它是一种经典的内存分配算法&#xff0c;大名鼎鼎的Linux底层的内存管理用的就是它。这里不探讨内核这么复杂实现&#xff0c;而仅仅是将该算法抽象提取出来&#xff0c;同时给出一份及其简洁的源码实现&#xff0c;以便定制扩展…

[USACO3.2.3 Spinning Wheels]

[关键字]&#xff1a;模拟 枚举 [题目大意]&#xff1a;有5个轮子&#xff0c;每个轮子优r个缺口并且会按一定速度不停转动&#xff0c;问什么时候可以使一条光线射过所有轮子。 // [分析]&#xff1a;从0到1000&#xff08;或其他的&#xff09;枚举分钟然后判断&#xff0c;当…

一、SQLServer2008安装(带密码)、创建数据库、C#窗体项目测试

一、下载和安装SQLServer2008 东西太大了&#xff0c;没法上传到资源里面&#xff0c;官网其他公众号都下载可以。 右击管理员身份 运行setup.exe 这个密钥不能用的话&#xff0c;也可以去百度其他密钥 JD8Y6-HQG69-P9H84-XDTPG-34MBB 建议改一下路径&#xff0c;我这边修…

【C++grammar】多态、联编、虚函数

目录1、多态概念1.多态性有两种表现的方式2、联编&#xff08;实现多态&#xff09;1.静态联编2.动态联编3、实现运行时多态1.为何要使用运行时多态&#xff1f;2.如何实现运行时多态3.多态的例子1.调用哪个同名虚函数&#xff1f;2. 用途&#xff1a;可以用父类指针访问子类对…

一 MVC - HtmlHelper

HtmlHelper类位于System.Web.Mvc.Html之中主要有七个静态类组成&#xff1a; FormExtensions - BeginForm, BeginRouteForm, EndForm InputExtensions - CheckBox, CheckBoxFor, Hidden, HiddenFor, Password, PasswordFor, RadioButton, RadioButtonFor, TextBox, TextBoxFor …

二、用户登录和注册

一、页面设计 一共四个页面 主页面Form1&#xff0c;登录页面login&#xff0c;注册页面resister&#xff0c;主菜单页面main_page 系统运行进入Form1&#xff0c;单击登录按钮跳转到login&#xff0c;数据库中得存在数据信息且输入正确才可登录成功&#xff0c;跳转到main_pa…

【C++grammar】访问控制与抽象类与纯虚函数

目录一、访问控制 (可见性控制)1.private、public、protected关键字2.关键字示例1、关键字对类数据成员访问的限制3. 公有继承4. 私有继承5. 保护继承6. 私有继承和保护继承的区别二、抽象类与纯虚函数1.什么是抽象类2.抽象函数/纯虚函数3.抽象类示例一、访问控制 (可见性控制)…

三、上传织物图片至SQL Server并提供name进行展示织物照片

一、数据库的建立 还是在fiber_yy数据库下创建images表 images表设计如下 二、页面完善设计 main_page页面进行功能完善 入库管理系统 warehousing页面 库存查询系统 query页面 登录注册页面前面几个博文已经实现过了&#xff0c;这里就再赘述了&#xff0c;仍是沿用前…

ARM MMU工作原理剖析[转]

一、MMU的产生 许多年以前&#xff0c;当人们还在使用DOS或是更古老的操作系统的时候&#xff0c;计算机的内存还非常小&#xff0c;一般都是以K为单位进行计算&#xff0c;相应的&#xff0c;当时的程序规模也不大&#xff0c;所以内存容量虽然小&#xff0c;但还是可以容纳当…

【原创】SharePoint Document library List Check out 文档时碰到的问题解决

环境&#xff1a;TFS(Team Foundation Server)集成的WSS 3.0&#xff08;SharePoint Service 3.0&#xff09; 问题&#xff1a;如题&#xff0c;祥见下图 解决&#xff1a;一般碰到没有经验的问题&#xff0c;大家当然是外事不决问谷歌了&#xff0c;于是谷歌搜到了这篇博客 h…

四、入库管理功能的完善

一、数据库的创建 在fiber_yy数据库下创建yy_textile表 先随便添加几条数据 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 warehousing入库页面 main_page页面进行功能完善 三、代码实现 warehousing页面 using System; using System.…

leetcode 232. 用栈实现队列 思考分析

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返…

YCSB初步介绍

随着大数据时代的到来和云计算的不断发展&#xff0c;作为云计算最基础的设施存储产品也越来越多&#xff0c;开源分布式存储系统有BigTable-like系统HBase&#xff0c;dynamo-like系统Cassandra&#xff0c;voldemort&#xff0c;Riak&#xff0c;淘宝开源的OceanBase等。当然…

【C++grammar】动态类型转换、typeid与RTTI

目录动态类型转换1、为何需要动态类型转换2、dynamic_cast<>();运算符3、向上转换和向下转换( Upcasting and Downcasting)4、 基类对象和派生类对象的互操作5、Upcasting/Downcasting与继承链上不同类的对象之间的赋值有什么关系和区别&#xff1f;typeid 运行时查询类型…

五、库存查询功能的完善

一、数据库的建立 由于查询功能和之前的 入库管理功能 所用的数据库都一样&#xff0c;这里仍使用yy_textile表 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 query查询页面 main_page…

整合ajaxmin 和 less 到VS.net

我用的前端框架是bootstrap_extra, twitter团队做的&#xff0c;这个是他的一个扩展&#xff0c;首先从上面下载一个。至于ajaxmin&#xff0c;请参考这里1) 从bootstrap_extra的解压包中&#xff0c;复制build目录下三个文件到项目中去&#xff0c;这三个文件分别是BatchSubsi…

六、出库管理功能的实现

一、数据库的建立 这里仍使用yy_textile表 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 shipment出库管理页面 main_page页面进行功能完善 三、代码实现 shipment出库管理页面 u…

数学建模:层次分析法实例以及代码

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录层次分析法的思想层次分析法步骤具体案例(市政工程项目建设决策)1.问题提出2.…