MyBatis 项目建立教程

一、快速开始

1.1 项目结构

mybatis-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── cn.cjxy/
│   │   │       ├── entity/Emp.java
│   │   │       ├── mapper/EmpMapper.java
│   │   │       └── App.java
│   │   └── resources/
│   │       ├── mybatis-config.xml
│   │       └── cn/cjxy/mapper/EmpMapper.xml
│   └── test/
│       └── java/.../EmpMapperTest.java

1.2 Maven依赖

<dependencies>
    
    <dependency>
        <groupId>org.mybatisgroupId>
        <artifactId>mybatisartifactId>
        <version>3.5.6version>
    dependency>
    
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.25version>
    dependency>
dependencies>

二、核心配置

2.1 配置文件模板



DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/> 
    settings>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
              
                <property name="url" 
                          value="jdbc:mysql://localhost:3306/mydb?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            dataSource>
        environment>
    environments>
    
    <mappers>
      
        <mapper resource="cn/cjxy/mapper/EmpMapper.xml"/>
    mappers>
configuration>

2.2 实体类与Mapper接口

// Emp.java
public class Emp {
    private Integer id;
    private String name;
    private Integer age;
    private String addr;
    private Double salary;
    // Getter/Setter省略
}

// EmpMapper.java
public interface EmpMapper {
    List<Emp> findAll();
    Emp findById(int id);
}

三、SQL映射与测试

3.1 XML映射文件


<mapper namespace="cn.cjxy.mapper.EmpMapper">
    
    <select id="findAll" resultType="Emp">
        SELECT id, name, age, addr, salary 
        FROM emp
    select>
    
    <select id="findById" parameterType="int" resultType="Emp">
        SELECT * FROM emp WHERE id = #{id}
    select>
mapper>

3.2 单元测试

public class EmpMapperTest {
    @Test
    public void testFindAll() throws Exception {
        // 1. 读取配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        
        // 2. 创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        
        // 3. 获取SqlSession(自动提交事务)
        try(SqlSession session = factory.openSession(true)) {
            EmpMapper mapper = session.getMapper(EmpMapper.class);
            
            // 4. 执行查询
            List<Emp> emps = mapper.findAll();
            emps.forEach(e -> System.out.println(e.getName()));
        }
    }
}

四、常见问题解决

4.1 数据库连接失败

错误现象:

Cause: java.sql.SQLException: Access denied for user ‘root’@‘localhost’

解决方案:

  1. 检查用户名/密码是否正确
  2. 验证数据库权限:GRANT ALL PRIVILEGES ON mydb.* TO ‘root’@‘localhost’;

4.2 映射文件未加载

错误现象:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

解决方案:

  1. 检查XML文件路径是否匹配
  2. 验证XML中的namespace是否与接口全限定名一致

你可能感兴趣的:(Java基础,mybatis)