[{"data":1,"prerenderedAt":287},["ShallowReactive",2],{"slug-content-de-\u002Feducation\u002Fihk-ausbildung":3},{"kind":4,"item":5,"categories":37,"projects":199},"education",{"id":6,"title":7,"body":8,"dateEnd":15,"dateStart":16,"degree":17,"description":12,"extension":18,"fieldOfStudy":19,"highlights":20,"institution":23,"meta":24,"navigation":25,"path":26,"projects":27,"seo":29,"stem":30,"tags":31,"__hash__":36},"education_de\u002Feducation\u002Fihk-ausbildung.md","Ihk Ausbildung",{"type":9,"value":10,"toc":11},"minimark",[],{"title":12,"searchDepth":13,"depth":13,"links":14},"",2,[],"2022-06","2020-08","Fachinformatiker Anwendungsentwicklung","md",null,[21,22],"Berufsschulnote: 1,5","IHK Note: 2,0","IHK Nord Westfalen",{},true,"\u002Feducation\u002Fihk-ausbildung",[28],"kinoBE",{"description":12},"education\u002Fihk-ausbildung",[32,33,34,35],"java","networking","sql","windows","u9iwKLgtWo4wmM4gY7k3ZwYe806wJU7CTNKytKeWXeY",[38,46,67,94,124,136,147,155],{"name":39,"items":40},"Datenbanken",[41,43],{"slug":34,"name":42},"SQL (MySQL, MariaDB)",{"slug":44,"name":45},"sqlite","SQLite",{"name":47,"items":48},"Frontend",[49,52,55,58,61,64],{"slug":50,"name":51},"html5","HTML5",{"slug":53,"name":54},"css3","CSS3",{"slug":56,"name":57},"tailwindcss","Tailwind CSS",{"slug":59,"name":60},"bootstrap","Bootstrap",{"slug":62,"name":63},"uikit","UIkit",{"slug":65,"name":66},"extjs","Ext JS",{"name":68,"items":69},"JavaScript-Ökosystem",[70,73,76,79,82,85,88,91],{"slug":71,"name":72},"javascript","JavaScript",{"slug":74,"name":75},"typescript","TypeScript",{"slug":77,"name":78},"nodejs","Node.js",{"slug":80,"name":81},"vuejs","Vue.js",{"slug":83,"name":84},"nuxt","Nuxt.JS",{"slug":86,"name":87},"react","React",{"slug":89,"name":90},"next","Next.JS",{"slug":92,"name":93},"deno","Deno",{"name":95,"items":96},"PHP-Ökosystem",[97,100,103,106,109,112,115,118,121],{"slug":98,"name":99},"php","PHP",{"slug":101,"name":102},"laravel","Laravel",{"slug":104,"name":105},"symfony","Symfony",{"slug":107,"name":108},"laminas","Laminas",{"slug":110,"name":111},"mezzio","Mezzio",{"slug":113,"name":114},"zend","Zend Framework",{"slug":116,"name":117},"wordpress","WordPress",{"slug":119,"name":120},"shopware","Shopware",{"slug":122,"name":123},"spryker","Spryker",{"name":125,"items":126},"Mobile",[127,130,133],{"slug":128,"name":129},"dart","Dart",{"slug":131,"name":132},"flutter","Flutter",{"slug":134,"name":135},"android","Android",{"name":137,"items":138},"Weitere Sprachen",[139,141,144],{"slug":32,"name":140},"Java",{"slug":142,"name":143},"python","Python",{"slug":145,"name":146},"go","Go",{"name":148,"items":149},"Betriebssysteme",[150,153],{"slug":151,"name":152},"linux","Linux",{"slug":35,"name":154},"Windows",{"name":156,"items":157},"Sonstiges",[158,161,164,167,170,173,176,179,182,184,187,190,193,196],{"slug":159,"name":160},"git","Git",{"slug":162,"name":163},"docker","Docker",{"slug":165,"name":166},"jenkins","Jenkins",{"slug":168,"name":169},"jvm","JVM",{"slug":171,"name":172},"aws","AWS",{"slug":174,"name":175},"cloudflare","Cloudflare",{"slug":177,"name":178},"nginx","Nginx",{"slug":180,"name":181},"redis","Redis",{"slug":33,"name":183},"Netzwerk",{"slug":185,"name":186},"rabbitmq","RabbitMQ",{"slug":188,"name":189},"oidc","OIDC",{"slug":191,"name":192},"rest","REST",{"slug":194,"name":195},"terraform","Terraform",{"slug":197,"name":198},"cicd","CI\u002FCD",[200],{"id":201,"title":28,"body":202,"dateEnd":276,"dateStart":277,"description":278,"extension":18,"featuredInCv":279,"link":19,"meta":280,"navigation":25,"path":281,"repo":282,"seo":283,"stem":284,"tags":285,"__hash__":286},"projects_de\u002Fprojects\u002Fkinobe.md",{"type":9,"value":203,"toc":273},[204,209,213,236,239,270],[205,206,208],"h2",{"id":207},"über-das-projekt","Über das Projekt",[210,211,212],"p",{},"kinoBE („Kino-Backend\") ist die Serverseite eines Kinobuchungssystems, das ich während meiner IHK-Ausbildung entwickelt habe. Das Herzstück des Projekts ist ein kleines, von Hand geschriebenes ORM, das ich von Grund auf umgesetzt habe, um zu verstehen, wie Frameworks wie Doctrine oder Hibernate Objekte intern auf eine relationale Datenbank abbilden.",[210,214,215,216,220,221,224,225,228,229,224,232,235],{},"Entitäten sind einfache Java-Klassen, die mit eigenen Annotationen ",[217,218,219],"code",{},"@Entity",", ",[217,222,223],{},"@Column"," und ",[217,226,227],{},"@Id"," versehen sind; ",[217,230,231],{},"@OneToManyRelation",[217,233,234],{},"@ManyToOneRelation"," beschreiben die Beziehungen zwischen ihnen. Zur Laufzeit wertet das ORM diese Annotationen per Reflection aus, um SQL zu erzeugen, Objekte aus Result-Sets zu befüllen und verknüpfte Entitäten über ihre Repositories nachzuladen.",[210,237,238],{},"Darüber hinaus bildet es mehrere Muster nach, die auch produktive ORMs verwenden:",[240,241,242,260,263],"ul",{},[243,244,245,246,249,250,220,253,224,256,259],"li",{},"eine Repository-Schicht (",[217,247,248],{},"AbstractRepository\u003CT>",") mit ",[217,251,252],{},"findAll",[217,254,255],{},"findBy",[217,257,258],{},"getById",",",[243,261,262],{},"eine Identity Map, die bereits geladene Entitäten zwischenspeichert, um doppelte Objekte und überflüssige Abfragen zu vermeiden,",[243,264,265,266,269],{},"sowie ein rudimentäres Dirty-Checking, bei dem sich jede Entität ihren Ausgangszustand über einen Hash merkt, sodass ",[217,267,268],{},"flush()"," nur tatsächlich geänderte Datensätze speichert.",[210,271,272],{},"Die Daten werden über JDBC in SQLite gespeichert, und die Anwendung stellt eine REST-API (Filme, Vorstellungen, Reservierungen) für das passende Frontend bereit. Der Build erfolgt mit Maven und einem GitHub-Actions-Workflow.",{"title":12,"searchDepth":13,"depth":13,"links":274},[275],{"id":207,"depth":13,"text":208},"2022-03","2022-02","Ein von Hand geschriebenes, annotationsbasiertes ORM samt REST-Backend für ein Kinobuchungssystem, entwickelt während meiner IHK-Ausbildung.",false,{},"\u002Fprojects\u002Fkinobe","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002FkinoBE",{"title":28,"description":278},"projects\u002Fkinobe",[32,44,34,191,159,197],"beNAdHLxK7x74XEOINqcoikqRZPRzN88GEruz9E7jtY",1783417754240]