【问题标题】:How to connect Spring with MySQL database?如何将 Spring 与 MySQL 数据库连接起来?
【发布时间】:2015-06-18 15:12:10
【问题描述】:

我有一个基于this guide 的简单项目。我创建了一个简单的 REST 接口,我希望它使用我的数据库。我将 Hibernate 添加到依赖项并创建了 DAO 类。我正在为 IDE 使用 Spring Tool-Suite。据我了解,我应该添加一些 bean 来告诉类使用什么,但我不明白如何。这是我的课程。

Application.java

package com.learnspring.projectfirst;

@SpringBootApplication
public class Application {

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

Marker.java

package com.learnspring.projectfirst;

@Entity
public class Marker {

    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    @Column
    private double longitude;
    @Column
    private double latitude;

    @Column
    private String address;

    public Marker() {
        // Empty constructor
    }

    public Marker(long id, double longitude, double latitude, String address) {
        this.id = id;
        this.longitude = longitude;
        this.latitude = latitude;
        this.address = address;
    }

    //Getters and Setters
}

MarkerController.java

package com.learnspring.projectfirst.controller;

@Controller
public class MarkerController {
    private Logger logger = Logger.getLogger(MarkerController.class.getName());
    @Autowired
    private MarkerServiceImplementation markerService;

    @RequestMapping(value="/markers", method=RequestMethod.GET)
    public @ResponseBody List<Marker> getMarkers(@RequestParam(value="city", defaultValue="") String city) {
        return this.markerService.getAllMarkers();
    }

    @RequestMapping(value="/markers/new", method=RequestMethod.POST)
    public @ResponseBody Marker addMarker(@RequestBody Marker marker) {
        this.markerService.addMarker(marker);
        return marker;
    }

}

MarkerDaoImplementation.java

package com.learnspring.projectfirst.dao;

@Repository
public class MarkerDaoImplementation implements MarkerDaoInterface {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void addMarker(Marker marker) {
        this.sessionFactory.getCurrentSession().save(marker);
    }

    @Override
    public void deleteMarker(int markerId) {
        this.sessionFactory.getCurrentSession().delete(this.getMarker(markerId));
    }

    @Override
    public Marker getMarker(int markerId) {
        return (Marker) this.sessionFactory.getCurrentSession().get(Marker.class, markerId);
    }

    @Override
    public List<Marker> getAllMarkers() {
        return this.sessionFactory.getCurrentSession().createQuery("from Marker").list();
    }

}

MarkerServiceImplementation.java

package com.learnspring.projectfirst.service;

@Service
public class MarkerServiceImplementation implements MarkerServiceInterface {
    @Autowired
    private MarkerDaoImplementation markerDao;

    @Transactional
    public void addMarker(Marker marker) {
        this.markerDao.addMarker(marker);
    }

    @Transactional
    public void deleteMarker(int markerId) {
        this.markerDao.deleteMarker(markerId);
    }

    @Transactional
    public Marker getMarker(int markerId) {
        return this.markerDao.getMarker(markerId);
    }

    @Transactional
    public List<Marker> getAllMarkers() {
        return this.markerDao.getAllMarkers();
    }
}

这是文件结构:

我知道我应该告诉我的程序数据库名称和使用 bean 的列,但我不明白如何。如何将 java 代码链接到 bean?抱歉,我粘贴了这么多代码,我只是想确保您拥有所需的一切。提前谢谢!

【问题讨论】:

标签: java spring hibernate spring-mvc


【解决方案1】:

【讨论】:

  • 在本例中,bean 是通过 java 添加的。我理解对了吗?
【解决方案2】:

“标记”类中的注释确定 MySQL 表和列名(基于类和类变量名)。表名将是“marker”,列有“id”、“longitude”、“latitude”、“address”。

您忘记了代码中最重要的部分:弹簧配置。它决定了 SessionFactory 实例在注入 DAO 类之前如何初始化。在这里,您必须设置与 MySQL 服务器的适当连接(例如,通过 JNDI 资源)

【讨论】:

  • 是的,我知道 Marker 类中的注释。我应该在哪里添加 spring 配置,我应该做一些具体的事情来告诉我的程序使用它吗?
  • 有几种替代方案(XML 或 java 配置)。我不知道 spring boot 配置,但我想你可以使用注释(@Configuration)
【解决方案3】:

这是你需要的:Spring Boot with MySQL

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多