Nhibernate学习起步之many-to-one篇(转)

1.     学习目的:

通过进一步学习nhibernate基础知识,在实现单表CRUD的基础上,实现两表之间one-to-many的关系.

2.     开发环境+必要准备

开发环境: windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition

必要准备: 学习上篇文章单表操作   

3. 对上篇文章中部分解释

 1)在User.hbm.xml中class节点中有一个lazy的属性,这个属性用于指定是否需要延迟加载(lazy loading),在官方文档中称为:lazy fecting.可以说延迟加载是nhibernate最好的特点,因为它可以在父类中透明的加载子类集合,这对于many-to-one的业务逻辑中,真是方便极了。但是有些时候,父类是不需要携带子类信息的。这时候如果也加载,无疑对性能是一种损失。在映射文件的class节点中可以通过配置lazy属性来指定是否支持延迟加载,这就更灵活多了。 

 2) 在User.hbm.xml中generate节点,代表的是主键的生成方式,上个例子中的”native”根据底层数据库的能力选择identity,hilo,sequence中的一个,比如在MS Sql中,使我们最经常使用的自动增长字段,每次加1. 

3) 在NHibernateHelper.cs中,创建Configuration对象的代码:new Configuration().Configure(@"E:\myproject\nhibernatestudy\simle1\NHibernateStudy1\NhibernateSample1\hibernate.cfg.xml");因为我是在单元测试中调试,所以将绝对路径的配置文件传递给构造函数。如果在windows app或者web app可以不用传递该参数。 

4. 实现步骤

 1)确定实现的业务需求:用户工资管理系统

 2) 打开上篇文章中的NHibernateStudy1解决方案。向项目NhibernateSample1添加类Salary;代码如下

ContractedBlock.gifExpandedBlockStart.gifSalary.cs
None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
None.gif
namespace NhibernateSample1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
public partial class Salary
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
int _id;
InBlock.gif        User _user;
InBlock.gif        
int _year;
InBlock.gif        
int _month;
InBlock.gif        
int _envy;
InBlock.gif        
decimal _money;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 工资编号
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public virtual int Id
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return _id;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _id 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 雇员
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public virtual User Employee
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return _user;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _user 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 年度
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public int Year
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return _year;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _year 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 月份
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public int Month
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return _month;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _month 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 季度
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public int Envy
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return _envy;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _envy 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 工资
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public decimal Money
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return _money;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _money 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

3) 更改User.cs,在User里面添加SalaryList属性:

ContractedBlock.gifExpandedBlockStart.gifUser.cs
 1None.gifprivate System.Collections.IList _salaryList;
 2ExpandedBlockStart.gifContractedBlock.gif /**//// <summary>
 3InBlock.gif        /// 工资列表
 4ExpandedBlockEnd.gif        /// </summary>

 5None.gif        public System.Collections.IList SalaryList
 6ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
 7InBlock.gif            get
 8ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 9InBlock.gif                return _salaryList;
10ExpandedSubBlockEnd.gif            }

11InBlock.gif            set
12ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
13InBlock.gif                _salaryList = value;
14ExpandedSubBlockEnd.gif            }

15ExpandedBlockEnd.gif        }
4)修改User.hbm.xml,加入bag节点
ContractedBlock.gifExpandedBlockStart.gifUser.hbm.xml
None.gif<bag name="SalaryList" table="Salary" inverse="true" lazy="true" cascade="all">
None.gif      
<key column="Id"/>
None.gif      
<one-to-many class="NhibernateSample1.Salary,NhibernateSample1"></one-to-many>
None.gif    
</bag>

 5)编写类Salary的映射文件:Salary.hbm.xml
ContractedBlock.gifExpandedBlockStart.gifSalary.hbm.xml
None.gif<?xml version="1.0" encoding="utf-8" ?>
None.gif
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
None.gif  
<class name="NhibernateSample1.Salary,NhibernateSample1" table="Salary" lazy="false">
None.gif    
<id name="Id" column="Id" unsaved-value="0">
None.gif      
<generator class="native" />
None.gif    
</id>
None.gif    
<property name="Year" column="Year" type="Int32" not-null="true"></property>
None.gif    
<property name="Month"  column="Month"  type="Int32" not-null="true"></property>
None.gif    
<property name="Envy"  column="Envy"  type="Int32" not-null="true"></property>
None.gif    
<property name="Money"  column="Money"  type="Decimal" not-null="true"></property>
None.gif    
<many-to-one name="Employee" column="Uid" not-null="true"></many-to-one>
None.gif  
</class>
None.gif
</hibernate-mapping>
6)编写CRUD
ContractedBlock.gifExpandedBlockStart.gifUserSalaryFixure.cs
None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
using System.Collections;
None.gif
using NHibernate;
None.gif
using NHibernate.Cfg;
None.gif
using NHibernate.Tool.hbm2ddl;
None.gif
None.gif
namespace NhibernateSample1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
public  class UserSalaryFixure
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
private ISessionFactory _sessions; 
InBlock.gif        
public void Configure()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Configuration cfg 
= GetConfiguration();      
InBlock.gif            _sessions 
= cfg.BuildSessionFactory();
ExpandedSubBlockEnd.gif        }

