SpringBoot-MySQL(查询)


  • 数据的传输

http请求(由用户输入)---- 由controller接收获得的数据 ---- 由mapper对数据库执行操作 ------到达sql

同时也包含了entity层,存放实体类,实现了set和get方法,与数据库的属性基本保持一致

包中包含了entity(实体类),controller,mapper

 

  • 增加依赖

添加了两个依赖库,分别为MySQL和Mybatis

某些依赖需要进行配置,否则会运行报错

        <!--MySQL-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
  • 配置

对spring,需要设置该服务应用的名称

spring.application.name = server-mybatis

对sever,需要设置通信的端口

server.port = 8080

对Mabatis依赖,需要设置通信的网址,用户名,密码

设置MySQL的请求网址

spring.datasourse.url= jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

格式为idbc:mysql://服务器名:端口号/数据库名?参数1&参数2

此处的数据库名指的是use database中的database

建议加上如下参数避免时区错误

serverTimezone=Asia/Shanghai&allowMultiQueries=true

 

user 数据库用户名(用于连接数据库)   所有版本
password 用户密码(用于连接数据库)   所有版本
useUnicode 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true false 1.1g
characterEncoding 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk false 1.1g
autoReconnect 当数据库连接异常中断时,是否自动重新连接? false 1.1
autoReconnectForPools 是否使用针对数据库连接池的重连策略 false 3.1.3
failOverReadOnly 自动重连成功后,连接是否设置为只读? true 3.0.12

也可以设置用户名和密码

spring.datasourse,username = root
spring.datasourse,password = ******

指定Mybatis对应实体类的包名(mapper),主要是进行映射

mybatis.typeAliasesPackage = com.Lee.connect.mapper
  •  controller
package com.Lee.connect.controller;

import com.Lee.connect.mapper.UserMapper;
import com.Lee.connect.table.TableUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "/")
public class UserController{
    @Autowired
    UserMapper userMapper;
    @RequestMapping(value = "/getUser")
    @ResponseBody
    public Object getUser(){
        TableUser user = userMapper.getUserById(2);
        return user;
    }
}

@Controller表示当前类为一个控制器,加载在类上

@RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,其被加载在了当前方法上(也可以加载在类上)

拥有参数

value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method: 指定请求的method类型, GET、POST、PUT、DELETE等

@Controller
@RequestMapping(value = "/", method = RequestMethod.GET)
public class ContactController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String redirectToContactPage() {
        return  "redirect:contact";
    }

    @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public String toAdminPage() {
        return "admin";
    }

    @RequestMapping(value = "/contact", method = RequestMethod.GET)
    public String toContactForOhersPage() {
        return "contact";
    }
}

在上面的例子中,@RequestMapping加在了类和方法上

访问/的请求会被ContactControllerredirectToContactPage()方法处理(加载在类上)

访问/admin的请求会被ContactControllertoAdminPage()方法处理(加载在类的方法上)

其指定了不同请求对应要调用的方法

@ResponseBody加载在类的方法上,将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

@Autowired,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作

此处将mapper中的类方法重新定义了一个新的对象,用于后续在方法中调用(使用了mapper中定义的getuserbyid方法)

controller由以下结构组成

(头部两个注解)

定义@Controller

定义@RequestMapping

(一个类)

使用@Autowired将mapper类对象进行转换(此处就将controller和mapper连接起来)

加载@ResponseBody和@RequestMapping到方法中(此处就将controller和http请求连接起来)

方法中使用刚刚的转换中的mapper对象(实际上就是一个接口)中方法获得一个结果,将结果赋值给一个object(实际上是entity类对应的实例对象,此处就将controllrt和entity连接了起来)并进行返回

  • mapper
package com.Lee.connect.mapper;

import com.Lee.connect.table.TableUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

@Mapper
@Component(value = "UserMapper")
public interface UserMapper {

    @Select("select * from t1 where id=#{id};")
    TableUser getUserById(@Param("id") Integer id);
    
}

mapper实际上是一个接口,controller通过继承这个接口来获得mapper中的方法进行使用

(接口只定义方法)

@Mapper定义该类是一个映射类

@component ,当类不属于各种归类的时候(不属于@Controller、@Services等的时候),可以使用@Component来标注这个类

使用value参数,参数名为当前类名,只有使用这种方式,当前的类才会被划入spring的容器中去

(使用@component才能对该类使用@Autowired)

@Select(“    ”),其内加上sql语句即可,其可以加载到方法上

此处为sql中的select关键字,同时当然也有@Delete,@Update,@Insert等等

@Param主要用于传递参数

在方法参数的前面写上@Param("参数名"),表示给参数命名,名称就是括号中的内容

例如public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id);

给参数 String name 命名为aaaa,然后sql语句....where  s_name= #{aaaa} 中就可以根据aaaa得到参数值了

mapper由以下结构组成

(头部两个注解)

定义@Mapper和@@component

(一个接口)

使用@select来执行sql语句(此处就将mapper和sql服务器连接起来),将其加载到下面的方法中

(注意sql语句中的外部变量使用#{外部变量名}来操作)

定义一个方法,自定义函数名,其参数就是sql语句中使用的外部变量,返回的结果就是sql语句查询的结果

返回结果由entity对应的object接收(此处就将mapper和entity连接起来)

有时候sql语句也没有返回结果(比如删除和更新),此时就使用void

有时候sql语句会返回一个主键id(比如插入),此时就使用int来接收这个id

  • entity
package com.Lee.connect.table;

import org.apache.ibatis.annotations.Param;

public class TableUser {

    private int id;
    private String UserName;
    private String PassWord;

    public int getId() {
        return id;
    }
    public void setId(int id){
        this.id = id;
    }
    public String getUserName(){
        return UserName;
    }
    public void setUserName(String userName){
        UserName = userName;
    }
    public String getPassWord(){
        return PassWord;
    }
    public void setPassWord(String passWord){
        PassWord = passWord;
    }

}

按照数据表的格式,为所有的字段添加set和get方法

返回这个表对应的类

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM