由于要使用SpringBoot连接MongoDB,网上找了很多的资料都是看的很头疼,不太完整,最后终于参考最下面那篇博客成功连接MongoDB与springBoot.
1.创建一个SpringBoot,勾选MongoDB,如果不勾选导入MongoDB 的依赖也行,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.在application.properties里边添加数据库连接,对号入座,直接中文,例子就不给了
spring.data.mongodb.uri=mongodb://用户名:密码@地址:端口/数据库
3.写模板类
写一个模板类 UserInfo
为了节省空间.,本文用/**/代替get、set方法。
public class UserInfo implements Serializable {
private Long id;
private String userName;
private String password;
/*set() 、get()、toString()*/
}
4.写业务类的接口
再写一个业务类的接口UserInfoManager
public interface UserInfoManager {
/** 增 */
/**
* 增加对象
*/
public void insertUser(UserInfo user);
/** 删 */
/**
* 根据id删除对象
*/
public void deleteUserById(Long id);
/** 改 */
/**
* 异步 - 更新缓存(单个)
*/
public void refreshCache(UserInfo user);
/** 查 */
/**
* 根据userName查询对象
*/
public UserInfo findUserByUserName(String userName);
public List<UserInfo> findUsersByUserName(String userName);
/**
* 根据id查询对象
*/
public UserInfo findUserById(Long id);
/**
* 找出所有 对象
*/
public List<UserInfo> findAll();
}
5.业务类的实现
业务类的实现UserInfoManagerImp
@Service("UserInfoManager")
public class UserInfoManagerImp implements UserInfoManager{
protected static final Logger logger = LoggerFactory.getLogger(UserInfoManagerImp.class);
@Resource(name = "mongoTemplate")
private MongoOperations mongoOperation;
@Autowired
private MongoTemplate mongoTemplate;
/**
* 获取mongoDB连接
*
* @param collectionName 连接名称
* @return
*/
@SuppressWarnings("unused")
private DBCollection getCollection(String collectionName) {
DBCollection dc = (DBCollection) mongoOperation.getCollection(collectionName);
return dc;
}
/** 增 */
@Override
public void insertUser( UserInfo user) {
mongoOperation.insert(user);
}
/** 删 */
//根据Id删除数据
@Override
public void deleteUserById(Long id) {
Query query = new Query(Criteria.where("_id").is(id));
mongoOperation.remove(query, "userInfo");
}
/** 改 */
@Override
public void refreshCache(UserInfo user) {
if (null == user || user.getId() == null) {
return;
}
mongoOperation.save(user);
}
/** 查 */
@Override
public UserInfo findUserByUserName(String userName) {
Query query = new Query(Criteria.where("userName").is(userName));
return mongoOperation.findOne(query, UserInfo.class);
}
@Override
public List<UserInfo> findUsersByUserName(String userName) {
Query query = new Query(Criteria.where("userName").is(userName));
return mongoOperation.find(query, UserInfo.class);
}
@Override
public UserInfo findUserById(Long id) {
Query query = new Query(Criteria.where("id").is(id));
return mongoOperation.findOne(query, UserInfo.class);
}
@Override
public List<UserInfo> findAll() {
return mongoOperation.findAll(UserInfo.class, "test_promotion");
}
}
6.写测试类
最后写测试类UserInfoManagerTest
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserInfoManagerTest {
private static final Logger LOGGER = LoggerFactory.getLogger(UserInfoManagerTest.class);
@Autowired
private UserInfoManager mongoDBManager;
/** 增 */
@Test
public void testInsertUser(){
UserInfo user = new UserInfo();
user.setId(7L);
user.setUserName("路人甲");
user.setPassword("123456");
LOGGER.info("-------------------- 增加数据开始 --------------------");
mongoDBManager.insertUser(user);
LOGGER.info("-------------------- 增加数据结束 --------------------");
}
/** 删 */
@Test
public void testDeleteUserById() {
LOGGER.info("-------------------- 删除数据开始 --------------------");
mongoDBManager.deleteUserById(2L);
LOGGER.info("-------------------- 删除数据结束 --------------------");
}
/** 改 */
@Test
public void testUpdateUser() {
LOGGER.info("-------------------- 改写数据开始 --------------------");
UserInfo user = new UserInfo();
user.setId(6L);
user.setUserName("lisi");
user.setPassword("lisi");
mongoDBManager.refreshCache(user);
LOGGER.info("-------------------- 改写数据开始 --------------------");
}
/** 查 */
@Test
public void testFindAll() {
LOGGER.info("-------------------- 查找所有数据开始 --------------------");
List<UserInfo> list = mongoDBManager.findAll();
for(UserInfo user:list) {
LOGGER.info("useid:" + user.getId()
+ ",userName:" + user.getUserName() + ",password:" + user.getPassword());
}
LOGGER.info("-------------------- 查找所有数据结束 --------------------");
}
@Test
public void testFindUserByUserName() {
LOGGER.info("-------------------- 查找数据开始 --------------------");
List<UserInfo> list = mongoDBManager.findUsersByUserName("lisi");
for(UserInfo user:list) {
LOGGER.info("useid:" + user.getId()
+ ",userName:" + user.getUserName() + ",password:" + user.getPassword());
}
LOGGER.info("-------------------- 查找数据结束 --------------------");
}
@Test
public void testFindUserById() {
LOGGER.info("-------------------- 查找数据开始 --------------------");
UserInfo userInfo = mongoDBManager.findUserById(2L);
LOGGER.info("useid:" + userInfo.getId()
+ ",userName:" + userInfo.getUserName() + ",password:" + userInfo.getPassword());
LOGGER.info("-------------------- 查找数据结束 --------------------");
}
}
测试可以通过,注意:
数据库里边没有内容的时候查找会出现错误,是因为没有数据,还有查找的时候需要自己添加数据库的连接名,自行理解。