Mybatis概述

一.概述:

二.准备工作:

(有数据库的全类名,url,name,password-->数据库连接的四要素)

Mybatis开发中,只需要定义Mapper接口即可,不需要定义实现类,因为程序在运行时框架底层会自动生成这个接口的实现类对象。

三.idea操作:

MySQL中上述图片当中的类名是固定的。

jdbc:mysql:// -->这是固定格式,是协议部分

localhost:3306 -->指定了连接哪一个数据库服务器,localhost代表本机,3306代表数据库服务器的端口号

jdbc:mysql://localhost:3306后还可以加如jdbc:mysql://localhost:3306/mybatis(加了个/mybatis),代表连接了这个数据库

服务器里的哪一个数据库(mybatis是数据库的名字)

三.开始操作:(共有两个文件:itheima_web_project和itheima_mysql_project_mybatis)

1.创建springboot工程:

a.创建模块:


b.输入有关信息:

注:上述图片的服务器URL默认为:

https://start.spring.io

本例中需要改为:

https://start.aliyun.com

如下:


c.导入驱动包:

只需要上述图片的两个依赖即可。

注:由于版本问题,Spring Boot在3.3.0(包括)以上的版本不支持驱动包MyBatis Framework。

若用驱动包MyBatis Framework,需要Spring Boot在3.3.0以下的版本。


d.可能遇到的问题:如忽略了pom.xml文件:

解决方案如下:

之后等待插件安装完即可


e.最终效果:


补充:


2.创建数据库表:

-- auto-generated definition
create table user
(
    id     int auto_increment comment 'id'
        primary key,
    name   varchar(10)      not null comment '姓名',
    age    tinyint unsigned not null comment '年龄',
    gender tinyint unsigned not null comment '性别:1.男 , 2.女',
    phone  varchar(11)      not null comment '电话号码',
    constraint id
        unique (id),
    constraint phone
        unique (phone)
)
    comment '用户';
 
表格输入数据结果:


3.创建实体类:-->用来封装用户信息,而且封装的信息与创建的表格的字段信息一一对应

在itheima_web_project的com.itheima这个软件包下创建类:

注:实体类必须是public型,不然之后访问数据库后打印的是地址值

package com.itheima.pojo;
​
public class User {  //实体类必须是public型
    //在实体类中,定义属性值的类型建议用包装类型
    private Integer id;
    /*id在数据库中为int型,java中可用包装类Integer*/
    private String name;
    private Short age;
    private Short gender;//性别
    /*数据库中gender为tinyint型,java中可用short型->包装类为Short*/
    private String phone;//手机号
    /*数据库中varchar型在java中用String型*/
​
​
    //构造方法
    public User() {
    }
​
    public User(Integer id, String name, Short age, Short gender, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.phone = phone;
    }
​
​
    //get/set
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
​
​
​
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
​
​
    public Short getAge() {
        return age;
    }
    public void setAge(Short age) {
        this.age = age;
    }
​
​
    public Short getGender() {
        return gender;
    }
    public void setGender(Short gender) {
        this.gender = gender;
    }
​
​
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
​
​
    //重写顶级父类Object的toString方法
    @Override
    public String toString() {
        return "User{id = " + id + ", name = " + name + ", age = " + age + ", gender = " + gender + ", phone = " + phone + "}";
    }
​
​
​
}

4.引入Mybatis的相关依赖即驱动包-->之前已经引入


5.配置Mybatis(数据库连接信息):

要在application.properties这个绿色标志下配置:

四要素:语句后面都没有分号

a.驱动类名称:
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


b.数据库连接的url: url需要手动书写
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
   #jdbc:mysql:是mybatis连接mysql的配置,是固定格式
   #//localhost代表所在数据库的位置;3306为要连接的数据库的端口号-->创建数据库时会显示;mybatis为要连接的数据库的名称


c.连接数据库的用户名:用户名需要手动书写自己创建的数据库的名称
#连接数据库的用户名
spring.datasource.username=root


d.连接数据库的密码:密码需要手动书写自己设置的数据库密码
#连接数据库的密码
spring.datasource.password=1234


整体效果:

(第21行打错了,只有一个=号)

修改后的效果:


6.编写SQL语句(注解/XML):-->需要定义一个UserMapper持久层接口

(第21行打错了,只有一个=号)

在com.itheima包下定义mapper.UserMapper接口,该接口中需要注解@Mapper

加上@Mapper注解,之后在运行时框架会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理

定义的查询全部用户信息的方法,其中这个返回值类型List的泛型要用User型,*但别手动打,要用下拉框给出的提示的User,*

会自动给出导包

但本题实体类应该是public型,正确的内容如下:

下面的list方法里的List泛型是User,写错了

@Select()注解代表查询操作,括号内添要查询的内容(字符串型),本案例要查询表格即添"select * from user"

-->>@Select("select * from user")

最终效果:

代码:

package com.itheima.mapper;
​
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.itheima.pojo.User;
​
import java.util.List;
​
​
@Mapper
//加上@Mapper注解,之后在运行时会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
public interface UserMapper {
​
    //定义一个方法,用于查询全部用户信息
    //由于一个用户信息可能有很多,而且一个用户就会封装成一个用户对象,此时有很多对象-->封装在List集合中即可
    //由此,集合的泛型为User
​
    @Select("select * from user")  // @Select()注解代表查询操作
    public List<User> list();
}

7.测试:在test包下

创建SpringBoot工程后自带的测试类SpringbootMybatisQuickstartApplicationTests

代码如下:

package com.itheima;
​
import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import java.util.List;
​
@SpringBootTest  //@SpringBootTest注解代表springboot整合单元测试的注解
class SpringbootMybatisQuickstartApplicationTests {
​
    /*@Test
    void contextLoads() {
    }*/
​
    @Autowired //@Autowired注解用来完成依赖注入
    private UserMapper userMapper;
​
    @Test
    public void testListUser(){
        //调用UserMapper的list方法来查询全部用户信息
        /* 但UserMapper为接口,不能实例化
           但有了@Mapper注解,运行时会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
           已经成为IOC容器里的bean了
           之后要在单元测试中用到这个bean对象,可以通过依赖注入的形式,将这个bean对象注入进来
           因此,在测试方法上声明一个UserMapper类型的对象,
         */
​
        //调用list方法
        List<User> userList=userMapper.list();
​
        for (User user : userList) {
            System.out.println(user);//打印user,不是userList。因为此时赋给user
        }
    }
​
    /* 注:由于该单元测试是SpringBoot整合的单元测试,上面有一个注解@SpringBootTest,一旦加了这个注解,
          其中的单元测试方法(@Test注解下)在运行时会自动加载整个SpringBoot的环境,并且创建SpringBoot的IOC容器,
          IOC容器创建好后,通过依赖注入(@Autowired注解下)的形式从IOC容器中获取UserMapper这个类型的bean对象,
          之后即可调用bean对象的list方法来查询全部用户信息
     */
}

8.运行结果:


四.包的结构:

  • 38
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值