• Dos.ORM使用教程


    Dos.C#.Net使用

      Dos.ORM(原Hxj.Data)于2009年发布,并发布实体生成工具。在开发过程参考了多个ORM框架,特别是NBear,MySoft、EF、Dapper等。吸取了他们的一些精华,加入自己的新思想。该组件已在上百个成熟企业项目中应用

    为什么选择Dos.ORM(原Hxj.Data)?

    • 上手简单,0学习成本。使用方便,按照sql书写习惯编写C#.NET代码。功能强大
    • 高性能(与Dapper媲美,接近手写Sql)
    • 体积小(不到150kb,仅一个dll)
    • 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等数据库
    • 支持大量Lambda表达式写法,国产ORM支持度最高,开源中国ORM排行前三
    • 不需要像NHibernate的XML配置,不需要像EF的各种数据库连接驱动
    • 众多成熟企业软件、互联网项目已应用此框架
    • 遵循MIT开源协议,除不允许改名,其它随意定制修改
    • Dos团队持续更新升级,任何Bug反馈都会立即得到解决

      首先·在 App.config文件中配置连接数据库字符串。或者在程序中指定

    1     <connectionStrings>
    2         <add name="School" connectionString="Data Source=.;Initial Catalog=School;User ID=sa;Pwd=123;"></add>
    3     </connectionStrings>

    然后,进行增删改操作。如下:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 using Hxj.Data;
      7 using Hxj.Data.Sqlite;
      8 using System.Data;
      9 
     10 namespace cn.School
     11 {
     12     class Test
     13     {
     14         static void Main(string[] args)
     15         {
     16 
     17             //    <connectionStrings>
     18             //<add name="School" connectionString="Data Source=.;Initial Catalog=School;User ID=sa;Pwd=123;"></add>
     19             //</connectionStrings>
     20 
     21             //不同的数据库可构造不同的DbSession    DbSession(connectionStrings节点的name)
     22             //DbSession dbs = new DbSession("School");
     23             DbSession dbs2 = new DbSession(DatabaseType.SqlServer, "Data Source=.;Initial Catalog=School;User ID=sa;Pwd=123;");
     24 
     25             //TestSelDB();
     26 
     27             //addTestDB();
     28 
     29             //Updata();
     30 
     31             //DelData();
     32 
     33             //sqlFrom();
     34 
     35             assistmethod();
     36         }
     37 
     38         /// <summary>
     39         /// 查询操作
     40         /// </summary>
     41         public static void TestSelDB()
     42         {
     43             //查询Student表中第一条数据并返回实体,代码如下。
     44             Student st = DbSession.Default.From<Student>()
     45                 //.Select(Products._.ProductID) //查询返回ProductID字段
     46                 //.GroupBy(Products._.CategoryID.GroupBy && Products._.ProductName.GroupBy)//按照CategoryID,ProductName分组
     47                 //.InnerJoin<Suppliers>(Suppliers._.SupplierID == Products._.SupplierID)//关联Suppliers表   --CrossJoin   FullJoin  LeftJoin  RightJoin 同理
     48                 //.OrderBy(Products._.ProductID.Asc)//按照ProductID正序排序
     49                 //.Where((Products._.ProductName.Contain("apple") && Products._.UnitPrice > 1) || Products._.CategoryID == 2)//设置条件ProductName包含”apple”并且UnitPrice>1  或者CategoryID =2
     50                 //.UnionAll(DbSession.Default.From<Products>().Select(Products._.ProductID))//union all查询
     51                 //.Distinct() // Distinct
     52                 //.Top(5)   //读取前5条
     53                 //.Page(10, 2)//分页返回结果 每页10条返回第2页数据
     54                 //.ToDataSet();   //返回DataSet
     55                 //.ToDataReader(); //返回IDataReader
     56                 //.ToDataTable(); //返回DataTable
     57                 //.ToScalar();  //返回单个值    
     58             .ToFirst();
     59 
     60             //分字段查询
     61             DbSession.Default.From<Student>()
     62                 .Select(Student._.Stu_ID, Student._.Stu_name)
     63                 .ToDataTable();
     64 
     65             //分字段查询取别名
     66             DbSession.Default.From<Student>()
     67                 .Select(Student._.Stu_ID, Student._.Stu_name.As("pname"))
     68                 .ToDataTable();
     69 
     70             //排序倒叙排列
     71             DataTable dt = DbSession.Default.From<Student>().OrderBy(Student._.Stu_ID.Desc).ToDataTable();
     72 
     73         }
     74 
     75         /// <summary>
     76         /// 模糊查询
     77         /// 子查询
     78         /// in 查询
     79         /// not iN查询
     80         /// </summary>
     81         public static void demoSelet()
     82         {
     83 
     84             //Contain完全模糊查询
     85             DbSession.Default.From<Student>().Where(Student._.Stu_ID.Contain(41500));
     86 
     87             //查找Stu_ID列中所有以41500开头的。
     88             DbSession.Default.From<Student>().Where(Student._.Stu_ID.BeginWith(41500));
     89 
     90             //查找Stu_ID列中所有以41500结尾的。
     91             DbSession.Default.From<Student>().Where(Student._.Stu_ID.EndWith(41500));
     92 
     93             //in 查询
     94             DbSession.Default.From<Student>()
     95                 .Where(Student._.Stu_ID.SelectIn(1, 2, 3))
     96                 .ToList();
     97 
     98             //not in查询
     99             DbSession.Default.From<Student>()
    100                 .Where(Student._.Stu_ID.SelectNotIn<int>(1, 2, 3))
    101                 .ToList();
    102 
    103             //子查询
    104 
    105             //SubQueryEqual                =
    106             //SubQueryNotEqual            <>
    107             //SubQueryLess                <
    108             //SubQueryLessOrEqual        <=
    109             //SubQueryGreater            >
    110             //SubQueryGreaterOrEqual    >=
    111             //SubQueryIn                in
    112             //SubQueryNotIn                not in
    113             DbSession.Default.From<Student>()
    114                 .Where(Student._.Stu_ID
    115                 .SubQueryEqual(DbSession.Default.From<Student>().Where(Student._.Stu_ID == "Produce").Select(Student._.Stu_ID).Top(1)))
    116                 .ToList();
    117         }
    118 
    119         /// <summary>
    120         /// 联合查询
    121         /// </summary>
    122         public static void likeSel()
    123         {
    124             //InnerJoin        inner join
    125             //LeftJoin        left join
    126             //RightJoin        right join
    127             //CrossJoin        cross join
    128             //FullJoin        full join
    129             //Union            union
    130             //UnionAll        union all
    131             DbSession.Default.From<Student>()
    132                 .InnerJoin<Gread>(Student._.gr_id == Gread._.gr_id)
    133                 .ToDataTable();
    134             //联合查询带条件
    135             DbSession.Default.From<Student>()
    136                 .LeftJoin<Gread>(Student._.gr_id == Gread._.gr_id)
    137                 .Where(Student._.gr_id == 1)
    138                 .ToDataTable();
    139 
    140             //这两个是两个结果的合集,union会区分结果排除相同的,union all 则直接合并结果集合。
    141 
    142             DbSession.Default.From<Student>().Where(Student._.gr_id == 4522)
    143                 .UnionAll(DbSession.Default.From<Gread>().Where(Gread._.gr_id == 1))
    144                 .ToList();
    145         }
    146 
    147         /// <summary>
    148         /// 增加操作
    149         /// </summary>
    150         public static void addTestDB()
    151         {
    152             //新建一个实体
    153             Student stu = new Student();
    154             stu.Stu_name = "小黑";
    155             stu.stu_phon = "1254555";
    156             stu.stu_Sex = "";
    157             stu.stu_Age = 25;
    158             stu.gr_id = 1;
    159 
    160             //开启修改  (开启修改后的添加操作将只insert赋值过的字段)
    161             stu.Attach();
    162 
    163             //返回值  如果有自增长字段,则返回自增长字段的值
    164             int result = DbSession.Default.Insert<Student>(stu);
    165 
    166             //将插入的数据查询出来
    167             List<Student> listStu = DbSession.Default.From<Student>().Where(Student._.Stu_ID == result).ToList();
    168         }
    169 
    170         /// <summary>
    171         /// 修改操作
    172         /// </summary>
    173         public static void Updata()
    174         {
    175             //先查询一个Student对象
    176             Student stu = DbSession.Default.From<Student>().Where(Student._.Stu_ID.Contain(41500)).ToFirst();
    177 
    178             //开启修改   (修改操作之前 必须执行此方法)
    179             stu.Attach();
    180 
    181             stu.Stu_name = "王五";
    182             List<ModifyField> list = stu.GetModifyFields();
    183             //清除修改记录   (清除后更新操作无效)
    184             //stu.ClearModifyFields();
    185             //返回0表示更新失败 组件有事务会自动回滚  
    186             //返回1表示更新成功   
    187             //更新成功返回值就是受影响的条数
    188             int num = DbSession.Default.Update<Student>(stu);
    189 
    190 
    191             //简单的修改方法,修改一个值的时候使用
    192             //int nums = DbSession.Default.Update<Student>(Student._.Stu_name, "九九", Student._.Stu_ID == 41501);
    193 
    194 
    195             //修改多个值的时候
    196             //Dictionary<Field, object> st = new Dictionary<Field, object>();
    197             //st.Add(Student._.stu_Sex, "男");
    198             //st.Add(Student._.Stu_name, "小徐");
    199             //int returnvalue = DbSession.Default.Update<Student>(st, Student._.Stu_ID == 41501);
    200         }
    201 
    202 
    203         /// <summary>
    204         /// 删除操作
    205         /// </summary>
    206         public static void DelData()
    207         {
    208 
    209             int returnValue = DbSession.Default.Delete<Student>(Student._.Stu_ID == 41504);
    210             //与上面等效的删除语句
    211             //int returnvalue = DbSession.Default.Delete<Student>(2);
    212 
    213 
    214             //删除一个对象
    215             //Student stu = DbSession.Default.From<Student>().ToFirst();
    216             //int returnvalue = DbSession.Default.Delete<Student>(stu);
    217         }
    218 
    219 
    220         /// <summary>
    221         /// 使用SQL语句查询
    222         /// </summary>
    223         public static void sqlFrom()
    224         {
    225 
    226             //直接使用SQL语句查询
    227             DataTable dt = DbSession.Default.FromSql("select * from Student").ToDataTable();
    228 
    229             //参数化SQL语句
    230             //DataTable dt1 = DbSession.Default.FromSql("select * from Student where stu_id=id").AddInParameter("id", DbType.Int32, 41500).ToDataTable();
    231 
    232             //多个参数查询
    233             //DataTable dt2 = DbSession.Default.FromSql("select * from Student where stu_id=id or stu_name=name")
    234             //    .AddInParameter("id", DbType.Int32, 41500)
    235             //    .AddInParameter("name", DbType.String, "张三")
    236             //    .ToDataTable();
    237         }
    238 
    239 
    240         /// <summary>
    241         /// 存储过程
    242         /// </summary>
    243         public static void ProcDemo()
    244         {
    245             //"ProcName"就是存储过程名称。
    246             DataTable dt = DbSession.Default.FromProc("ProcName").ToDataTable();
    247 
    248 
    249             //执行带参数的存储过程
    250             DataTable dt1 = DbSession.Default.FromProc("ProcName")
    251                 .AddInParameter("parameterName", DbType.DateTime, "1995-01-01")
    252                 .AddInParameter("parameterName1", DbType.DateTime, "1996-12-01")
    253                 .ToDataTable();
    254 
    255 
    256 
    257             //AddInputOutputParameter  方法添加输入输出参数 
    258             //AddOutParameter  方法添加输出参数
    259             //AddReturnValueParameter  方法添加返回参数
    260 
    261             ProcSection proc = DbSession.Default.FromProc("testoutstore")
    262             .AddInParameter("in1", System.Data.DbType.Int32, 1)
    263             .AddOutParameter("out2", System.Data.DbType.String, 100);
    264             proc.ExecuteNonQuery();
    265 
    266             Dictionary<string, object> returnValue = proc.GetReturnValues();
    267 
    268             foreach (KeyValuePair<string, object> kv in returnValue)
    269             {
    270                 Console.WriteLine("ParameterName:" + kv.Key + "    ;ReturnValue:" + Convert.ToString(kv.Value));
    271             }
    272         }
    273 
    274         /// <summary>
    275         /// 辅助方法
    276         /// </summary>
    277         public static void assistmethod()
    278         {
    279             //返回  Student._.Stu_name == "小黑"  的Student._.gr_id合计。
    280             int? sum = (int?)DbSession.Default.Sum<Student>(Student._.gr_id, Student._.Stu_name == "小黑");
    281 
    282             //返回  Student._.Stu_ID == 2  的Stu_ID平均值。
    283             DbSession.Default.Avg<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
    284 
    285             //返回  Student._.Stu_ID == 2  的Stu_ID个数。
    286             DbSession.Default.Count<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
    287 
    288             //返回  Student._.Stu_ID == 2  的Stu_ID最大值。
    289             DbSession.Default.Max<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
    290 
    291             //返回  Student._.Stu_ID == 2  的Stu_ID最小值。
    292             DbSession.Default.Min<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
    293 
    294         }
    295 
    296 
    297         /// <summary>
    298         /// 添加事务处理
    299         /// </summary>
    300         public static void TestTrans()
    301         {
    302 
    303             DbTrans trans = DbSession.Default.BeginTransaction();
    304             try
    305             {
    306                 DbSession.Default.Update<Student>(Student._.Stu_name, "apple", Student._.Stu_ID == 1, trans);
    307                 DbSession.Default.Update<Student>(Student._.Stu_name, "egg", Student._.Stu_ID == 2, trans);
    308                 trans.Commit();
    309             }
    310             catch
    311             {
    312                 trans.Rollback();
    313             }
    314             finally
    315             {
    316                 trans.Close();
    317             }
    318 
    319             //存储过程中的事务   (ProcName表示存储过程名称)
    320             DbTrans trans1 = DbSession.Default.BeginTransaction();
    321             DbSession.Default.FromProc("ProcName").SetDbTransaction(trans);
    322 
    323         }
    324 
    325 
    326         /// <summary>
    327         /// 批处理
    328         /// </summary>
    329         public static void batingTest()
    330         {
    331             //默认是10条sql执行一次。也可以自定义。
    332             //DbBatch batch = DbSession.Default.BeginBatchConnection(20)
    333 
    334             using (DbBatch batch = DbSession.Default.BeginBatchConnection())
    335             {
    336                 batch.Update<Student>(Student._.Stu_name, "apple", Student._.Stu_ID == 1);
    337                 batch.Update<Student>(Student._.Stu_name, "pear", Student._.Stu_ID == 2);
    338                 //执行batch.Execute(),就会将之前的sql脚本先提交。
    339                 //batch.Execute();
    340                 batch.Update<Student>(Student._.Stu_name, "orange", Student._.Stu_ID == 3);
    341             }
    342         }
    343 
    344 
    345         /// <summary>
    346         /// 缓存
    347         /// </summary>
    348         public static void SetCacheTimeOutDemo() {
    349 
    350             //SetCacheTimeOut设置查询的缓存为180秒
    351             DbSession.Default.From<Student>().Where(Student._.Stu_ID == 1).SetCacheTimeOut(180).ToFirst();
    352 
    353 
    354 
    355         }
    356 
    357 
    358 
    359     }
    360 }

      工具生成的实体类如下:

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     此代码由工具生成。
    //     运行时版本:2.0.50727.5485
    //     Support: http://www.cnblogs.com/huxj
    //     对此文件的更改可能会导致不正确的行为,并且如果
    //     重新生成代码,这些更改将会丢失。
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    
    using System;
    using System.Data;
    using System.Data.Common;
    using Hxj.Data;
    using Hxj.Data.Common;
    
    namespace cn.School
    {
    
        /// <summary>
        /// 实体类Student 。(属性说明自动提取数据库字段的描述信息)
        /// </summary>
        [Serializable]
        public class Student : Entity 
        {
            public Student():base("Student") {}
    
            #region Model
            private int _Stu_ID;
            private string _Stu_name;
            private int? _stu_Age;
            private string _stu_Sex;
            private string _stu_phon;
            private int _gr_id;
            /// <summary>
            /// 
            /// </summary>
            public int Stu_ID
            {
                get{ return _Stu_ID; }
                set
                {
                    this.OnPropertyValueChange(_.Stu_ID,_Stu_ID,value);
                    this._Stu_ID=value;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public string Stu_name
            {
                get{ return _Stu_name; }
                set
                {
                    this.OnPropertyValueChange(_.Stu_name,_Stu_name,value);
                    this._Stu_name=value;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public int? stu_Age
            {
                get{ return _stu_Age; }
                set
                {
                    this.OnPropertyValueChange(_.stu_Age,_stu_Age,value);
                    this._stu_Age=value;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public string stu_Sex
            {
                get{ return _stu_Sex; }
                set
                {
                    this.OnPropertyValueChange(_.stu_Sex,_stu_Sex,value);
                    this._stu_Sex=value;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public string stu_phon
            {
                get{ return _stu_phon; }
                set
                {
                    this.OnPropertyValueChange(_.stu_phon,_stu_phon,value);
                    this._stu_phon=value;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public int gr_id
            {
                get{ return _gr_id; }
                set
                {
                    this.OnPropertyValueChange(_.gr_id,_gr_id,value);
                    this._gr_id=value;
                }
            }
            #endregion
    
            #region Method
            /// <summary>
            /// 获取实体中的标识列
            /// </summary>
            public override Field GetIdentityField()
            {
                return _.Stu_ID;
            }
            /// <summary>
            /// 获取实体中的主键列
            /// </summary>
            public override Field[] GetPrimaryKeyFields()
            {
                return new Field[] {
                    _.Stu_ID};
            }
            /// <summary>
            /// 获取列信息
            /// </summary>
            public override Field[] GetFields()
            {
                return new Field[] {
                    _.Stu_ID,
                    _.Stu_name,
                    _.stu_Age,
                    _.stu_Sex,
                    _.stu_phon,
                    _.gr_id};
            }
            /// <summary>
            /// 获取值信息
            /// </summary>
            public override object[] GetValues()
            {
                return new object[] {
                    this._Stu_ID,
                    this._Stu_name,
                    this._stu_Age,
                    this._stu_Sex,
                    this._stu_phon,
                    this._gr_id};
            }
            /// <summary>
            /// 给当前实体赋值
            /// </summary>
            public override void SetPropertyValues(IDataReader reader)
            {
                this._Stu_ID = DataUtils.ConvertValue<int>(reader["Stu_ID"]);
                this._Stu_name = DataUtils.ConvertValue<string>(reader["Stu_name"]);
                this._stu_Age = DataUtils.ConvertValue<int?>(reader["stu_Age"]);
                this._stu_Sex = DataUtils.ConvertValue<string>(reader["stu_Sex"]);
                this._stu_phon = DataUtils.ConvertValue<string>(reader["stu_phon"]);
                this._gr_id = DataUtils.ConvertValue<int>(reader["gr_id"]);
            }
            /// <summary>
            /// 给当前实体赋值
            /// </summary>
            public override void SetPropertyValues(DataRow row)
            {
                this._Stu_ID = DataUtils.ConvertValue<int>(row["Stu_ID"]);
                this._Stu_name = DataUtils.ConvertValue<string>(row["Stu_name"]);
                this._stu_Age = DataUtils.ConvertValue<int?>(row["stu_Age"]);
                this._stu_Sex = DataUtils.ConvertValue<string>(row["stu_Sex"]);
                this._stu_phon = DataUtils.ConvertValue<string>(row["stu_phon"]);
                this._gr_id = DataUtils.ConvertValue<int>(row["gr_id"]);
            }
            #endregion
    
            #region _Field
            /// <summary>
            /// 字段信息
            /// </summary>
            public class _
            {
                /// <summary>
                /// * 
                /// </summary>
                public readonly static Field All = new Field("*","Student");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field Stu_ID = new Field("Stu_ID","Student","Stu_ID");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field Stu_name = new Field("Stu_name","Student","Stu_name");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field stu_Age = new Field("stu_Age","Student","stu_Age");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field stu_Sex = new Field("stu_Sex","Student","stu_Sex");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field stu_phon = new Field("stu_phon","Student","stu_phon");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field gr_id = new Field("gr_id","Student","gr_id");
            }
            #endregion
    
    
        }
    }
    
    
    
    
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     此代码由工具生成。
    //     运行时版本:2.0.50727.5485
    //     Support: http://www.cnblogs.com/huxj
    //     对此文件的更改可能会导致不正确的行为,并且如果
    //     重新生成代码,这些更改将会丢失。
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    
    using System;
    using System.Data;
    using System.Data.Common;
    using Hxj.Data;
    using Hxj.Data.Common;
    
    namespace cn.School
    {
    
        /// <summary>
        /// 实体类Gread 。(属性说明自动提取数据库字段的描述信息)
        /// </summary>
        [Serializable]
        public class Gread : Entity 
        {
            public Gread():base("Gread") {}
    
            #region Model
            private int _gr_id;
            private string _gr_name;
            /// <summary>
            /// 
            /// </summary>
            public int gr_id
            {
                get{ return _gr_id; }
                set
                {
                    this.OnPropertyValueChange(_.gr_id,_gr_id,value);
                    this._gr_id=value;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            public string gr_name
            {
                get{ return _gr_name; }
                set
                {
                    this.OnPropertyValueChange(_.gr_name,_gr_name,value);
                    this._gr_name=value;
                }
            }
            #endregion
    
            #region Method
            /// <summary>
            /// 获取实体中的标识列
            /// </summary>
            public override Field GetIdentityField()
            {
                return _.gr_id;
            }
            /// <summary>
            /// 获取实体中的主键列
            /// </summary>
            public override Field[] GetPrimaryKeyFields()
            {
                return new Field[] {
                    _.gr_id};
            }
            /// <summary>
            /// 获取列信息
            /// </summary>
            public override Field[] GetFields()
            {
                return new Field[] {
                    _.gr_id,
                    _.gr_name};
            }
            /// <summary>
            /// 获取值信息
            /// </summary>
            public override object[] GetValues()
            {
                return new object[] {
                    this._gr_id,
                    this._gr_name};
            }
            /// <summary>
            /// 给当前实体赋值
            /// </summary>
            public override void SetPropertyValues(IDataReader reader)
            {
                this._gr_id = DataUtils.ConvertValue<int>(reader["gr_id"]);
                this._gr_name = DataUtils.ConvertValue<string>(reader["gr_name"]);
            }
            /// <summary>
            /// 给当前实体赋值
            /// </summary>
            public override void SetPropertyValues(DataRow row)
            {
                this._gr_id = DataUtils.ConvertValue<int>(row["gr_id"]);
                this._gr_name = DataUtils.ConvertValue<string>(row["gr_name"]);
            }
            #endregion
    
            #region _Field
            /// <summary>
            /// 字段信息
            /// </summary>
            public class _
            {
                /// <summary>
                /// * 
                /// </summary>
                public readonly static Field All = new Field("*","Gread");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field gr_id = new Field("gr_id","Gread","gr_id");
                /// <summary>
                /// 
                /// </summary>
                public readonly static Field gr_name = new Field("gr_name","Gread","gr_name");
            }
            #endregion
    
    
        }
    }
  • 相关阅读:
    张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结
    预备作业03——20162329张旭升
    预备作业02 : 体会做中学-20162329 张旭升
    预备作业01——20162329
    FPGA的软核与硬核
    网页调用vlc并播放网络视频
    vue视频插件VLC
    vue+vue-video-player实现弹窗播放视频
    【面向对象程序设计】作业三
    【面向对象程序设计】作业二
  • 原文地址:https://www.cnblogs.com/BookCode/p/5292859.html
Copyright © 2020-2023  润新知