【入門】Spring-Boot項目配置Mysql數據庫


前言

    前面參照SpringBoot官網,自動生成了簡單項目點擊打開鏈接

配置數據庫和代碼遇到的問題

    問題1:cannot load driver class :com.mysql.jdbc.Driver不能加載mysql

    原因:沒有添加依賴

    解決:pom.xml添加依賴

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
    問題2:Consider defining a bean of type 'com.xx.dao.XxDao' in your configuration.注入UserDao失敗

    原因:UserDao沒有添加注解

    解決:在接口UserDao外層加上注解:@Mapper

    問題3:controller中注入service失敗

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.boot.service.DemoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    原因:application.java文件默認掃描相同包名下的service,dao。

    解決:application.java文件添加注解:@ComponentScan(basePackages = "com.xxx")

配置Mysql數據庫

在pom.xml添加依賴

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.2.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
在application.properties添加

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/girls
spring.datasource.username=root
spring.datasource.password=chendashan
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

server.port=8080
server.session.timeout=10
server.tomcat.uri-encoding=UTF-8


mybatis.configLocations= classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/*.xml
    建立庫表省略,文章末尾附帶

mapper文件

    操作數據庫,靠它完成。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace用於綁定Dao接口 -->
<mapper namespace="com.housekeeper.dao.UserDao">
<!-- 用用查詢映射結果 -->
<resultMap id="BaseResultMap" type="com.housekeeper.model.User" >
<!-- column代表數據庫列名,property代表實體類屬性名 -->
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="user_password" property="userPassword"/>
</resultMap>
<!-- 查詢名字記錄sql -->
<select id="selectUserByUserName" parameterType="String" resultMap="BaseResultMap">
SELECT * FROM girls_info WHERE user_name = #{userName}
</select>
</mapper>
    綜上得知,UserDao通過映射文件mapper,執行了sql語句,返回了實體類User

UserDao接口

@Mapper
public interface UserDao {
/**
* 根據user_name查詢數據庫
* (映射執行mapper文件中的sql語句selectUserByUserName)
* @param userName 名字
* @return User
*/
public User selectUserByUserName(String userName);
}
User實體類

public class User {
private String userName;
private String userPassword;

public String getUserName() {
return userName;
}

public void setName(String userName) {
this.userName = userName;
}

public String getUserPassword() {
return userPassword;
}

public void setPassword(String userPassword) {
this.userPassword = userPassword;
}

}
邏輯結構

邏輯層在controller里處理,已知,執行Userdao的接口方法,即可操作數據庫。為了更好處理邏輯分層,加入Service層,調用UserDao。在Service實現層,注入UserDao即可調用其方法。

@Service
public class UserServiceImp implements UserService {

@Autowired
private UserDao userDao;//注入UserDao

@Override
public User selectUserByName(String userName) {
return userDao.selectUserByUserName(userName);
}

}
public interface UserService {
/**
* 通過姓名查找User
* @param userName
* @return
*/
User selectUserByName(String useName);
}
controller

    最后,controller層對外提供接口,返回查詢數據結果

@Controller
public class UserController {

@Autowired
private UserService userService;//注入Service

@ResponseBody
@RequestMapping(value = "/login", method = RequestMethod.POST)
public Map<String, Object> login(@RequestParam(value = "userName", required = true) String userName,
@RequestParam(value = "userPassword", required = true) String userPassword) {
Map<String,Object> result = new HashMap<String, Object>();
User user = null;
String retCode = "";
String retMsg = "";
if(StringUtils.isEmpty(userName) || StringUtils.isEmpty(userPassword)){
retCode = "01";
retMsg = "用戶名和密碼不能為空";
}else{
user = userService.selectUserByName(userName);
if(null == user){
retCode = "01";
retMsg = "用戶不存在";
}else{
if(userPassword.equals(user.getUserPassword())){
retCode = "00";
retMsg = "登錄成功";
}else{
retCode = "01";
retMsg = "密碼有誤";
}
}
}
result.put(SystemConst.retCode, retCode);
result.put(SystemConst.retMsg, retMsg);
return result;
}

}
girls.sql文件

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `girls_info`
-- ----------------------------
DROP TABLE IF EXISTS `girls_info`;
CREATE TABLE `girls_info` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(30) NOT NULL,
`user_password` varchar(10) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of girls_info
-- ----------------------------
INSERT INTO `girls_info` VALUES ('1', '張帆', '123456');
INSERT INTO `girls_info` VALUES ('2', '李北', '123456');
INSERT INTO `girls_info` VALUES ('3', '陳珊珊', '123456');
INSERT INTO `girls_info` VALUES ('4', '王國立', '123456');
INSERT INTO `girls_info` VALUES ('5', '張三', '123456');
INSERT INTO `girls_info` VALUES ('6', '李四', '123456');
INSERT INTO `girls_info` VALUES ('7', 'Biligle', '123456');
下載地址:https://download.csdn.net/download/qq_29266921/10457479
---------------------
作者:Biligle
來源:CSDN
原文:https://blog.csdn.net/qq_29266921/article/details/80513146
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM