java-Spring-(MyBatis框架-xml管理)

发布于:2024-05-02 ⋅ 阅读:(130) ⋅ 点赞:(0)

目录

前置条件

xml与注解比较

1.1 xml定义

1.2 和SQL注解比较

   建包准备

插入数据

​编辑 更新数据

 删除数据

查询数据

查看单字段查询


🏷💣前置条件

创建一个spring boot 初始化的项目

🏷💣xml与注解比较

1.1 xml定义

XML是一种可扩展性语言,用户可以自己定义标签,用来描述特定类型的数据;

XML的语法严格,每个标签都必须有一个结束标签,标签的嵌套关系也必须合法;

1.2 和SQL注解比较
  • xml配置SQL,可以将SQL语句和JAVA代码分离开

  • xml配置SQL,支持动态SQL语句

  • xml配置SQL,支持SQL语句的复用

xml是属于外部文件属性,所以需要在application.properties中添加配置

这边新建mappers的包用于装xml文件

这边需要引入一个xml模版 

<?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">
<mapper namespace="指定的@Mapper映射的接口的具体路径">

</mapper>

 

   💣建包准备

  一个实体类包  这边是 pojo.entity包

实体类的属性
数据库的字段名 User实体类对应的属性
id private Long id
username private String username
password private String password
nickname private String nickname
created private Date created

一个@Mapper映射接口的包 mapper包

一个VO类包(返回数据库查询字段值的属性)   pojo.vo包

   📢流程 

  定义接口方法  ->编写xml 文档->测试

  我们先写一个UserMapper映射的接口 

 1.注意必须加@Mapper否则会找不到对应的bean对象

 2.这时候不需要加相关的sql注解

package cn.tedu.demoforcsdn.mappers;

import cn.tedu.demoforcsdn.pojo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    //插入数据
    int  insertUser(User user);
}

编写xml文档

复制完整路径 快捷键是 Ctrl+Alt+Shift+c 

namespae 是@Mapper接口的具体路径 

 id 是接口方法的名称 

  sql 语句 

xml 语法格式
语法格式 操作的意义
<insert id="接口方法">INSERT INTO 表 字段名 Values 值</insert> 插入数据

<update id="接口方法">UPDATE 表名 <set><if test="判断条件">设置语句</if></set> 

WHERE 字段名=值</update>

更新数据
<delete id="接口方法"> DELETE FROM 表名 WHERE 字段名=值</delete> 删除数据

<select id ="接口方法" resultType="返回的封装实体类VO">SELECT 字段名 FROM 表名

 (看情况) WHERE 字段名=值</select>

查询数据

✈🚀插入数据

<?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">
<mapper namespace="cn.tedu.demoforcsdn.mappers.UserMapper">
    <insert id="insertUser">
        INSERT INTO  user (username,password,nickname,created) VALUES (#{username},#{password},#{nickname},#{created})
    </insert>

</mapper>

   这边在去Test进行测试(上次将mybatis基础知识点讲过测试类测试 写文章-CSDN创作中心)

package cn.tedu.demoforcsdn;

import cn.tedu.demoforcsdn.mappers.UserMapper;
import cn.tedu.demoforcsdn.pojo.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

@SpringBootTest
class DemoForCsdnApplicationTests {
    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
    }
    @Test
    void insertUser(){
        User user = new User();
        user.setUsername("赵四");
        user.setPassword("123456");
        user.setNickname("老四");
        user.setCreated(new Date());
        System.out.println(userMapper.insertUser(user));


    }

测试结果

数据库结果

✈🚀 更新数据

接口方法

int updateUserByUsername(UserUpdateVO userUpdateVO);

这边我只需要返回 nickname,username,password

这边我定义了一个vo类用于接受数据库的返回值

数据库的字段名 userUpdateVo类的属性值
username private String username
password private  String password
nickname private String nickname

xml 编写

引入新的概念

<set>  标签

 <set>  标签用于包裹 UPDATE 语句的 SET 部分,并自动处理字段间的逗号分隔。如果在动态生成的 SQL 语句中最后一个 <if> 条件不满足,那么 <set> 标签会自动移除最后一个多余的逗号,这可以避免 SQL 语法错误。

注意处理多字段必须以逗号分割,必须写WHERE

<if> 标签

<if> 标签用于条件判断。它根据 test 属性的值来决定是否包含其内部的 SQL 片段。如果 test 属性的值为 true,则包含该 SQL 片段;如果为 false,则忽略该片段。

<update id="updateUserByUsername">
        UPDATE  user
        <set>
            <if test="password!=null">password=#{password},</if>
            <if test="nickname!=null">nickname=#{nickname}</if>
        </set>
        WHERE username =#{username};
    </update>

测试

@Test
    void updateUser(){
        UserUpdateVO userUpdateVO = new UserUpdateVO();
        userUpdateVO.setUsername("赵四");
        userUpdateVO.setPassword("abcdf");
        userUpdateVO.setNickname("扛把子");
        System.out.println(userMapper.updateUserByUsername(userUpdateVO));


    }

运行结果

数据库状态

 ✈🚀删除数据

接口方法

 int deleteUserByUsername(String username);

 xml

<delete id="deleteUserByUsername">
        DELETE FROM user WHERE username=#{username}
    </delete>

 测试

@Test
    void deleteUserByUsername(){
        System.out.println(userMapper.deleteUserByUsername("赵四"));
    }

运行结果

✈🚀查询数据

🚏查看单字段查询

接口方法

  UserUpdateVO selectByUsername(String username);

xml

resultType

resultType 的主要作用是将 SQL 查询结果集中的每一行数据映射到指定的 Java 类型对象上。当 MyBatis 执行查询操作并获取到结果集后,它会根据 resultType 指定的类型,自动将结果集中的每一行数据转换(或映射)为相应的 Java 对象。

注意:写<select> sql语句会返回结果集,我们需要接受结果集 常用resultType接受

resultType填写的是结果集,我这边返回的是个封装的数据库返回的实体类,其包括    password,nickname,username

<select id="selectByUsername" resultType="cn.tedu.demoforcsdn.pojo.vo.UserUpdateVO">
        SELECT password,nickname,username FROM user WHERE username=#{username}
    </select>

测试

 @Test
    void  selectUserByUsername(){
        System.out.println(userMapper.selectByUsername("张三"));
    }

 运行结果

打算用下篇说明


网站公告

今日签到

点亮在社区的每一天
去签到