2014-12-03 164 views
0

我需要一些幫助來了解spring mvc中發生了什麼!比方說,我有一個顯示書籍的一個項目,我有:Spring mvc jdbc和hibernate

數據庫(MySQL的)的書籍,像這樣:

INSERT INTO books (title, author) VALUES ('Some book', 'this author') 

的書籍也有一個自動遞增的ID(book_id)

在我們的項目,我們有一個書類:

@Entity 
@Table 
public class Books { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column 
private int book_id; 
private String title; 
private String author; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column 
public int getBook_id() { 
    return book_id; 
} 

public void setBook_id(int book_id) { 
    this.book_id = book_id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getAuthor() { 
    return author; 
} 

public void setAuthor(String author) { 
    this.author = author; 
} 

我們有一個DAO

@Repository 
public interface bookDao { 
public List<Book> BookList(); 
} 

而一個DaoImplementation

@Controller 
@Transactional 
public class BookDAOImpl implements BookDao { 

@Inject 
private SessionFactory sessionFactory; 

private Session getSession(){ 
    return sessionFactory.getCurrentSession(); 
} 

@Override 
public List<Book> bookList(){ 
    return getSession().createQuery("from Book").list(); 
} 

該處

@Service 
@Transactional 
public class BookService { 

@Autowired 
private BookDao bookDao; 

public List<Book> list(){ 
    return bookDao.bookList(); 
} 

和控制器

@Controller 
@RequestMapping("/") 
public class HelloController { 

@Autowired 
BookService bookService; 

@RequestMapping(value="/menu",method = RequestMethod.GET) 
public String printMenu(){ 
    return "menu"; 
} 

@RequestMapping(value="/list", method = RequestMethod.GET) 
public void list (Model model){ 
    List<Book> books = bookService.list(); 
    model.addAttribute("books", books); 
} 
} 

最後,所述MVC-調度

<context:component-scan base-package="package"/> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/pages/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

<util:properties id="hibernateProperties"> 
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
    <prop key="hibernate.show_sql">false</prop> 
</util:properties> 

<bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" 
     p:driverClassName="com.mysql.jdbc.Driver" 
     p:url="URL" 
     p:username="USERNAME" 
     p:password="PASSWORD"/> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
     p:dataSource-ref="dataSource" 
     p:packagesToScan="package" 
     p:hibernateProperties-ref="hibernateProperties"/> 

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
     p:sessionFactory-ref="sessionFactory"/> 

我們還有.jsp頁面/菜單和/列表

當我進入本地主機:端口時,我將直接進入/菜單頁面,當我按下/ list時,出現什麼情況,它工作嗎?我希望有人能夠解釋這個過程,我很難理解'豆子'和'自動裝配',所以如果你知道,請分享!

和web.xml按請求!

<display-name>Spring MVC Application</display-name> 

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
+0

你忘了web.xml,從這裏開始。 – Jimmy 2014-12-03 17:34:01

+0

我添加了web.xml,如果你想看看 – user3486059 2014-12-03 18:04:02

回答

1

很容易做到,但是這是你問,所以讀一個很好的教程或彈簧本書將是你的一部分所需的努力春節基本...

Spring MVC是建立在Servlet技術的頂端。 DispatcherServlet是您處理Spring時最重要的切入點。它負責或接受和分發您的請求到您的Spring Web應用程序中。

DispatcherServlet(該配置通常在web.xml)收到您的請求HelloController。請注意,您如何在方法上方有@RequestMapping("/")。這指向您的Web應用程序的根上下文路徑。因此,擊中localhost:port會將請求路由到此特定Controller(通過DispatcherServlet)。

同樣,通過指向/list,您的請求將被路由到該特定的方法。

@Autowired是一個註釋,它告訴Spring容器初始化該特定的bean(POJO),解析依賴關係,然後將其提供/注入資源以供使用。這稱爲依賴注入或DI,如果你使用Spring,你應該知道它是什麼以及我們爲什麼使用它。

您調用mvc-dispatcher的文件是如何配置容器或上下文的Spring。一個bean是一個簡單的類,在定義的時候它將被Spring容器管理。通過管理我的意思是:初始化,解決依賴關係,並在需要時注入。

我可以永遠繼續下去,但這應該讓你開始...

+0

是的,這是很多的幫助,ty!但是,我注意到了各處的教程,他們在課堂上和各處都寫下了他們的「豆子」。但如果你有@inject,你不需要那樣做,對吧? – user3486059 2014-12-03 18:02:04

+0

所以,當我訪問/列出我的請求去調度員,這反過來將它發送到控制器與正確的RequestMapping,從那裏進入服務,這是與DAO Autowired,DAO創建查詢,獲取書籍,將它們添加到列表中? – user3486059 2014-12-03 18:37:50

+0

該服務注入您的控制器。你不要去服務本身。你在你的控制器中使用它。 「@Inject」和「@Autowired」是相似的,「@Inject」是與CDI(Context and Dependency Injection)規範相關的Java註釋,「@Autowired」是Spring框架的一部分。 – Mechkov 2014-12-03 18:45:28