日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring MVC + Hibernate + Maven:CRUD操作示例

發(fā)布時間:2023/12/3 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring MVC + Hibernate + Maven:CRUD操作示例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在本文中,我想研究一個Spring MVC + Hibernate + Maven用法的示例。 這套技術暗含領域領域的基礎知識。 因此,我將嘗試詳細解釋所有重要時刻。 其他沒有主題的內容將提供指向更多詳細信息源的鏈接。 在文章的結尾,我將發(fā)布GitHub的鏈接。

目標

基于Spring MVC,Hibernate,Maven創(chuàng)建示例Web應用程序。 界面將基于HTML。 該應用程序將支持所有CRUD操作:創(chuàng)建,讀取,更新,刪除 。 通常,我將使用MySQL作為數(shù)據(jù)庫。 的
該應用程序將與足球俱樂部實體一起使用,因此請準備好將本教程應用于運動方向。

準備工作

我將在數(shù)據(jù)庫中需要一個表,下面是創(chuàng)建它的代碼:

CREATE TABLE `teams` (`id` int(6) NOT NULL AUTO_INCREMENT,`name` varchar(40) NOT NULL,`rating` int(6) NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

該表將在應用程序中以類表示:

@Entity @Table(name="teams") public class Team {@Id@GeneratedValueprivate Integer id;private String name;private Integer rating;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getRating() {return rating;}public void setRating(Integer rating) {this.rating = rating;}}

然后,我需要在IDE中創(chuàng)建一個新的Maven Web項目(我使用Eclipse)。 我將省略創(chuàng)建的詳細信息,您可以在我的一篇有關Maven Web Project創(chuàng)建的文章中閱讀有關此內容的信息 。 這是pom.xml文件的鏈接。 第一個重要的停止點是WebAppConfig.java文件,因此讓我們考慮一下:

@Configuration @ComponentScan("com.sprhib") @EnableWebMvc @EnableTransactionManagement @PropertySource("classpath:application.properties") public class WebAppConfig {private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";private static final String PROPERTY_NAME_DATABASE_URL = "db.url";private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";@Resourceprivate Environment env;@Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));return dataSource;}@Beanpublic LocalSessionFactoryBean sessionFactory() {LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource());sessionFactoryBean.setPackagesToScan(env.getRequiredProperty( PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));sessionFactoryBean.setHibernateProperties(hibProperties());return sessionFactoryBean;}private Properties hibProperties() {Properties properties = new Properties();properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));return properties; }@Beanpublic HibernateTransactionManager transactionManager() {HibernateTransactionManager transactionManager = new HibernateTransactionManager();transactionManager.setSessionFactory(sessionFactory().getObject());return transactionManager;}@Beanpublic UrlBasedViewResolver setupViewResolver() {UrlBasedViewResolver resolver = new UrlBasedViewResolver();resolver.setPrefix("/WEB-INF/pages/");resolver.setSuffix(".jsp");resolver.setViewClass(JstlView.class);return resolver;}}

在文件的開頭,您可以看到@EnableTransactionManagement,它啟用了Spring的注釋驅動的事務管理功能。 注釋@PropertySource(“ classpath:application.properties”)–插入位于資源文件夾中的屬性文件。 請注意以下三個bean:transactionManager,sessionFactory和dataSource。 這些bean提供事務管理。 有關更多信息,請閱讀我有關Hibernate功能的文章。

#DB properties: db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/hibnatedb db.username=hibuser db.password=root#Hibernate Configuration: hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect hibernate.show_sql=true entitymanager.packages.to.scan=com.sprhib.model

多數(shù)民眾贊成在所有與項目準備有關。 此外,我將向您展示DAO和服務層。

DAO和服務層

這是DAO和服務的接口和實現(xiàn):

public interface TeamDAO {public void addTeam(Team team);public void updateTeam(Team team);public Team getTeam(int id);public void deleteTeam(int id);public ListgetTeams();}

DAO接口的實現(xiàn):

@Repository public class TeamDAOImpl implements TeamDAO {@Autowiredprivate SessionFactory sessionFactory;private Session getCurrentSession() {return sessionFactory.getCurrentSession();}public void addTeam(Team team) {getCurrentSession().save(team);}public void updateTeam(Team team) {Team teamToUpdate = getTeam(team.getId());teamToUpdate.setName(team.getName());teamToUpdate.setRating(team.getRating());getCurrentSession().update(teamToUpdate);}public Team getTeam(int id) {Team team = (Team) getCurrentSession().get(Team.class, id);return team;}public void deleteTeam(int id) {Team team = getTeam(id);if (team != null)getCurrentSession().delete(team);}@SuppressWarnings("unchecked")public ListgetTeams() {return getCurrentSession().createQuery("from Team").list();}}

注釋@Repository指示帶注釋的類是“ DAO”。

public interface TeamService {public void addTeam(Team team);public void updateTeam(Team team);public Team getTeam(int id);public void deleteTeam(int id);public ListgetTeams();}

服務接口的實現(xiàn):

@Service @Transactional public class TeamServiceImpl implements TeamService {@Autowiredprivate TeamDAO teamDAO;public void addTeam(Team team) {teamDAO.addTeam(team); }public void updateTeam(Team team) {teamDAO.updateTeam(team);}public Team getTeam(int id) {return teamDAO.getTeam(id);}public void deleteTeam(int id) {teamDAO.deleteTeam(id);}public ListgetTeams() {return teamDAO.getTeams();}}

