Dao.java与Dao.xml相互关联

Dao.java

package com.imooc.oa.dao;
import com.imooc.oa.entity.Department;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("departmentDao")
public interface DepartmentDao {
    void insert(Department department);
    void update(Department department);
    void delete(String sn);
    Department select(String sn);
    List<Department> selectAll();
}

Dao.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.oa.dao.DepartmentDao"> /*与接口位置对应*/

    <resultMap id="department" type="Department">/*id建议接口名小写 type为接口名*/
        <id property="sn" column="sn" javaType="String"/>/*主键  property实体类属性colum数据库表字段*/
        <result property="name" column="name" javaType="String"/>
        <result property="address" column="address" javaType="String"/>
    </resultMap>


    <insert id="insert" parameterType="Department">/*id为interface的方法名*/
        insert into department values(#{sn},#{name},#{address})/*#{xxx}为实体类的属性*/
    </insert>

    <update id="update" parameterType="Department">
        update department set name=#{name},address=#{address} where sn=#{sn}
    </update>/*name=#{name}第一个name为数据库字段名 第二个为实体类属性名*/

    <delete id="delete" parameterType="String">/*parameterType传给数据库的值的类型 */
        delete from department where sn=#{sn}
    </delete>

    <select id="select" parameterType="String" resultMap="department">
        select * from department where sn=#{sn}
    </select>

    <select id="selectAll" resultMap="department">/*resultMap从数据库返回的值的类型*/
        select * from department
    </select>

</mapper>
### 正确配置 MyBatis 的 `UserMapper.xml` 文件路径 为了正确配置 `UserMapper.xml` 文件路径,需遵循以下原则: #### 1. **文件位置** 通常情况下,`UserMapper.xml` 应放置于资源目录下。推荐将其放在 `src/main/resources` 下对应的包结构中,例如: `src/main/resources/com/jiangy/reggie/dao/mapper/UserMapper.xml` 这种做法可以保持项目结构清晰,并便于维护。 #### 2. **Mapper 接口 XML 文件关联** 在 MyBatis 中,`Mapper` 接口中需要通过 `@MapperScan` 或手动注册的方式绑定到具体的 XML 文件。以下是两种常见的方法: - 使用注解方式: ```java @Mapper public interface UserMapper { // 方法声明 } ``` - 手动扫描 Mapper 接口: 在 Spring Boot 配置类中添加: ```java @Configuration @MapperScan("com.jiangy.reggie.dao.mapper") public class MyBatisConfig {} ``` 上述代码会自动扫描 `com.jiangy.reggie.dao.mapper` 包下的所有接口并加载其对应的 XML 文件[^2]。 #### 3. **XML 文件的命名空间 (Namespace)** 确保 `UserMapper.xml` 文件中的 `<mapper>` 标签设置了正确的 `namespace` 属性,该属性应为对应 Mapper 接口的全限定名: ```xml <mapper namespace="com.jiangy.reggie.dao.mapper.UserMapper"> </mapper> ``` 如果 `namespace` 设置错误,则可能导致 SQL 查询无法匹配到相应的 Mapper 接口[^3]。 #### 4. **Spring Boot 自动化配置支持** 在 Spring Boot 项目中,默认会将 `resources` 目录下的 `.xml` 文件作为静态资源配置加载。因此只需按照标准路径存放即可被框架发现。但如果遇到问题,可以通过显式设置 MyBatis 配置项解决: ```properties mybatis.mapper-locations=classpath*:com/jiangy/reggie/dao/mapper/*.xml ``` 此配置指定了 MyBatis 去查找 Mapper 文件的位置[^4]。 #### 5. **通用 Mapper 支持** 如果使用 tk.mybatis 提供的通用 Mapper 功能,可以直接继承 `TkMapper<T>` 并省去部分重复编码工作。例如: ```java public interface UserMapper extends TkMapper<User> { // 定义额外的方法 } ``` 此时无需单独编写复杂的 CRUD 操作逻辑,简化开发流程[^5]。 --- ### 示例代码 假设有一个简单的查询操作需求,下面展示完整的配置过程: #### Java 接口 (`UserMapper.java`) ```java package com.jiangy.reggie.dao.mapper; import org.apache.ibatis.annotations.Select; import tk.mybatis.mapper.common.Mapper; public interface UserMapper extends Mapper<User> { @Select("SELECT * FROM users WHERE id = #{id}") User findById(Integer id); } ``` #### 对应的 XML 文件 (`UserMapper.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="com.jiangy.reggie.dao.mapper.UserMapper"> <!-- 如果未定义注解SQL, 则在此处写具体SQL --> </mapper> ``` #### Spring Boot 配置 (`application.properties`) ```properties mybatis.mapper-locations=classpath*:com/jiangy/reggie/dao/mapper/*.xml ``` --- ### 注意事项 - 确保项目的 Maven 构建工具已正确定义依赖关系。 - 若使用 IDEA 开发环境,建议按引用[1]描述的操作步骤完成模板初始化,从而减少手动生成 XML 文件的工作量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值