InBlock.gif        Configuration GetConfiguration()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string cfgPath = @"E:\my project\nhibernate study\simle 1\NHibernateStudy1\NhibernateSample1\hibernate.cfg.xml";
InBlock.gif            Configuration cfg 
= new Configuration().Configure(cfgPath);
InBlock.gif            
return cfg;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public void ExportTables()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Configuration cfg 
= GetConfiguration();           
InBlock.gif            
new SchemaExport(cfg).Create(truetrue);
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public User CreateUser(String name,string pwd)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            User u 
= new User();
InBlock.gif            u.Name 
= name;
InBlock.gif            u.Pwd 
= pwd;
InBlock.gif            u.SalaryList 
= new ArrayList();
InBlock.gif
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif
InBlock.gif            ITransaction tx 
= null;
InBlock.gif
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                session.Save(u);
InBlock.gif                tx.Commit();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
throw e;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
return u;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public Salary CreateSalary(User u, int year,int month,int envy,decimal money)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Salary item 
= new Salary();
InBlock.gif            item.Year 
= year;
InBlock.gif            item.Money 
= money;
InBlock.gif            item.Envy 
= envy;
InBlock.gif            item.Month 
= month;
InBlock.gif            item.Employee 
= u;
InBlock.gif            u.SalaryList.Add(item);
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif            ITransaction tx 
= null;
InBlock.gif
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                session.Update(u);
InBlock.gif                tx.Commit();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
throw e;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return item;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public Salary CreateSalary(int uid,int year, int month, int envy, decimal money)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Salary item 
= new Salary();
InBlock.gif            item.Year 
= year;
InBlock.gif            item.Money 
= money;
InBlock.gif            item.Envy 
= envy;
InBlock.gif            item.Month 
= month;
InBlock.gif            
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif            ITransaction tx 
= null;
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                User u 
= (User)session.Load(typeof(User), uid);
InBlock.gif                item.Employee 
= u;
InBlock.gif                u.SalaryList.Add(item);
InBlock.gif                tx.Commit();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
throw e;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return item;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public Salary GetSalary(int salaryID)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif            ITransaction tx 
= null;
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                Salary item 
= (Salary)session.Load(typeof(Salary),
InBlock.gif                    salaryID);               
InBlock.gif                tx.Commit();
InBlock.gif                
return item;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
return null;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return null;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public User GetUser(int uid)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif            ITransaction tx 
= null;
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                User item 
= (User)session.Load(typeof(User),
InBlock.gif                    uid);
InBlock.gif                tx.Commit();
InBlock.gif                
return item;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
return null;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return null;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public void UpdateSalary(int salaryID, decimal money)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif            ITransaction tx 
= null;
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                Salary item 
= (Salary)session.Load(typeof(Salary),
InBlock.gif                    salaryID);
InBlock.gif                item.Money 
= money;
InBlock.gif                tx.Commit();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
throw e;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public void Delete(int uid)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            ISession session 
= _sessions.OpenSession();
InBlock.gif            ITransaction tx 
= null;
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tx 
= session.BeginTransaction();
InBlock.gif                Salary item 
= session.Load(typeof(Salary), uid) as Salary; ;
InBlock.gif                session.Delete(item);
InBlock.gif                tx.Commit();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (HibernateException e)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (tx != null) tx.Rollback();
InBlock.gif                
throw e;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                session.Close();
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
7) 编写单元测试类:UnitTest1.cs
ContractedBlock.gifExpandedBlockStart.gifUnitTest1.cs
None.gifusing System;
None.gif
using System.Text;
None.gif
using System.Collections.Generic;
None.gif
using Microsoft.VisualStudio.TestTools.UnitTesting;
None.gif
using NhibernateSample1;
None.gif
None.gif
namespace TestProject1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// UnitTest1 的摘要说明
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    [TestClass]
InBlock.gif    
public class UnitTest1
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public UnitTest1()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//
InBlock.gif            
// TODO: 在此处添加构造函数逻辑
InBlock.gif            
//
ExpandedSubBlockEnd.gif
        }

