<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      目錄

      * 前言 <https://www.cnblogs.com/AprilBlank/p/11282398.html#前言>
      * 開(kāi)始 <https://www.cnblogs.com/AprilBlank/p/11282398.html#開(kāi)始>
      * 使用 <https://www.cnblogs.com/AprilBlank/p/11282398.html#使用>
      * 小結(jié) <https://www.cnblogs.com/AprilBlank/p/11282398.html#小結(jié)>
      前言


      昨天是寫(xiě)著寫(xiě)著發(fā)現(xiàn),時(shí)間不早了,已經(jīng)養(yǎng)成了晚上下班抽時(shí)間看看能寫(xiě)點(diǎn)兒啥的習(xí)慣(貌似),今天實(shí)在是不想讓昨天沒(méi)做完的事情影響,所以又坐下,沉下心(周末了),開(kāi)始把數(shù)據(jù)庫(kù)這塊兒的補(bǔ)充完整。


      昨天已經(jīng)介紹過(guò)大部分的東西,包括方法封裝也是基本的展示了下,實(shí)際上應(yīng)該先介紹這一篇,從怎么用來(lái)引導(dǎo)封裝類(lèi)庫(kù),但是既然寫(xiě)都寫(xiě)出來(lái)了就不想再調(diào)整了,今天就主要說(shuō)下怎么實(shí)際使用方法吧,需要查看具體使用的類(lèi)庫(kù)可查看
      net core Webapi基礎(chǔ)工程搭建(六)——數(shù)據(jù)庫(kù)操作_Part 1
      <https://www.cnblogs.com/AprilBlank/p/11282394.html>。(懶的不能行)

      開(kāi)始

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


      上一篇我們創(chuàng)建了一個(gè)StudentEntity這個(gè)對(duì)象,忘了的朋友可以去看下。
      新建一個(gè)IStudentService接口,繼承IBaseService
      public interface IStudentService : IBaseService<StudentEntity> { }
      新建一個(gè)StudentService實(shí)現(xiàn)類(lèi),繼承BaseService,實(shí)現(xiàn)IStudentService
      public class StudentService : BaseService<StudentEntity>, IStudentService { }
      好了,完了,回家睡覺(jué)吧。

      使用

      如果你看到上面的直接走了,對(duì)不起,娛樂(lè)一下,做開(kāi)發(fā)千萬(wàn)不敢像烏鴉學(xué)蓋房子,沒(méi)聽(tīng)過(guò)自行度娘,我也不會(huì)講故事。

      我們需要在StartUp這里將接口與實(shí)現(xiàn)關(guān)聯(lián),有些博客會(huì)介紹自動(dòng)關(guān)聯(lián)用于解耦,需要也可以自行百度。

      補(bǔ)充說(shuō)明,昨天好像忘記在WebApi工程引入Service與Entity兩個(gè)工程了,見(jiàn)諒見(jiàn)諒,特此補(bǔ)充。

      這里我在Service項(xiàng)目下Common下新建Depends文件夾,新建一個(gè)類(lèi)ServiceInjection,在這統(tǒng)一放接口與實(shí)現(xiàn)的對(duì)應(yīng)關(guān)系。
      public class ServiceInjection { public static void
      ConfigureRepository(IServiceCollection services) {
      services.AddSingleton<IStudentService, StudentService>(); } }
      對(duì)于依賴(lài)注入,這里簡(jiǎn)短穿插幾句,后續(xù)有新的感受會(huì)再補(bǔ)充。

      方法 說(shuō)明
      Transient 每一次調(diào)用都會(huì)創(chuàng)建一個(gè)新的實(shí)例
      Scoped 一個(gè)作用域中只實(shí)例化一個(gè)
      Singleton 整個(gè)應(yīng)用程序生命周期以?xún)?nèi)只創(chuàng)建一個(gè)實(shí)例
      然后我們?cè)赟tartUp的ConfigureServices最前面加上這句話(huà),這里在構(gòu)造函數(shù)加上這句,用途就是由AprilConfig來(lái)統(tǒng)一接管配置信息。
      public Startup(IConfiguration configuration) { ...之前的東西
      AprilConfig.InitConfig(configuration); } public void
      ConfigureServices(IServiceCollection services) {
      ServiceInjection.ConfigureRepository(services); ...之前的東西 }
      當(dāng)然對(duì)應(yīng)要有接收的方法。
      public class AprilConfig { public static IServiceProvider ServiceProvider;
      public static IConfiguration Configuration; public static void
      InitConfig(IConfiguration _configuration) { Configuration = _configuration; } }
      好了,所有的都寫(xiě)好后,我們繼續(xù)拿萬(wàn)惡的Values控制器(多好的開(kāi)刀對(duì)象)實(shí)驗(yàn)。

      在這之前,確定好你的數(shù)據(jù)庫(kù)是哪類(lèi),SqlServer請(qǐng)按1,MySql請(qǐng)按0,其他請(qǐng)自行查看文檔。

      為了方便項(xiàng)目統(tǒng)一管理,我們要好好利用appsettings,就像我們當(dāng)時(shí)使用web.config一樣,連接串自己根據(jù)實(shí)際情況修改。
      //新加一個(gè) "DefaultSqlConnectionString": { "MySql":
      "server=127.0.0.1;userid=root;password=root;database=test;" }
      在我們Util層的AprilConfig,來(lái)獲取參數(shù)。
      private static string _MySqlConnectionString = string.Empty; /// <summary>
      /// MySql默認(rèn)連接串 /// </summary> public static string MySqlConnectionString { get
      { if (string.IsNullOrEmpty(_MySqlConnectionString)) { _MySqlConnectionString =
      Configuration["DefaultSqlConnectionString:MySql"]; } return
      _MySqlConnectionString; } }
      然后我們來(lái)修改BaseService當(dāng)時(shí)留的連接串信息。



      創(chuàng)建表結(jié)構(gòu),這里說(shuō)明下,不是說(shuō)非要?jiǎng)?chuàng)建,畢竟SqlSugar有CodeFirst(當(dāng)然也有DbFirst),需要的朋友可去文檔查看,也比較簡(jiǎn)單,在程序啟動(dòng)的時(shí)候來(lái)判斷是否有表,或者專(zhuān)門(mén)做個(gè)接口做初始化操作也可以,下圖做用法簡(jiǎn)介,具體還是查看文檔吧,畢竟還有備份啊改列名什么的。





      萬(wàn)事具備,之前Values這個(gè)挨千刀的東風(fēng),構(gòu)造函數(shù)來(lái)獲取IStudentService這個(gè)接口。
      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 = "大洛陽(yáng)";
      _service.Insert(entity); return new string[] { "value1", "value2" }; }


      * 修改
      這里剛好也演示下SqlFilterEntity這個(gè)自己寫(xiě)的方法的用法,并且擴(kuò)展了下實(shí)體的方法,方便使用。
      SqlFilterEntity擴(kuò)展方法
      //...之前的實(shí)體對(duì)象 /// <summary> /// 添加查詢(xún)條件 /// </summary> /// <param
      name="filter">條件</param> /// <param name="relation">關(guān)系</param> public void
      Append(string filter, string relation = "and") { if
      (string.IsNullOrEmpty(filter)) { return; } if (Filter.Length > 0) { Filter +=
      relation; } Filter += filter; } /// <summary> /// 添加查詢(xún)參數(shù) /// </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);
      } }
      修改測(cè)試
      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); }


      * 刪除
      刪除這個(gè)不多說(shuō),就是把修改的換個(gè)方法。




      * 查看
      這里直接做分頁(yè)的測(cè)試,拿Values/{id}這個(gè)接口做實(shí)驗(yàn)。
      [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; }


      小結(jié)


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

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問(wèn)題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          精品黄片视频 | 欧洲少妇无码A片在线视频 | 极品嫩模炮交高潮叫床喷液 | 成人无码www免费视频男男 | 久久国产精品精品国产 | 国产AV性爱 | 久久精品无码电影 | 午夜ww | 草草影院CCYYCOM屁屁影院 | 羽月希产后喂奶最新款式 |