net core Webapi基礎工程搭建(六)——數據庫操作_Part 2


前言

昨天是寫着寫着發現,時間不早了,已經養成了晚上下班抽時間看看能寫點兒啥的習慣(貌似),今天實在是不想讓昨天沒做完的事情影響,所以又坐下,沉下心(周末了),開始把數據庫這塊兒的補充完整。

昨天已經介紹過大部分的東西,包括方法封裝也是基本的展示了下,實際上應該先介紹這一篇,從怎么用來引導封裝類庫,但是既然寫都寫出來了就不想再調整了,今天就主要說下怎么實際使用方法吧,需要查看具體使用的類庫可查看net core Webapi基礎工程搭建(六)——數據庫操作_Part 1。(懶的不能行)

開始

閑話不多說,Service層搞起,新建兩個文件夾,一個Interfaces,一個Implements,另外順帶新建個Common的文件夾,把上一篇的三個類放進去(純粹是看的,歸類,放不放不影響使用)。

Service
上一篇我們創建了一個StudentEntity這個對象,忘了的朋友可以去看下。
新建一個IStudentService接口,繼承IBaseService

    public interface IStudentService : IBaseService<StudentEntity>
    {
    }

新建一個StudentService實現類,繼承BaseService,實現IStudentService

    public class StudentService : BaseService<StudentEntity>, IStudentService
    {
    }

好了,完了,回家睡覺吧。

使用

如果你看到上面的直接走了,對不起,娛樂一下,做開發千萬不敢像烏鴉學蓋房子,沒聽過自行度娘,我也不會講故事。

我們需要在StartUp這里將接口與實現關聯,有些博客會介紹自動關聯用於解耦,需要也可以自行百度。

補充說明,昨天好像忘記在WebApi工程引入Service與Entity兩個工程了,見諒見諒,特此補充。

這里我在Service項目下Common下新建Depends文件夾,新建一個類ServiceInjection,在這統一放接口與實現的對應關系。

    public class ServiceInjection
    {
        public static void ConfigureRepository(IServiceCollection services)
        {
            services.AddSingleton<IStudentService, StudentService>();
        }
    }

對於依賴注入,這里簡短穿插幾句,后續有新的感受會再補充。

方法 說明
Transient 每一次調用都會創建一個新的實例
Scoped 一個作用域中只實例化一個
Singleton 整個應用程序生命周期以內只創建一個實例

然后我們在StartUp的ConfigureServices最前面加上這句話,這里在構造函數加上這句,用途就是由AprilConfig來統一接管配置信息。

		public Startup(IConfiguration configuration)
        {
			...之前的東西
            AprilConfig.InitConfig(configuration);
        }
		
        public void ConfigureServices(IServiceCollection services)
        {
            ServiceInjection.ConfigureRepository(services);
            
			...之前的東西
		}

當然對應要有接收的方法。

    public class AprilConfig
    {
        public static IServiceProvider ServiceProvider;
        public static IConfiguration Configuration;

        public static void InitConfig(IConfiguration _configuration)
        {
            Configuration = _configuration;
        }
	}

好了,所有的都寫好后,我們繼續拿萬惡的Values控制器(多好的開刀對象)實驗。

在這之前,確定好你的數據庫是哪類,SqlServer請按1,MySql請按0,其他請自行查看文檔。

為了方便項目統一管理,我們要好好利用appsettings,就像我們當時使用web.config一樣,連接串自己根據實際情況修改。

  //新加一個
  "DefaultSqlConnectionString": {
    "MySql": "server=127.0.0.1;userid=root;password=root;database=test;"
  }

在我們Util層的AprilConfig,來獲取參數。

        private static string _MySqlConnectionString = string.Empty;
        /// <summary>
        /// MySql默認連接串
        /// </summary>
        public static string MySqlConnectionString
        {
            get
            {
                if (string.IsNullOrEmpty(_MySqlConnectionString))
                {
                    _MySqlConnectionString = Configuration["DefaultSqlConnectionString:MySql"];
                }
                return _MySqlConnectionString;
            }
        }

然后我們來修改BaseService當時留的連接串信息。

BaseService
創建表結構,這里說明下,不是說非要創建,畢竟SqlSugar有CodeFirst(當然也有DbFirst),需要的朋友可去文檔查看,也比較簡單,在程序啟動的時候來判斷是否有表,或者專門做個接口做初始化操作也可以,下圖做用法簡介,具體還是查看文檔吧,畢竟還有備份啊改列名什么的。

說明

mysql

萬事具備,之前Values這個挨千刀的東風,構造函數來獲取IStudentService這個接口。

    public class ValuesController : ControllerBase
    {

        private readonly IStudentService _service;

        public ValuesController(IStudentService service)
        {
            _service = service;
        }
    }
  • 插入
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            StudentEntity entity = new StudentEntity();
            entity.Name = "小明";
            entity.Age = 18;
            entity.Number = "007";
            entity.Sex = 0;
            entity.Address = "大洛陽";
            _service.Insert(entity);
            return new string[] { "value1", "value2" };
        }

插入

  • 修改
    這里剛好也演示下SqlFilterEntity這個自己寫的方法的用法,並且擴展了下實體的方法,方便使用。

SqlFilterEntity擴展方法

		//...之前的實體對象
		
		/// <summary>
        /// 添加查詢條件
        /// </summary>
        /// <param name="filter">條件</param>
        /// <param name="relation">關系</param>
        public void Append(string filter, string relation = "and")
        {
            if (string.IsNullOrEmpty(filter))
            {
                return;
            }
            if (Filter.Length > 0)
            {
                Filter += relation;
            }
            Filter += filter;
        }
        /// <summary>
        /// 添加查詢參數
        /// </summary>
        /// <param name="key">鍵</param>
        /// <param name="value">值</param>
        public void Add(string key, object value)
        {
            if (string.IsNullOrEmpty(key) || value == null)
            {
                return;
            }
            if (Value == null)
            {
                Value = new Dictionary<string, object>();
            }
            if (Value.ContainsKey(key))
            {
                Value[key] = value;
            }
            else
            {
                Value.Add(key, value);
            }
        }

修改測試

			StudentEntity entity = null;
            SqlFilterEntity filter = new SqlFilterEntity();
            filter.Append($"ID=@ID");
            filter.Add("@ID", 1);
            entity = _service.GetEntity(filter);
            if (entity != null)
            {
                entity.Name = "我被修改了";
                _service.Update(entity);
            }
	

修改

  • 刪除
    刪除這個不多說,就是把修改的換個方法。

刪除

刪除

  • 查看

這里直接做分頁的測試,拿Values/{id}這個接口做實驗。

        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            string value = string.Empty;
            //value = CacheUtil.Get<string>("cachetest");
            //value = SessionUtil.GetSession("test");
            //value = CookieUtil.GetCookies("apirlcookietest");

            int count = 0;
            List<StudentEntity> lists = _service.GetPageList(id, 10, "", null, "", out count);

            value = JsonConvert.SerializeObject(lists);

            return value;
        }

查看

小結

這里大致上介紹了SqlSugar的用法已經一些基礎的不能基礎的封裝,實際使用的話,肯定需要擴展完善的,但是作為教程來講,我也不可能把全部的情況都考慮到,畢竟業務不同,沒有萬金油,只有不停的完善更新,業務場景多了,功能就完善了,一步一步來,一口吃不成個胖子(這個胖子不是你認識的那個胖子),不過還是感慨下這些開源的好類庫,真的是方便了開發人員,為了解放程序猿的雙手(yy)做出了嗨翻天的貢獻,好了,回歸正題,下一篇Aop的測試以及小東西


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM