我对模式的概念很陌生。我正在练习我的依赖项注入技能以及使用DAO原理。我编写的代码可以工作,但是我觉得可以用更优雅的方式编写代码。我曾尝试将其重构为我看到的一种模式,但由于情况复杂,因此不确定是否可以正确实现它。通常,当Web应用程序与数据库进行通信并抛出结果时,应该如何构建其项目?
我听说过MVC原理,但这并不一定会将数据库添加到其中。
这是我到目前为止所拥有的:
在Controller
包中包含控制器的类:
@RestController
public class ResponseController {
@Autowired
MongoBase dbConnection;
@RequestMapping(value = "/jsonresult", method = RequestMethod.GET)
@ResponseBody
public String jsonresult(@RequestParam(value = "id", required = true) String id){
return dbConnection.documentToJSON(id, Constants.database,Constants.collection);
}
@RequestMapping(value = "/alljsonresult", method = RequestMethod.GET)
@ResponseBody
public String alljsonresult(){
return dbConnection.allDocumentToJSON(Constants.database,Constants.collection);
}}
一个包含
Database
包中数据库的CRUD方法的类:@Component
public class MongoBase {
@Autowired
MongoClient mongoClient;
public MongoBase() {
try {
mongoClient = new MongoClient("localhost", 27017);
} catch (Exception e) {
e.printStackTrace();
}
}
public void printAllCollection(String databaseName, String collectionName) {
...
}
那么,有没有更好的方法/更有效的书写方式呢?我也觉得我没有在
Monogbase
类中完全实现DI,因为它包含new
关键字。 最佳答案
如果您使用的是springboot,则不需要这种旧样式
也不需要自己创建mongoClient bean,spring boot可以帮助您
您只需要在application.properties文件中添加以下属性
#mongodb
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=app1
还可以在pom或gradle中声明spring-boot-starter-data-mongodb
这是使用MongoDB访问数据的一种非常酷的超棒依赖
您可以从这里阅读它[https://spring.io/guides/gs/accessing-data-mongodb/]
假设您有一个域
@Document(collection =“ domain”)
public class User {
@Id
private long id;
@Indexed(unique = true)
private String domain;
private boolean displayAds;
//getters and setters
}
现在,如果我们需要在该域上执行凝乳操作,扩展MongoRepository,您将自动具有CRUD功能。 Spring数据带有许多不可思议的findBy查询。有关详细信息,请查看Spring官方数据MongoDB –查询方法。
public interface UserRepository extends MongoRepository<User, Long> {
Domain findFirstByDomain(String domain);
Domain findByDomainAndDisplayAds(String domain, boolean displayAds);
//Supports native JSON query string
@Query("{domain:'?0'}")
Domain findCustomByDomain(String domain);
@Query("{domain: { $regex: ?0 } })")
List<Domain> findCustomByRegExDomain(String domain);
}
UserRepository扩展了MongoRepository接口,并插入了它可以使用的值和ID的类型:User和Long。该界面开箱即用,具有许多操作,包括标准的CRUD操作(创建读取更新更新删除)。
现在您可以轻松地在控制器中使用它
@RestController
public class ResponseController {
@Autowired
UserRepository userRepository;
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
User create(@RequestBody @Valid User user) {
return userRepository.create(user);
}
}
您也可以做很多事情。您只需要把它扔掉就可以了。
您也可以使用mongoTemplate执行查询
@Autowired
MongoTemplate mongoTemplate;