Java MyBatis代理开发

1585364631
2023-03-12 / 0 评论 / 191 阅读 / 正在检测是否收录...

MyBatis代理开发

0. 环境准备

User.java

package org.example;

public class User {
    private Integer id;
    private String username;
    private String password;

    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 getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAll(){
        return "id=" + id + " username=" + username + " password=" + password;
    }
}

1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  • 创建UserMapper.java空接口
  • 创建UserMapper.xml文件(IDEA中resources创建目录使用/代替.)

image-20230312164459578

image-20230312164656725

2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

UserMapper.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="org.example.mapper.UserMapper">
    <select id="selectAll" resultType="org.example.User">
        select * from user;
    </select>
</mapper>

3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

UserMapper.java

package org.example.mapper;

import org.example.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

mybatis-config.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="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/java?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

4.编码:

  • 通过 SqlSession的 getMapper方法获取 Mapper接口的代理对象
  • 调用对应方法完成sql的执行

主函数调用

    public static void main(String[] args) throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        //  获取UserMapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        List<User> users = userMapper.selectAll();

        System.out.println(users.get(0).getAll());

        sqlSession.close();
    }

执行结果

id=1 username=admin password=1ed1252369b609c48a93ea80b57f52ed

细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

mybatis-config.xml

    <mappers>
        <!--    加载sql映射文件    -->
<!--        <mapper resource="org/example/mapper/UserMapper.xml"/>-->
        
        <!--    Mapper代理方式    -->
        <package name="org.example.mapper"/>
    </mappers>
0

评论 (0)

取消