InBlock.gif        NhibernateSample1.UserSalaryFixure usf 
= new UserSalaryFixure();
ContractedSubBlock.gifExpandedSubBlockStart.gif        
其他测试属性#region 其他测试属性
InBlock.gif        
//
InBlock.gif        
// 您可以在编写测试时使用下列其他属性:
InBlock.gif        
//
InBlock.gif        
// 在运行类中的第一个测试之前使用 ClassInitialize 运行代码
InBlock.gif        
// [ClassInitialize()]
InBlock.gif        
// public static void MyClassInitialize(TestContext testContext) { }
InBlock.gif        
//
InBlock.gif        
// 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码
InBlock.gif        
// [ClassCleanup()]
InBlock.gif        
// public static void MyClassCleanup() { }
InBlock.gif        
//
InBlock.gif        
// 在运行每个测试之前使用 TestInitialize 运行代码 
InBlock.gif        
// [TestInitialize()]
InBlock.gif        
// public void MyTestInitialize() { }
InBlock.gif        
//
InBlock.gif        
// 在运行每个测试之后使用 TestCleanup 运行代码
InBlock.gif        
// [TestCleanup()]
InBlock.gif        
// public void MyTestCleanup() { }
InBlock.gif        
//
ExpandedSubBlockEnd.gif
        #endregion

InBlock.gif
InBlock.gif        [TestMethod]
InBlock.gif        
public void Test1()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            usf.Configure();
InBlock.gif            usf.ExportTables();
InBlock.gif            User u 
= usf.CreateUser(Guid.NewGuid().ToString(), "ds");
InBlock.gif            Assert.IsTrue(u.Id
>0);
InBlock.gif            Salary s 
= usf.CreateSalary(u, 200731, (decimal)8000.00);
InBlock.gif            Assert.IsTrue(s.Id 
> 0);
InBlock.gif            Salary s1 
= usf.CreateSalary(u.Id, 200731, (decimal)7500);
InBlock.gif            Assert.IsTrue(s1.Id
>0);
InBlock.gif            usf.UpdateSalary(s1.Id, (
decimal)6000);
InBlock.gif            s1 
= usf.GetSalary(s1.Id);
InBlock.gif            Assert.IsTrue(s1.Money 
== (decimal)6000);
InBlock.gif            usf.Delete(s1.Id);
InBlock.gif            s1 
= usf.GetSalary(s1.Id);
InBlock.gif            Assert.IsNull(s1);
InBlock.gif            User u1 
= usf.GetUser(1);
InBlock.gif            Assert.IsTrue(u1.SalaryList.Count
>0);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
加载测试元数据,直到Test()通过。
总结:通过进一步学习nhiberate,发现ORM框架真是非常强大。今天先到这里。明天继续。
项目文件:/Files/jillzhang/simple2.rar

转载于:https://www.cnblogs.com/erichzhou/archive/2007/03/29/692949.html

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

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

相关文章

关于如何清除某个特定网站的缓存---基于Chrome浏览器

1、清除浏览器缓存 直接在浏览器设置里面清除浏览器的缓存会清除所有网站的缓存信息&#xff0c;这在某些时候是非常不方便的&#xff0c;毕竟不只有测试网站&#xff0c;还会有一些我们不想清除的信息也会被清除掉&#xff1b; 2、通过F12功能去清除浏览器缓存 转载于:https:/…

php中for循环流程图,PHP for循环

PHP for循环可以用来遍历一组指定的次数的代码。如果迭代次数已知&#xff0c;则应优先考虑使用for循环&#xff0c;否则使用while循环。for循环的语法for(initialization; condition; increment/decrement){ //code to be executed }for循环流程图示例代码-<?php for($n1;…

Spring中AOP切面编程学习笔记

注解方式实现aop我们主要分为如下几个步骤&#xff1a;  1.在切面类&#xff08;为切点服务的类&#xff09;前用Aspect注释修饰&#xff0c;声明为一个切面类。  2.用Pointcut注释声明一个切点&#xff0c;目的是为了告诉切面&#xff0c;谁是它的服务对象。&#xff08;此…

SpringCloud的学习记录(1)

最近一段时间重新学习一边SpringCloud&#xff0c;这里简单记录一下。 我用的是IntelliJ IDEA开发工具, SpringBoot的版本是2.1.3.RELEASE。 1. 构建Maven项目 整个的SpringCloud的项目是在Maven项目中的&#xff0c;这个Maven只做容纳其他项目使用, 比如后面Fegin/Config/Zipk…

html5 拖拽上传文件时,屏蔽浏览器默认打开文件

参考&#xff1a; https://www.cnblogs.com/kingsm/p/9849339.html 转载于:https://www.cnblogs.com/cwxwdm/p/10605529.html

php求数组交集的自定义函数,php数组交集函数