注釋@Service表示帶注釋的類是“服務”。 注釋@Transactional描述方法或類上的事務屬性。

控制器和JSP

由于我將介紹所有CRUD操作,因此本章將有些長。 我將從基本控制器開始,它可用于主頁:

@Controller public class LinkController {@RequestMapping(value="/")public ModelAndView mainPage() {return new ModelAndView("home");}@RequestMapping(value="/index")public ModelAndView indexPage() {return new ModelAndView("home");}}

這很簡單,這里是其JSP文件:

... <h1>Home page</h1> <p> ${message}<br> <a href="${pageContext.request.contextPath}/team/add.html">Add new team</a><br> <a href="${pageContext.request.contextPath}/team/list.html">Team list</a><br> </p> ...

這是一個怪物級的應用程序的主控制器:

@Controller public class TeamController {@Autowiredprivate TeamService teamService;@RequestMapping(value="/team/add")public ModelAndView addTeamPage() {ModelAndView modelAndView = new ModelAndView("add-team-form");modelAndView.addObject("team", new Team());return modelAndView;}@RequestMapping(value="/team/add/process")public ModelAndView addingTeam(@ModelAttribute Team team) {ModelAndView modelAndView = new ModelAndView("home");teamService.addTeam(team);String message = "Team was successfully added.";modelAndView.addObject("message", message);return modelAndView;}@RequestMapping(value="/team/list")public ModelAndView listOfTeams() {ModelAndView modelAndView = new ModelAndView("list-of-teams");Listteams = teamService.getTeams();modelAndView.addObject("teams", teams);return modelAndView;}@RequestMapping(value="/team/edit/{id}", method=RequestMethod.GET)public ModelAndView editTeamPage(@PathVariable Integer id) {ModelAndView modelAndView = new ModelAndView("edit-team-form");Team team = teamService.getTeam(id);modelAndView.addObject("team",team);return modelAndView;}@RequestMapping(value="/team/edit/{id}", method=RequestMethod.POST)public ModelAndView edditingTeam(@ModelAttribute Team team, @PathVariable Integer id) {ModelAndView modelAndView = new ModelAndView("home");teamService.updateTeam(team);String message = "Team was successfully edited.";modelAndView.addObject("message", message);return modelAndView;}@RequestMapping(value="/team/delete/{id}", method=RequestMethod.GET)public ModelAndView deleteTeam(@PathVariable Integer id) {ModelAndView modelAndView = new ModelAndView("home");teamService.deleteTeam(id);String message = "Team was successfully deleted.";modelAndView.addObject("message", message);return modelAndView;}}

幾乎所有方法和請求映射都是清楚的。 但我想強調指出, editTeamPage()和edditingTeam()方法的@RequestMapping包含方法屬性的不同值。 現(xiàn)在是時候查看這些映射的JSP了:

“添加新團隊”頁面:

... <h1>Add team page</h1> <p>Here you can add a new team.</p> <form:form method="POST" commandname="team" action="${pageContext.request.contextPath}/team/add/process.html"> <table> <tbody><tr><td>Name:</td><td><form:input path="name"></form:input></td></tr><tr><td>Rating:</td><td><form:input path="rating"></form:input></td></tr><tr><td><input value="Add" type="submit"></td><td></td></tr> </tbody> </table> </form:form><p><a href="${pageContext.request.contextPath}/index.html">Home page</a></p> ...

“球隊名單”頁面:

... <h1>List of teams</h1> <p>Here you can see the list of the teams, edit them, remove or update.</p> <c:foreach var="team" items="${teams}"> </c:foreach><table border="1px" cellpadding="0" cellspacing="0"> <thead> <tr> <th width="10%">id</th><th width="15%">name</th><th width="10%">rating</th><th width="10%">actions</th> </tr> </thead> <tbody> <tr><td>${team.id}</td><td>${team.name}</td><td>${team.rating}</td><td><a href="${pageContext.request.contextPath}/team/edit/${team.id}.html">Edit</a><br><a href="${pageContext.request.contextPath}/team/delete/${team.id}.html">Delete</a><br></td> </tr></tbody> </table><p><a href="${pageContext.request.contextPath}/index.html">Home page</a></p> ...

“編輯團隊”頁面:

... <h1>Edit team page</h1> <p>Here you can edit the existing team.</p> <p>${message}</p> <form:form method="POST" commandname="team" action="${pageContext.request.contextPath}/team/edit/${team.id}.html"> <table> <tbody><tr><td>Name:</td><td><form:input path="name"></form:input></td></tr><tr><td>Rating:</td><td><form:input path="rating"></form:input></td></tr><tr><td><input value="Edit" type="submit"></td><td></td></tr> </tbody> </table> </form:form><p><a href="${pageContext.request.contextPath}/index.html">Home page</a></p> ...

以及“團隊名單”頁面的屏幕截圖:

摘要

集成多種技術通常不是一件容易的事,因此要耐心地取得成功。 帖子中沒有很多資源,因此您可以訪問我的GitHub來探索您感興趣的類。

參考: Spring MVC + Hibernate + Maven:來自Fruzenshtein的便箋博客的JCG合作伙伴 Alexey Zvolinskiy的CRUD操作示例 。

翻譯自: https://www.javacodegeeks.com/2013/04/spring-mvc-hibernate-maven-crud-operations-example.html

總結

以上是生活随笔為你收集整理的Spring MVC + Hibernate + Maven:CRUD操作示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。