mybatis报错!

mybatis这些报错是怎么回事?求解!!

img

项目结构

img

db.properties

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8
mysql.username=root
mysql.password=666666

mybatis-config.xml


configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
    
    <properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <package name="mapper"/>
    mappers>
configuration>

CustomerMapper.xml


mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.CustomerMapper">
    
    <select id="findCustomerByNameAndJobs"
            parameterType="pojo.Customer"
            resultType="pojo.Customer">
        select * from t_customer where 1=1
            <if test="username !=null and username !=''">
                and username like concat('%',#{username}, '%')
            if>
            <if test="jobs !=null and jobs !=''">
                and jobs= #{jobs}
            if>
    select>
mapper>

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>Chapter3-4artifactId>
    <version>1.0-SNAPSHOTversion>

    <properties>
        <maven.compiler.source>17maven.compiler.source>
        <maven.compiler.target>17maven.compiler.target>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.5.2version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.11version>
        dependency>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
            
            <scope>compilescope>
        dependency>
    dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/javadirectory>
                <includes>
                    <include>**/*.propertiesinclude>
                    <include>**/*.xmlinclude>
                includes>
                <filtering>truefiltering>
            resource>
        resources>
    build>
project>

UserMapper.xml


mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pojo.User">
    
    <select id="findById" parameterType="int"
            resultType="pojo.User">
        select * from users where uid = #{id}
    select>
mapper>

MyBatisTest测试类

package Test;
import pojo.Customer;
import utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MyBatisTest {
    /**
     * 根据客户姓名和职业组合条件查询客户信息列表
     */
    @Test
    public void findCustomerByNameAndJobsTest() {
        // 通过工具类获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
        // 创建Customer对象,封装需要组合查询的条件
        Customer customer = new Customer();
        customer.setUsername("jack");
        customer.setJobs("teacher");
        // 执行SqlSession的查询方法,返回结果集
        List customers = session.selectList("mapper"
                + ".CustomerMapper.findCustomerByNameAndJobs", customer);
        // 输出查询结果信息
        for (Customer customer2 : customers) {
            System.out.println(customer2);
        }
        session.close();
    }
}

持久化类Customer

package pojo;
public class Customer {
    private Integer id;        // 主键id
    private String username;   // 客户名称
    private String jobs;       // 职业
    private String phone;      // 电话
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getJobs() {
        return jobs;
    }
    public void setJobs(String jobs) {
        this.jobs = jobs;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "Customer [id=" + id + ", username=" + username +
                ", jobs=" + jobs + ", phone=" + phone + "]";
    }
}

运行测试类就会出现第一个图片里的报错 怎么解决呢?求详解!

你把你那个mybatis-config.xml改一下试试

<mappers>
 <!-- 通过resource属性引入classpath路径的相对资源-->
   <mapper resource="mapper/CustomerMapper.xml"/>
</mappers>

你的mapper.xml对应的java文件呢?

1、MyBatisUtils.getSession 这里面有getSession有没有对mapper的加载
2、你这个应该需要接口定义啊 参考https://blog.csdn.net/qq_15037825/article/details/105142593

没看到你的mapper层的接口呢?

基本是少Java的文件吧。先把目录结构整理一下吧,缺东西。
可以看一下我之前整理的:
https://blog.csdn.net/lydms/article/details/119246809

没有定义接口

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^