Spring Boot a beany i Hibernate

0

Zacząłem robić aplikację w Spring Boot i napotkałem na problem. Otóż jak tutaj zrobić @Autowired do serwisu i jak wykonać zapytanie. Poprzednio bez Spring Boot'a wyglądało to tak:

  1. w web.xml miałem
<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/webcontext/DispatcherServlet-context.xml</param-value>
		</init-param>
	</servlet>
  1. DispatcherServlet-context.xml miał beana do wstrzykiwania articleDao z SessionFactory w konstruktorze oraz parametry dostępu do bazy:
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_blog"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
    </bean>

    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    </bean>

    <tx:annotation-driven/>
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="articleDao" class="a.b.c.dao.impl.ArticleDaoImpl">
        <constructor-arg>
            <ref bean="sessionFactory"/>
        </constructor-arg>
    </bean>
  1. ArticleDaoImpl miało wstrzyknięte SessionFactory i już mogłem wykonywać zapytania do bazy.

Tutaj w Spring Boot nie wiem jak to zrobić. Mam src/main/resources/application.properties z spring.datasource.* i spring.jpa.* czyli tutaj zamiast tego xmla jak wcześniej.
Gdzie zrobić beana articleDao i jak wstrzyknąć SessionFactory?

0

Tak na szybko z głowy, to do dao wstrzykujesz EntityManager'a:

@PersistenceContext
private EntityManager entityManager;
 
public EntityManager getEntityManager() {
return entityManager;
}
//...

public void insert(Person person) {
entityManager.persist(person);
}
0

Dokładnie, w ten sposób działa! :)

Jeszcze pytanko, czy to dobry sposób na stworzenia beana?

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public ProjectDaoImpl projectDao(){
        return new ProjectDaoImpl();
    }

}
0

Ja bym zrobił to tak:
Application tylko ten main, a Dao do osobnej klasy:

@Repository(DefaultMyDao.BEAN_NAME)
public class DefaultMyDao implements MyDao{

    public static final String BEAN_NAME = "myDao";
  ///...


    }
0

Generalnie, jeśli używasz Adnotacji, to nie musisz już używać @Bean, tylko tworzysz klasy i w nich umieszczasz Adnotacje np. @Component

1 użytkowników online, w tym zalogowanych: 0, gości: 1