MyBatis框架(SpringBoot简化Mybatis)--2

目录

1.SpringBoot简化Mybatis

1.1 项目整合

1.1.1 创建项目

1.1.2 导入jar包

1.1.3 删除多余的文件

1.1.4 关于主启动类异常的说明

1.1.5 修改YML配置文件和pojo类

 1.1.6 将Mapper接口交给容器管理

 1.1.7 编辑测试类

2. Mybatis 基本用法

2.1 根据ID查询数据

2.1.1 编辑测试方法

 2.1.2 编辑Mapper接口

2.1.3 编辑UserMapper.xml映射文件

2.2 Sql语句打印

2.3 根据name和age查询

2.3.1 编辑测试类

 2.3.2 编辑UserMapper

 2.3.3 编辑UserMapper.xml映射文件

2.4 查询age>18 age <100 的用户

2.4.1 Sql语句

 2.4.2 编辑测试类

 2.4.3 编辑Mapper接口

2.4.4 编辑xml 映射文件

2.4.5 转义标签

2.5 利用注解@Param实现数据封装

2.5.1 编辑测试类

2.5.2 编辑接口文件 

 2.5.3 编辑xml映射文件

2.6 模糊查询

2.6.1 业务需求

 2.6.2 编辑测试方法

 2.6.3 编辑接口方法

2.6.4 编辑xml映射文件

2.7 Sql标签用法

2.7.1 业务需求

2.7.2 Sql标签用法

2.8 Mybatis中的集合参数写法

2.8.1 业务需求

2.8.2 编辑测试类 

2.8.3 编辑Mapper接口

 2.8.4 编辑Mapper 映射文件

2.9 用户新增

2.9.1 编辑测试方法

 2.9.2 编辑接口方法

 2.9.3 编辑xml映射文件


1.SpringBoot简化Mybatis



1.1 项目整合



1.1.1 创建项目

在这里插入图片描述



1.1.2 导入jar包

说明: 在pom.xml文件中 添加jar包文件

<!--mybatis依赖包-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!--jdbc依赖包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--添加lombok的包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

1.1.3 删除多余的文件

说明: 将多余的文件删除,保留图中的文件即可
在这里插入图片描述
2. 修改配置文件名称
在这里插入图片描述



1.1.4 关于主启动类异常的说明

提示: “开箱即用” 原则
报错信息:
在这里插入图片描述

报错原理说明:

在这里插入图片描述
由于Mybatis依赖了JDBC的jar包. 但是该jar包文件是启动项. 当主启动类运行时,开始加载主启动项. 但是JDBC需要链接数据库.所以必须有相关的配置信息.但是此时YML文件中没有数据源的配置.所以报错.



1.1.5 修改YML配置文件和pojo类

 YML配置文件

#1.配置端口号  注意缩进!!!!!
server:
  port: 8090

#2.配置数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

mybatis:
  type-aliases-package: com.jt.pojo
  #将所有的映射文件全部加载
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

 pojo类

package com.jt.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data//自动生成get sat方法
@Accessors(chain = true)//重写set方法,可以实现链式加载
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参构造
public class User {

    private Integer id;
    private String name;
    private Integer age;
    private String sex;

}

 1.1.6 将Mapper接口交给容器管理

package com.jt.mapper;

import com.jt.pojo.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
@Mapper  //将接口交给Spring容器管理 Map<userMapper,JDK代理对象>
public interface UserMapper {

    //指定接口方法 查询demo_user的全部数据
    List<User> findAll();

}

 1.1.7 编辑测试类

package com.jt;

import com.jt.mapper.UserMapper;
import com.jt.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
public class TestMybatis {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testDemo1(){
        List<User> userList = userMapper.findAll();
        System.out.println(userList);
    }
}

在这里插入图片描述

2. Mybatis 基本用法

2.1 根据ID查询数据

2.1.1 编辑测试方法

 @Test
    public void testFindUserById(){
        int id = 1;
        User user = userMapper.findUserById(id);
        System.out.println(user);
    }

 2.1.2 编辑Mapper接口

@Mapper //将接口交给Spring容器管理 Map<userMapper,JDK代理对象>
public interface UserMapper {

    //指定接口方法 查询demo_user的全部数据
    List<User> findAll();
    //根据ID查询数据库
    User findUserById(int id);
}

2.1.3 编辑UserMapper.xml映射文件

