Java bieži tiek uzskatīta par pārāk sarežģītu un prasa pārāk ilgu laiku, lai izveidotu vienkāršas lietojumprogrammas. Neskatoties uz to, Java nodrošina stabilu platformu ar ļoti nobriedušu ekosistēmu ap to, kas padara to par lielisku iespēju izveidot izturīgu programmatūru.
Pavasara pamatprogramma, kas ir viena no daudzajām spēcīgajām ES ietvarstruktūrām Java ekosistēmai, nāk ar programmēšanas un konfigurācijas modeļu kolekciju ar mērķi vienkāršot izpildāmu un pārbaudāmu Java lietojumprogrammu izstrādi.
ātrs vs 2017. gada mērķis c
Šajā apmācībā mēs izaicināsim izveidot vienkāršu lietojumprogrammu, kas darbosies kā datu bāze programmatūras izstrādātāji izmantojot Spring Framework un Java Noturības API (JPA).
Lietojumprogramma atbilst standarta MVC arhitektūrai. Tam būs kontrolieris (ContractsController klase), skati (pamatojoties uz Thymeleaf veidnēm) un modelis (Java kartes objekts). Vienkāršības labad, lai saglabātu datus, kamēr programma darbojas, mēs izmantosim atmiņā esošo datu bāzi, kas atrodas JPA.
Lai izveidotu pavasarī balstītu lietojumprogrammu, mums būs jāizmanto viens no šiem veidošanas rīkiem:
Šajā apmācībā mēs izmantosim Maven. Ja jums nav zināms neviens no šiem rīkiem, vienkāršs veids, kā sākt, ir lejupielādēt Pavasara rīku komplekts . 'Suite' ir paredzēts pavasara ietvaram, un tam ir savs komplekts Aptumsums balstīta IDE.
Pavasara rīku komplektā mēs izveidojam jaunu projektu, izvēlnē “Fails> Jauns” atlasot “Pavasara sākuma projekts”.
Kad būs izveidots jauns projekts, mums būs jārediģē Maven konfigurācijas fails “ pom.xml ”Un pievienojiet šādas atkarības:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 org.springframework.data spring-data-commons
Šīs uzskaitītās atkarības ielādēs Spring Boot Web, Thymeleaf, JPA un H2 (kas kalpos kā mūsu atmiņas datu bāze). Visas nepieciešamās bibliotēkas tiks automātiski izvilktas.
Lai varētu uzglabāt informāciju par izstrādātājiem un viņu prasmēm, mums būs jādefinē divas entītiju klases: “ Izstrādātājs ' un ' Prasme ”.
Abas šīs ir definētas kā vienkāršas Java klases ar dažām anotācijām. Pievienojot “@Entity” pirms nodarbībām, mēs padarām viņu gadījumus pieejamus JPA. Tas atvieglos gadījumu saglabāšanu un izgūšanu no pastāvīgā datu krātuves, kad nepieciešams. Turklāt “@Id” un “@GeneratedValue” anotācijas ļauj mums norādīt entītijas unikālo ID lauku un tā vērtību automātiski ģenerēt, kad tā tiek glabāta datu bāzē.
Tā kā izstrādātājam var būt daudz prasmju, mēs varam definēt vienkāršas attiecības daudziem pret daudziem, izmantojot anotāciju “@ManyToMany”.
@Entity public class Developer { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; private String firstName; private String lastName; private String email; @ManyToMany private List skills; public Developer() { super(); } public Developer(String firstName, String lastName, String email, List skills) { super(); this.firstName = firstName; this.lastName = lastName; this.email = email; this.skills = skills; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public List getSkills() { return skills; } public void setSkills(List skills) { this.skills = skills; } public boolean hasSkill(Skill skill) { for (Skill containedSkill: getSkills()) { if (containedSkill.getId() == skill.getId()) { return true; } } return false; } }
@Entity public class Skill { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; private String label; private String description; public Skill() { super(); } public Skill(String label, String description) { super(); this.label = label; this.description = description; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
Ar JPA mēs varam definēt ļoti noderīgu DeveloperRepository saskarni un SkillRepository saskarni, kas ļauj veikt vienkāršas CRUD darbības. Šīs saskarnes ļaus mums piekļūt saglabātajiem izstrādātājiem un prasmēm, izmantojot vienkāršus metožu izsaukumus, piemēram:
Lai izveidotu šīs saskarnes, viss, kas mums jādara, ir paplašināt CrudRepository saskarni.
public interface DeveloperRepository extends CrudRepository { }
public interface SkillRepository extends CrudRepository { public List findByLabel(String label); }
Papildu metodes funkcionalitāte findByLabel “Šeit deklarēto JPA nodrošinās automātiski.
Tālāk mēs varam strādāt pie šīs lietojumprogrammas kontrollera. Kontrolieris kartēs pieprasījuma URI, lai skatītu veidnes un starplaikā veiktu visu nepieciešamo apstrādi.
@Controller public class DevelopersController { @Autowired DeveloperRepository repository; @Autowired SkillRepository skillRepository; @RequestMapping('/developer/{id}') public String developer(@PathVariable Long id, Model model) { model.addAttribute('developer', repository.findOne(id)); model.addAttribute('skills', skillRepository.findAll()); return 'developer'; } @RequestMapping(value='/developers',method=RequestMethod.GET) public String developersList(Model model) { model.addAttribute('developers', repository.findAll()); return 'developers'; } @RequestMapping(value='/developers',method=RequestMethod.POST) public String developersAdd(@RequestParam String email, @RequestParam String firstName, @RequestParam String lastName, Model model) { Developer newDeveloper = new Developer(); newDeveloper.setEmail(email); newDeveloper.setFirstName(firstName); newDeveloper.setLastName(lastName); repository.save(newDeveloper); model.addAttribute('developer', newDeveloper); model.addAttribute('skills', skillRepository.findAll()); return 'redirect:/developer/' + newDeveloper.getId(); } @RequestMapping(value='/developer/{id}/skills', method=RequestMethod.POST) public String developersAddSkill(@PathVariable Long id, @RequestParam Long skillId, Model model) { Skill skill = skillRepository.findOne(skillId); Developer developer = repository.findOne(id); if (developer != null) { if (!developer.hasSkill(skill)) { developer.getSkills().add(skill); } repository.save(developer); model.addAttribute('developer', repository.findOne(id)); model.addAttribute('skills', skillRepository.findAll()); return 'redirect:/developer/' + developer.getId(); } model.addAttribute('developers', repository.findAll()); return 'redirect:/developers'; } }
URI kartēšana uz metodēm tiek veikta, izmantojot vienkāršas “@RequestMapping” anotācijas. Šajā gadījumā katra kontroliera metode tiek kartēta ar URI.
Šo metožu modeļa parametrs ļauj datus nodot skatam. Būtībā šīs ir vienkāršas vērtību atslēgu kartes.
Katra kontroliera metode vai nu atgriež Thymeleaf veidnes nosaukumu, kas jāizmanto kā skatu, vai arī URL konkrētā shēmā (“redirect:”), uz kuru novirzīt. Piemēram, metodes “developer” un “_developersList_” atgriež veidnes nosaukumu, savukārt “developersAdd” un “developersAddSkill” atgriež URL, uz kuriem novirzīt.
Kontrolierī “@Autowired” anotācijas attiecīgajā laukā automātiski piešķir derīgu mūsu definētā repozitorija gadījumu. Tas ļauj piekļūt attiecīgajiem datiem kontrolierī, nenodarbojoties ar lielu katla koda daudzumu.
Visbeidzot, mums jānosaka dažas veidnes skatos, kas jāveido. Šim nolūkam mēs izmantojam vienkāršu veidņu motoru Thymeleaf. Modelis, ko izmantojām kontroliera metodēs, ir pieejams tieši veidnēs, t.i., kad mēs noslēdzam līgumu “ līgumu ”Modeļa atslēgu, mēs varēsim piekļūt nosaukuma laukam kā“ contract.name ”no veidnes.
Thymeleaf satur dažus īpašus elementus un atribūtus, kas kontrolē HTML ģenerēšanu. Viņi ir ļoti intuitīvi un vienkārši. Piemēram, lai span elementa saturu aizpildītu ar prasmes nosaukumu, viss, kas jums jādara, ir definēt šādu atribūtu (pieņemot, ka atslēga “ prasme Ir definēts modelī):
Līdzīgi iestatiet href Enkura elementa atribūts, īpašais atribūts “ th: href ' Var izmantot.
Mūsu lietojumprogrammā mums būs nepieciešamas divas vienkāršas veidnes. Skaidrības labad mēs šeit, iegultā veidnes kodā, izlaidīsim visus stila un klases atribūtus (proti, Bootstrap).
Developers database Name:
Email:
Skills:
- Skill
Spring satur sāknēšanas moduli. Tas ļauj mums viegli palaist serveri no komandrindas kā komandrindas Java lietojumprogrammas:
atšķirība starp s corp un ac corp
@SpringBootApplication public class Application implements CommandLineRunner { @Autowired DeveloperRepository developerRepository; @Autowired SkillRepository skillRepository; public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Tā kā mēs izmantojam atmiņā esošu datu bāzi, ir lietderīgi palaist datu bāzi ar dažiem iepriekš definētiem datiem. Tādā veidā mums būs vismaz daži dati datu bāzē, kad serveris darbojas un darbojas.
@Override public void run(String... args) throws Exception { Skill javascript = new Skill('javascript', 'Javascript language skill'); Skill ruby = new Skill('ruby', 'Ruby language skill'); Skill emberjs = new Skill('emberjs', 'Emberjs framework'); Skill angularjs = new Skill('angularjs', 'Angularjs framework'); skillRepository.save(javascript); skillRepository.save(ruby); skillRepository.save(emberjs); skillRepository.save(angularjs); List developers = new LinkedList(); developers.add(new Developer('John', 'Smith', ' [email protected] ', Arrays.asList(new Skill[] { javascript, ruby }))); developers.add(new Developer('Mark', 'Johnson', ' [email protected] ', Arrays.asList(new Skill[] { emberjs, ruby }))); developers.add(new Developer('Michael', 'Williams', ' [email protected] ', Arrays.asList(new Skill[] { angularjs, ruby }))); developers.add(new Developer('Fred', 'Miller', ' [email protected] ', Arrays.asList(new Skill[] { emberjs, angularjs, javascript }))); developers.add(new Developer('Bob', 'Brown', ' [email protected] ', Arrays.asList(new Skill[] { emberjs }))); developerRepository.save(developers); }
Pavasaris ir daudzpusīgs ietvars, kas ļauj veidot MVC lietojumprogrammas. Vienkāršas lietojumprogrammas izveide ar Spring ir ātra un pārskatāma. Lietojumprogrammu var viegli integrēt arī datu bāzē, izmantojot JPA.
Šī visa projekta pirmkods ir pieejams vietnē GitHub .