zoukankan      html  css  js  c++  java
  • 【入门】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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    电信生命周期说明
    find in linux 2 微信公众号
    GDB中应该知道的几个调试方法 2 微信公众号
    linux 下程序员专用搜索源码用来替代grep的软件ack(后来发现一个更快的: rg), 且有vim插件的 2 微信公众号
    linux下的 c 和 c++ 开发工具及linux内核开发工具 2 微信公众号
    linux下命令行发送邮件的软件:mutt 微信公众号
    腺样体肿大的综合治疗考虑 微信公众号
    打呼噜治疗方法 微信公众号
    vim 操作 2 微信公众号
    nginx之外的web 服务器caddy 微信公众号
  • 原文地址:https://www.cnblogs.com/telwanggs/p/10779893.html
Copyright © 2011-2022 走看看