在数学中的交集运算&#xff0c;大家在学习的时候还是比较轻松的。我们在php数组里&#xff0c;可以借助array_intersect()函数对两个数组求交集&#xff0c;最后得到一个想要的交集数据。在正式开始array_intersect()使用前&#xff0c;我们需要先对函数的概念、语法、参数、返…

2016 hctf fheap 题解

题目链接 https://github.com/zh-explorer/hctf2016-fheap 题目分析 题目功能只有 malloc 和 free 的功能&#xff0c;查看堆的布局&#xff1a; 全局指针没有置空&#xff0c;导致 uaf 和 double free 漏洞&#xff0c;两种都可以做&#xff0c;但是这题的重点是绕过 PIE。 do…

Docker: Jenkins里的pipeline编写基本技巧

Jenkins里&#xff0c;先新建一个pipeline项目 Pipeline Syntax 在Sample Step里选择需要的插件&#xff0c;如果不存在&#xff0c;就去系统管理&#xff0c;插件管理里&#xff0c;进行安装。 如果源码管理工具用的是git,就在下拉里选择git 如果源码管理用的是svn&#xff0c…

《解剖PetShop》系列之三

《解剖PetShop》系列之三 三、PetShop数据访问层之消息处理 在进行系统设计时&#xff0c;除了对安全、事务等问题给与足够的重视外&#xff0c;性能也是一个不可避免的问题所在&#xff0c;尤其是一个B/S结构的软件系统&#xff0c;必须充分地考虑访问量、数据流量、服务器负荷…

简单理解bash和常规操作

1. 什么是bash&#xff1f; Bash shell是一个命令解释器&#xff0c;它是操作系统的外壳程序&#xff0c;负责处理用户命令与操作系统内核之间的交互&#xff0c;当用户输入一个命令并执行时&#xff0c;shell会把命令解释并传递给内核&#xff0c;然后再把内核输出返回给用户&…

昨夜的雨图片

昨天趟着淹没到屁股的雨水回家的&#xff0c;今天才知道&#xff0c;这是一场非常可怕的暴雨.本来就吓的够戗,现在直接两腿发软&#xff0c;几欲要哭了。想想真是后怕. 朋友说&#xff0c;你可真大胆,那么大雨你也敢趟.其实不是胆大,而是我走着走着水没的越来越往上了.幸亏个子…

ASP如何限定中英文混合的文字输出字数?

1<%2字符串截取函数&#xff0c;用于信息标题 3strWord需要截取的字符串 4intByteLength显示的字节长度&#xff0c;1个汉字两个字节 5intPadDotAmount背截取后尾部补充点的个数 6字符串截取函数&#xff0c;用于信息标题 7Function FixString()Function FixString(ByVal st…

【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

原文链接&#xff1a;传送门。 第十章节我们分析了索引的内部结构。有了这些关于索引结构的知识&#xff0c;我们便可以分析索引碎片了&#xff1a;其产生的原因&#xff0c;如何防止&#xff0c;以及何时可以不去关注它们。 一些背景知识 / 复习 以下知识对于理解索引碎片来说…

Maverick.Net介绍 (来自http://www.cnblogs.com/RicCC/archive/2006/09/17/506890.html)

Maverick.Net介绍 Maverick.Net是Java社区开源MVC Web框架Maverick的.Net版本&#xff0c;相关资料可以查看项目主页。不管Maverick.Net的是非好坏&#xff0c;了解一下它的思想还是不错的。下面的内容是对Maverick.Net整体做一个简单的介绍&#xff0c;以求能够从全局的角度了…

惊了!最通俗易懂的Djongo入门竟然在这里!

Django简介python下有多款不同的web框架&#xff0c;Django是最有代表行的一种。许多成功的网站和app都基于djanfo。django是一个开源的web应用框架&#xff0c;由python写成。django采用了MVC的软件设计模式&#xff0c;即模型M,视图V和控制器C。Django特点强大的数据库功能&a…

linux z是什么文件夹,Linux znew初学者命令实例教程

原标题&#xff1a;Linux znew初学者命令实例教程您是否知道Linux提供了一种将.Z文件重新压缩为.gz文件的方法&#xff1f; 是的&#xff0c;znew命令可以让你这样做。 在本教程中&#xff0c;我们将使用一些易于理解的示例讨论此命令行实用程序的基础知识。 但在我们这样做之前…

使用X.509数字证书加密解密实务(一)-- 证书的获得和管理

一、 获得证书... 21、 从CA获得... 22、 从windows2003证书服务中获得... 23、 使用makecert工具获得... 2二、 证书的保存... 21、 保存在证书存储区... 22、 以文件形式保存... 42.1. 带有私钥的证书... 42.2. …