<!-- 根据ID查询数据库
         动态取值: #{key}
     -->
    <select id="findUserById" resultType="com.jt.pojo.User">
        select * from demo_user where id = #{id}
    </select>

2.2 Sql语句打印

说明: 在YML文件中 添加日志操作

#1.配置端口号  注意缩进!!!!!
server:
  port: 8090

#2.配置数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    #yml文件 0不解析 如果字母以0开头则引号包裹
    #password: "0123456"
    password: root

#3.配置Mybatis
mybatis:
  type-aliases-package: com.jt.pojo
  #将所有的映射文件全部加载
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#4.打印Sql com.jt.mapper下的Sql日志
logging:
  level:
    com.jt.mapper: debug

在这里插入图片描述

2.3 根据name和age查询

2.3.1 编辑测试类

 /**
     * 知识点:
     *      1.如果是多个参数传递,则一般采用对象的方式封装.
     */
    @Test
    public void testFindByNA(){
        String name = "孙尚香";
        int age = 18;
        User user = new User();
        user.setName(name).setAge(age);
        List<User> userList = userMapper.findUserByNA(user);
        System.out.println(userList);
    }

 2.3.2 编辑UserMapper

@Mapper //将接口交给Spring容器管理 Map<userMapper,JDK代理对象>
public interface UserMapper {

    //指定接口方法 查询demo_user的全部数据
    List<User> findAll();
    //根据ID查询数据库
    User findUserById(int id);

    List<User> findUserByNA(User user);
}

 2.3.3 编辑UserMapper.xml映射文件

 <!-- 根据name和age查询数据
         知识点: 别名包
                在配置文件中指定包路径: 可以自动的实现包路径的拼接
         resultType规则:
               1. 首先根据别名包匹配.设定..
               2. 如果匹配不成功,则按照路径匹配.
         参数传递的规则:
                1. 如果是单个参数,则使用#{key}  获取的参数的值
                2. 如果是对象参数,则使用#{属性} 获取的是属性值
      -->
    <select id="findUserByNA" resultType="User">
        select * from demo_user where
        name = #{name} and age = #{age}
    </select>

2.4 查询age>18 age <100 的用户

2.4.1 Sql语句

	select * from demo_user where age>18 and age <100

 2.4.2 编辑测试类

 /**
     * 知识点3:
     *      说明: 如果多个参数不方便使用 User对象封装时,应该使用万能的集合Map
     */
    @Test
    public void testFindByAge(){
        int minAge = 18;
        int maxAge = 100;
        Map<String,Integer> map = new HashMap<>();
        map.put("minAge",minAge);
        map.put("maxAge",maxAge);
        List<User> userList = userMapper.findUserByAge(map);
        System.out.println(userList);
    }

 2.4.3 编辑Mapper接口

@Mapper //将接口交给Spring容器管理 Map<userMapper,JDK代理对象>
public interface UserMapper {

    //指定接口方法 查询demo_user的全部数据
    List<User> findAll();
    //根据ID查询数据库
    User findUserById(int id);

    List<User> findUserByNA(User user);
    //习惯: 参数只有一个
    List<User> findUserByAge(Map<String, Integer> map);
}

2.4.4 编辑xml 映射文件

<!--
        根据年龄查询数据
        语法:  如果传递的参数是Map, 则使用#{key}
        xml转译字符:
                    1. >  &gt;
                    2. <  &lt;
                    3. & &amp;
     -->
    <select id="findUserByAge" resultType="User">
        select * from demo_user where age > #{minAge}
                                and   age  &lt; #{maxAge}
    </select>

2.4.5 转义标签

 

 <!--
        根据年龄查询数据
        语法:  如果传递的参数是Map, 则使用#{key}
        xml转译字符:
                    1. >  &gt;
                    2. <  &lt;
                    3. & &amp;
                    4. 万能转译字符
                       <![CDATA[ 转移内容  ]]>
     -->
    <select id="findUserByAge" resultType="User">
        <![CDATA[
             select * from demo_user
                where age  > #{minAge} and   age  < #{maxAge}
           ]]>
    </select>

2.5 利用注解@Param实现数据封装

2.5.1 编辑测试类

 /**
     * 知识点4:
     *      利用注解实现数据的封装
     */
    @Test
    public void testFindByAge2(){
        int minAge = 18;
        int maxAge = 100;
        List<User> userList = userMapper.findUserByAge2(minAge,maxAge);
        System.out.println(userList);
    }

