MyBatis XML文件配置

发布于:2025-02-10 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

一、 配置连接字符串和MyBatis

二、书写持久层代码

2.1 添加Mapper接口

2.2 添加UserlnfoXMLMapper.xml

三、增删改查

3.1 、增(Insert)

3.2、删(Delete) 

3.3、改 (Update)

3.4、查 (Select)


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

一、 配置连接字符串和MyBatis

application.yml文件,配置内容如下:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml #配置mybatisxml的文件路径,在resources/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=123456
#配置mybatisxml的文件路径,在resources/mapper 创建所有表的xml文件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

二、书写持久层代码

持久层代码分两部分

1. 方法定义Interface

2. 方法实现:XXX.xml

2.1 添加Mapper接口

 数据持久层的接口定义:

package com.example.book.mapper;

import com.example.book.model.UserInfo;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserInfoMapper {
    List<UserInfo> queryAllUsers();
}

2.2 添加UserlnfoXMLMapper.xml

数据持久成的实现,MyBatis的固定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.book.mapper.UserInfoMapper">
    
</mapper>

注意:创建UserInfoXMLMapper.xml 是的路径参考yml文件

查询所有用户的具体实现: 

<?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.book.mapper.UserInfoMapper">
    <select id="queryAllUsers" resultType="com.example.book.model.UserInfo">
        select *
        from user_info
    </select>
</mapper>

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


测试:

    @Test
//表示是测试方法
    void queryAllUsers() {
        List<UserInfo> userInfoList = userInfoMapper.queryAllUsers();
        System.out.println(userInfoList.toString());
    }

运行结果:

三、增删改查

3.1 、增(Insert)

UserInfoMapper接口:

@Mapper
public interface UserInfoMapper {
    
    Integer insertUser(UserInfo userInfo);

}

UserInfoMapper.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.book.mapper.UserInfoMapper">
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into user_info (username, `password`, age, gender, phone)
        values (#{username}, #{password}, #{age}, #{gender}, #{phone})
    </insert>
</mapper>

如果使用@Param设置参数名称的话,使用方法和注解类似 UserInfoMapper接口:


@Mapper
public interface UserInfoMapper {

    Integer insertUser(@Param("userInfo") UserInfo userInfo);
}

UserInfoMapper.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.book.mapper.UserInfoMapper">
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into user_info (username, `password`, age, gender, phone)
        values (#{userInfo.username}, #{userInfo.password}, #{userInfo.age}, #{userInfo.gender}, #{userInfo.phone})
    </insert>
</mapper>


测试:

    @Test
    void insertUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("admin");
        userInfo.setPassword("123456");
        userInfo.setAge(22);
        userInfo.setGender(2);
        userInfo.setPhone("12345678966");
        userInfoMapper.insertUser(userInfo);
    }

运行结果: 

3.2、删(Delete) 

UserInfoMapper接口:

@Mapper
public interface UserInfoMapper {

    Integer deleteUser(Integer id);
}

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.book.mapper.UserInfoMapper">
   <delete id="deleteUser">
       delete from user_info where id = #{id}
   </delete>
</mapper>


测试:

  @Test
    void deleteUser() {
        userInfoMapper.deleteUser(1);
    }

3.3、改 (Update)

UserInfoMapper接口:

@Mapper
public interface UserInfoMapper {
    Integer updateUser(Integer id);
}

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.book.mapper.UserInfoMapper">
   <delete id="updateUser">
       update user_info set username=#{username} where id=#{id}
   </delete>
</mapper>


测试:

将id为2的用户年龄更改为22岁

 @Test
    void updateUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(2);
        userInfo.setUsername("admin");
        userInfo.setPassword("123456");
        userInfo.setAge(22);
        userInfo.setGender(2);
        userInfo.setPhone("12345678966");
        userInfoMapper.updateUser(userInfo);
    }

运行结果:

3.4、查 (Select)

Mapper接口实现:

@Mapper
public interface UserInfoMapper {
    
    List<UserInfo> queryAllUsers();
}

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.book.mapper.UserInfoMapper">
  <select id="queryAllUsers" resultType="com.example.book.model.UserInfo">
      select *
      from user_info
  </select>
</mapper>


测试:

运行结果: 

注意:如果 deleteFlag,createTime, updateTime 三个字段为null

解决办法和注解类似:
1.起别名
2.结果映射
3.开启驼峰命名

其中1,3的解决办法和注解一样,下面介绍2.结果映射

Mapper接口:

@Mapper
public interface UserInfoMapper {

    List<UserInfo> queryAllUsers();

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.book.mapper.UserInfoMapper">

    <resultMap id="BaseMap" type="com.example.book.model.UserInfo">
        <id property="id" column="id"/>
        <result column="delete_flag" property="deleteFlag"></result>
        <result column="create_time" property="createTime"></result>
        <result column="update_time" property="updateTime"></result>
    </resultMap>

    <select id="queryAllUsers" resultMap="BaseMap">
        select *
        from user_info
    </select>
</mapper>


测试:

//表示是测试方法
    void queryAllUsers() {
        List<UserInfo> userInfoList = userInfoMapper.queryAllUsers();
        System.out.println(userInfoList.toString());
    }

运行结果: 


网站公告

今日签到

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