Spring -- 使用XML开发MyBatis


T04BF
👋专栏: 算法|JAVA|MySQL|C语言
🫵 今天你敲代码了吗

文章目录

MyBatis XML配置文件开发

实际上,除了使用注解的方式,MyBatis开发还能使用XML的方式,也就是将SQL语句写在XML配置文件里面

配置连接字符串和MyBatis

yaml 复制代码
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: '051215'
driver-class-name: com.mysql.cj.jdbc.Driver


# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml

写Mapper层代码

分为两个部分

  1. 方法定义Interface
  2. 方法实现:XXX.xml
添加mapper接口
java 复制代码
package org.jwcb.je0725_mybatis_xml.mapper;

import org.jwcb.je0725_mybatis_xml.entity.UserInfo;

import java.util.List;

public interface UserInfoMapper {
    List<UserInfo> queryAllUser(); 
}
添加UserInfoXmLMapper.xml

MyBatis固定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="org.jwcb.je0725_mybatis_xml.mapper.UserInfoMapper">
</mapper>

尝试一下执行select操作:

xml 复制代码
<mapper namespace="org.jwcb.je0725_mybatis_xml.mapper.UserInfoMapper">
  <select id="queryAllUser" resultType="org.jwcb.je0725_mybatis_xml.entity.UserInfo">
    select * from userinfo
  </select>
</mapper>

执行结果:

  • <mapper>标签:需要指定namespace属性,表示命名空间,值为mapper接口的**全限定类名, **包括全包名.类名
  • <select>查询标签:用来执行数据库的查询操作
    • id:是和interface中定义的方法名一致,表示对接口的具体实现方法
    • resultType:是返回的数据类型,也就是UserInfo

我们会发现,出现了返回的一些值为null的情况,这种情况与上一篇文章一致,是由于数据库列名和java实体类属性名不一致导致的

此时我们同样需要对起来

在XML中:

xml 复制代码
<mapper namespace="org.jwcb.je0725_mybatis_xml.mapper.UserInfoMapper">

  <resultMap id="XMLBaseMap" type="org.jwcb.je0725_mybatis_xml.entity.UserInfo">
    <result column="delete_flag" property="deleteFlag"></result>
    <result column="create_time" property="createTime"></result>
    <result column="update_time" property="updateTime"></result>
  </resultMap>

  <select id="queryAllUser2" resultMap="XMLBaseMap">
    select * from userinfo
  </select>
</mapper>

此时的执行结果就是正确的了

建议将其余的,即使命名一致,也都写上对应关系

同时,上一篇文章提到的起别名/开启驼峰命名一样适用

操作数据库

INSERT
xml 复制代码
<insert id="insertUser">
    insert into userinfo (username,`password`,age,gender,phone) values (#{userinfo.username},
    #{userinfo.password},#{userinfo.age},#{userinfo.gender},#{userinfo.phone})
</insert>

在接口中:

java 复制代码
@Mapper
public interface UserInfoMapper {
    Integer insertUser(@Param("userinfo") UserInfo userInfo);
}

测试用例:

返回自增ID

XML文件设置 useGeneratedKeys 和 keyProperty 属性

xml 复制代码
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
  insert into userinfo (username,`password`,age,gender,phone) values (#{userinfo.username},
  #{userinfo.password},#{userinfo.age},#{userinfo.gender},#{userinfo.phone})
</insert>

此时返回值直接在userinfo.id里面取就行了

DELETE & UPDATE
xml 复制代码
<delete id="deleteUser">
  delete from userinfo where id = #{id}
</delete>


<update id="updateUser">
  update userinfo set phone = #{phone} where id = #{id}
</update>
java 复制代码
Integer updateUser(UserInfo userInfo);
Integer deleteUser(UserInfo userInfo);



感谢您的访问!!期待您的关注!!!


T04BF
🫵 今天记得敲代码

相关推荐
Ch.yang2 小时前
【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理
java·spring·代理模式
昙鱼2 小时前
springboot创建web项目
java·前端·spring boot·后端·spring·maven
爱学习的白杨树3 小时前
MyBatis的一级、二级缓存
java·开发语言·spring
中草药z3 小时前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
m0_748256783 小时前
SpringBoot 依赖之Spring Web
前端·spring boot·spring
组合缺一3 小时前
Solon v3.0.5 发布!(Spring 可以退休了吗?)
java·后端·spring·solon
栗豆包4 小时前
w118共享汽车管理系统
java·spring boot·后端·spring·tomcat·maven
武昌库里写JAVA10 小时前
【MySQL】7.0 入门学习(七)——MySQL基本指令:帮助、清除输入、查询等
spring boot·spring·毕业设计·layui·课程设计
秋恬意12 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
初晴~15 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·