2.5.2 编辑接口文件 

    //原则:Mybatis只支持单值传参 将多值封装为单值
    //注解:@Param("key") int minAge(值)
    // 作用:将数据封装为Map
    List<User> findUserByAge2(@Param("minAge") int minAge, @Param("maxAge") int maxAge);

 2.5.3 编辑xml映射文件

 <select id="findUserByAge2" resultType="User">
        <![CDATA[
             select * from demo_user
                where age  > #{minAge} and   age  < #{maxAge}
           ]]>
    </select>

 

2.6 模糊查询

2.6.1 业务需求

查询name字段中包含"君"的用户.
Sql语句:

	SELECT * FROM demo_user WHERE NAME LIKE "%君%"

 2.6.2 编辑测试方法

 /**
     * 知识点5:
     *      利用注解实现数据的封装
     */
    @Test
    public void testFindUserByLike(){
        String name = "%" + "君" + "%";
        List<User> userList = userMapper.findUserByLike(name);
        System.out.println(userList);
    }

 2.6.3 编辑接口方法

List<User> findUserByLike(String name);

2.6.4 编辑xml映射文件

<!--模糊查询  特别注意表名的大小写问题!!!!!
        windows系统中: 不区分大小写
        Linux系统中:   区分大小写问题.
    -->
    <select id="findUserByLike" resultType="User">
        SELECT * FROM demo_user WHERE NAME LIKE #{name}
    </select>
	
	方式2: xml配置文件动态拼接%
	 <!--模糊查询  特别注意表名的大小写问题!!!!!
        windows系统中: 不区分大小写
        Linux系统中:   区分大小写问题.
        语法:  "%"     这样的方式
    -->
    <select id="findUserByLike" resultType="User">
        SELECT * FROM demo_user WHERE NAME LIKE "%"#{name}"%"
    </select>

 

2.7 Sql标签用法

2.7.1 业务需求

说明: Sql语句中经常出现重复的数据.如果每次重复的内容都自己手写.则开发的效率低.
优化: 将公共的Sql进行抽取
优势: Sql标签可以节省代码
缺点: 可读性变差了, 如果是关联操作 则根据情况而定.

2.7.2 Sql标签用法

 <!--模糊查询  特别注意表名的大小写问题!!!!!
        windows系统中: 不区分大小写
        Linux系统中:   区分大小写问题.
        语法:  "%"     这样的方式
    -->
    <select id="findUserByLike" resultType="User">
        SELECT <include refid="tableColumn"/> FROM demo_user WHERE NAME LIKE "%"#{name}"%"
    </select>

    <!--Sql标签: 抽取公共的Sql语句 -->
    <sql id="tableColumn">
        id,name,age,sex
    </sql>

 

2.8 Mybatis中的集合参数写法

2.8.1 业务需求

查询id=1,2,3,5,7的数据

	select * from demo_user  where id in (1,2,3,5,7........)

2.8.2 编辑测试类 

//前端: URL?id=1,2,3,4,5 获取之后一般采用数组接收
    @Test
    public void testFindListByIn(){
        int[] array = {1,2,3,5,7};
        List<User> userList = userMapper.findListByIn(array);
        System.out.println(userList);
    }

2.8.3 编辑Mapper接口

	List<User> findListByIn(int[] array);

 2.8.4 编辑Mapper 映射文件

	 <!--
        关于Mybatis的遍历的写法
        foreach:
            1. collection 需要遍历的集合
                   1.1 数组      关键字: array/list
                   1.2 list集合  关键字: list/array
                   1.3 Map<key,array/list>  关键字:key
            2. open/close  循环体的开始和结束 可以写到循环之外简化标签
            3. item  当前遍历数据的变量名
            4. separator 分割符
    -->
    <select id="findListByIn" resultType="User">
        select * from demo_user  where id in (
            <foreach collection="array" item="id" separator=",">
                #{id}
            </foreach>
        )
    </select>

2.9 用户新增

2.9.1 编辑测试方法

@Test
    public void testInsertUser(){
        User user = new User();
        user.setName("张三").setAge(18).setSex("男");
        userMapper.saveUser(user);
        System.out.println("新增成功!!!!");
    }

 2.9.2 编辑接口方法

 void saveUser(User user);

 2.9.3 编辑xml映射文件

 <insert id="saveUser">
        insert into demo_user(id,name,age,sex)
                value (null, #{name},#{age},#{sex})
    </insert>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#空城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值