[笔记]MyBatis通过 Mapper 代理实现自定义接口

382 阅读2分钟
  • 1.自定义接口
package com.example1.demo1.repository;

import com.example1.demo1.Entity.MenuEntity;

import java.util.List;

public interface MenuRepository {
    int save(MenuEntity menu);

    int update(MenuEntity menu);

    int deleteBuId(long id);

    List<MenuEntity> findAll();

    MenuEntity findById(long id);
}

  • 2.创建对应的 Mapper.xml

namespace:对应接口全类名

id:对应接口中的方法名

parameterType:参数类型

resultType:返回值类型

MenuMapper.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.example1.demo1.Mapper.MenuMapper">
    <select id="queryMenuList" parameterType="int"
            resultType="com.example1.demo1.Entity.MenuEntity">
        select * FROM Menu; 
    </select>
    <insert id=""></insert>
    <update id=""></update>
    <delete id=""></delete>
</mapper>

  • 3.在 config.xml 中注册Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--环境配置,连接的数据库-->
    <environments default="develement">
        <environment id="develement">
            <!--指定事务管理的类型,这里简单使用Java的JDBC的提交和回滚设置-->
            <transactionManager type="JDBC"></transactionManager>
            <!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
            <dataSource type="POOLED">
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
                <property name="url" value="jdbc:sqlserver://****;DatabaseName=****"></property>
                <property name="username" value="****"></property>
                <property name="password" value="****"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--这是告诉Mybatis区哪找持久化类的映射文件,对于在src下的文件直接写文件名,
            如果在某包下,则要写明路径,如:com/mybatistest/config/User.xml-->
<!--        <mapper resource="com/example1/demo1/Mapper/MenuMapper.xml"></mapper>-->
        <mapper
                resource="com/example1/demo1/repository/MenuRepository.xml"></mapper>
    </mappers>
</configuration>
  • 4.调用接口的代理对象完成相关业务操作 增删改必须调用 session.commit()
    InputStream inputStream = HelloController.class.getClassLoader().getResourceAsStream("config.xml");
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.build(inputStream);
    SqlSession session = factory.openSession();
    MenuRepository repository = session.getMapper(MenuRepository.class);
    List<MenuEntity> list = repository.findAll();

注意:应为Mapper.xml文件创建在 java 文件夹内部,getResourc默认可以获取 resource 文件夹下的资源,所以需要再pom.xml 中配置一下才能访问到 java 文件夹下的资源

 <build>
  <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
</build>