MyBatis入门——MyBatis XML配置文件(3)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MyBatis入门——MyBatis XML配置文件(3)

       MyBatis的开发有两种方式:1、注解  2、XML。使用MyBatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。

       MyBatis XML开发的方式需要以下两步:1、配置数据库连接字符串和MyBatis。2、写持久层代码

       准备代码:实体类:

@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}


一、配置连接字符串和MyBatis


       此步骤需要进行两项设置,数据库连接字符串设置和MyBatis的XML文件配置。如果是application.yml,配置内容如下:

#数据库配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
# 设置 Mybatis 的 xml 保存路径
mybatis:
  # 配置 mybatis xml 的⽂件路径,在 resources/mybatis 创建所有表的 xml ⽂件
  mapper-locations: classpath:mybatis/*Mapper.xml

       如果是application.properties文件,配置内容如下:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml


二、写持久层代码


     持久层代码分两部分:1、方法定义 Interface  2、方法实现:XXX.xml

1、添加 mapper 接口

       创建一个mapper包,再这个包下创建USerInfoXmlMapper接口,如图:

       USerInfoXmlMapper接口代码如下:

import com.example.mybatisxmldemo2.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
 
@Mapper
public interface USerInfoXmlMapper {
    Integer insert(UserInfo userInfo);
}

2、添加 USerInfoXmlMapper.xml

       在result包下创建mybatis包,在mybatis包下创建 USerInfoXmlMapper.xml 文件,如图:

       其中,创建 USerInfoXmlMapper.xml 的路径参考 yml中的配置,如图:

       USerInfoXmlMapper.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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <select id="select" resultType="com.example.mybatisxmldemo2.model.UserInfo">
        select * from userinfo
    </select>
</mapper>

       以下是对上面标签的说明:

<mapper>标签需要指定 namespace 属性,表示命名空间,值为 mapper 接口的全限定名,包括全包名.类名

<select>查询标签是用来执行数据库的查询操作的

       id是和 Interface (接口) 中定义的方法名称一样的,表示对接口的具体实现方法

       resultType是返回的数据类型(使用全限定名),也就是开头我们定义的实体类

       各标签的对应关系,如图:

3、测试类代码

@SpringBootTest
class USerInfoXmlMapperTest {
    @Autowired
    private USerInfoXmlMapper uSerInfoXmlMapper;
 
    @Test
    void select() {
        System.out.println(uSerInfoXmlMapper.select());
    }
}

       userinfo表如图:

       运行结果如下:

       能对应得上


三、增删改查操作


1、增(Insert)

       UserInfoXmlMapper接口代码:

@Mapper
public interface USerInfoXmlMapper {
    Integer insert(UserInfo userInfo);
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <insert id="insert">
        insert into userinfo (username, password, age, gender)values (#{username}, #{password}, #{age}, #{gender})
    </insert>
</mapper>

       测试类代码:

@SpringBootTest
class USerInfoXmlMapperTest {
    @Autowired
    private USerInfoXmlMapper uSerInfoXmlMapper;
    @Test
    void insert() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("zhaoliu");
        userInfo.setPassword("zhaoliu");
        userInfo.setAge(20);
        userInfo.setGender(1);
        System.out.println(uSerInfoXmlMapper.insert(userInfo));
    }
}

       测试类运行结果如下:

       也可以使用@Param注释设置接口参数名称,使用方法和注解类似,UserInfoXmlMapper代码如下:

@Mapper
public interface USerInfoXmlMapper {
    Integer insert2(@Param("userInfo") UserInfo userInfo);
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <insert id="insert2">
        insert into userinfo (username, password, age, gender)values (#{userInfo.username}, #{userInfo.password}, #{userInfo.age}, #{userInfo.gender})
    </insert>
</mapper>

返回自增 id

       接口代码如下:

@Mapper
public interface USerInfoXmlMapper {
    Integer insert(UserInfo userInfo);
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into userinfo (username, password, age, gender)values (#{username}, #{password}, #{age}, #{gender})
    </insert>
</mapper>

2、删(Delete)

       接口代码如下:

@Mapper
public interface USerInfoXmlMapper {
    Integer delete(Integer id);
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <delete id="delete">
        delete from userinfo where id = #{id}
    </delete>
</mapper>

       测试类代码如下:

@SpringBootTest
class USerInfoXmlMapperTest {
    @Autowired
    private USerInfoXmlMapper uSerInfoXmlMapper;
    @Test
    void delete() {
        System.out.println(uSerInfoXmlMapper.delete(13));
    }
}

       运行测试类前表的内容:

       运行测试类后,结果如下:

3、改(update)

       接口类代码如下:

@Mapper
public interface USerInfoXmlMapper {
    Integer update(UserInfo userInfo);
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <update id="update">
        update userinfo set username = #{username} where id = {#id}
    </update>
</mapper>

       测试类代码如下:

@SpringBootTest
class USerInfoXmlMapperTest {
    @Autowired
    private USerInfoXmlMapper uSerInfoXmlMapper;
    @Test
    void update() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("xxxxx");
        userInfo.setId(4);
        uSerInfoXmlMapper.update(userInfo);
    }
}

       运行测试类前表的内容如下:

       运行测试类后,结果如下:

4、查(select)

       使用XML的方式进行查询,也会存在数据封装的问题(前面的没有是因为我在xml文件配置了开启驼峰命名),现在进行SQL查询

       接口代码如下:

@Mapper
public interface USerInfoXmlMapper {
    List<UserInfo> select2();
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <select id="select2" resultType="com.example.mybatisxmldemo2.model.UserInfo">
        select * from userinfo
    </select>
</mapper>

       测试类代码如下:

@SpringBootTest
class USerInfoXmlMapperTest {
    @Autowired
    private USerInfoXmlMapper uSerInfoXmlMapper;
    @Test
    void select2() {
        System.out.println(uSerInfoXmlMapper.select2());
    }
}

       运行结果如下:

       这三个属性内容还是null,解决办法和注解类似(1、3和注解一样,2不一样),有三种:1、起别名  2、结果映射  3、开启驼峰命名

(1)起别名

       接口类:

@Mapper
public interface USerInfoXmlMapper {
    List<UserInfo> select3();
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <select id="select3" resultType="com.example.mybatisxmldemo2.model.UserInfo">
        select id, username, password, age, gender, phone, delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from userinfo
    </select>
</mapper>

       测试类代码:

@SpringBootTest
class USerInfoXmlMapperTest {
    @Autowired
    private USerInfoXmlMapper uSerInfoXmlMapper;
    @Test
    void select3() {
        System.out.println(uSerInfoXmlMapper.select3());
    }
}

       运行结果如下:

       上面三个属性不为null了。

(2)结果映射

       接口类代码:

@Mapper
public interface USerInfoXmlMapper {
    List<UserInfo> select4();
}

       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="com.example.mybatisxmldemo2.mapper.USerInfoXmlMapper">
    <resultMap id="BaseMap" type="com.example.mybatisxmldemo2.model.UserInfo">
        <id column="id" property="id"></id> <!--主键-->
        <result column="username" property="username"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
        <result column="phone" property="phone"></result>
        <result column="delete_flag" property="deleteFlag"></result>
        <result column="create_time" property="createTime"></result>
        <result column="update_time" property="updateTime"></result>
    </resultMap>
 
    <select id="select4" resultMap="BaseMap">
        select * from userinfo
    </select>
</mapper>

       测试类代码如下:

@SpringBootTest
class USerInfoXmlMapperTest {
    @Test
    void select4() {
        System.out.println(uSerInfoXmlMapper.select4());
    }
}

       运行结果如下:

       其中那三个属性不为null了。

(3)开启驼峰命名

       yml文件内容如下:

mybatis:
  # 配置 mybatis xml 的⽂件路径,在 resources/mybatis 创建所有表的 xml ⽂件
  mapper-locations: classpath:mybatis/*Mapper.xml
  configuration: # 配置打印 MyBatis日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true #配置驼峰自动转换

       之后就会自动进行驼峰转换,不用额外起别名或者结果映射了。

       开发中使用注解还是XML的方式?关于开发中使用哪种模式,没有明确答案。仁者见仁,智者见智,没有统一的标准,更多是取决于你的团队或者项目经理、项目负责人。


五、常见问题


       yml配置路径错了:

       方法名称不一致:

       xml配置文件路径不正确:

       上面这些错误,都会造成以下报错内容:(绑定失败)

解决方案:

1确认yml配置的路径是否正确

2确认方法名称是佛一致

3确认xml配置的文件路径是否正确

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
125 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
6天前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
1月前
|
XML 前端开发 Java
XML基本概念入门学习指南
XML(eXtensible Markup Language)是一种可扩展的标记语言,和HTML语言语法类似,同属于标记语言。
80 14
|
1月前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
83 5
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
575 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
XML Java 应用服务中间件
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
这篇文章是关于Apache Tomcat服务器的目录结构、配置文件(特别是server.xml)的详细介绍和学习指南。
116 0
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
|
2月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
54 0
Mybatis入门(select标签)
|
2月前
|
XML 存储 JSON
framework 的配置文件在.netcore里面不能用怎么处理?在.netcore中创建.xml配置文件
framework 的配置文件在.netcore里面不能用怎么处理?在.netcore中创建.xml配置文件
37 0
|
4月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
安全 内存技术
【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传
【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传