Mybatis—代理模式

一、简介

1.代理模式

代理模式是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理类通常在原始对象的基础上提供了一些额外的功能,例如远程访问、安全性控制、延迟加载等。通过使用代理模式,可以在不改变原始对象的情况下增加一些额外的功能,同时也可以对原始对象进行保护和封装。

2. 优点

1. 代理模式可以实现客户端和被代理对象之间的解耦,客户端无需直接与被代理对象交互,而是通过代理进行间接访问,这样可以降低系统的耦合度。

2. 代理模式可以提高系统的安全性,因为代理对象可以对客户端的请求进行过滤和验证,确保只有合法的请求被传递给被代理对象。

3. 代理模式可以实现延迟加载,即在需要时才创建被代理对象,这样可以提高系统的性能和效率。

4. 代理模式可以实现远程代理,即客户端可以通过代理对象访问位于不同地址空间的对象,这样可以实现分布式系统的通信和协作。

5. 代理模式可以实现缓存代理,即代理对象可以缓存被代理对象的结果,当下次需要相同的结果时,直接返回缓存的结果,避免重复计算或访问。

6. 代理模式可以实现日志记录、性能统计等功能,通过在代理对象中添加额外的逻辑,可以实现对被代理对象的操作进行记录和监控。

二、静态代理模式 

1.开发规范

开发规范:

Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

Mapper接口的开发规范包括以下几点:

  1. 定义接口:创建一个Java接口,用于定义数据库访问操作。每个方法定义一个对应的数据库操作,包括增删改查等操作。

  2. 方法命名规范:方法名应该描述清楚其功能,可以使用动词开头,如addUser,deleteUser,getUser等。避免使用缩写和简写,保持方法名的可读性。

  3. 方法参数规范:方法参数应该明确指定,避免使用泛型。参数类型应该与数据库表的列类型对应。

  4. 返回值规范:方法的返回值应该明确指定,通常为数据库操作的结果或者查询结果。避免使用泛型,返回值类型应该与查询结果的类型对应。

  5. 注解使用规范:使用@Mapper注解标记Mapper接口,并使用@Param注解标记方法参数,用于指定参数名称。

  6. SQL语句规范:SQL语句应该使用注解的方式进行书写,避免使用字符串拼接的方式。SQL语句应该简洁明了,避免使用复杂的子查询和嵌套查询。

  7. 异常处理规范:数据库操作可能会出现异常,应该捕获异常并处理。可以使用try-catch语句捕获异常,并根据需要进行异常处理或者抛出异常给上层调用者处理。

  8. 单元测试规范:对于每个数据库操作方法,应该编写对应的单元测试用例进行测试。测试用例应该覆盖常见的正常和异常情况,确保数据库操作的正确性。

  9. 接口文档规范:对于每个方法,应该编写相应的接口文档,包括方法的功能描述、参数说明、返回值说明等。接口文档可以使用注释的方式写在接口方法上方。

 2.实现代码

定义mapper映射文件UserMapper.xml(内容同Users.xml),需要修改namespace的值为 UserMapper接口路径。将UserMapper.xml放在sr

下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="cn.test.mybatis.mapper.UserMapper">
<!-- 根据id获取用户信息 -->
	<select id="findUserById" parameterType="int" resultType="cn.test.mybatis.po.User">
		select * from user where id = #{id}
	</select>

</mapper>

 Mapper接口

package com.ba.mapper;

import com.ba.domain.Order;
import com.ba.domain.QueryUser;
import com.ba.domain.User;

import java.util.List;

public interface UserMapper {
    public User findUserById(int id);
}

测试类

package com.ba.test;

import com.ba.domain.*;
import com.ba.mapper.CommodityMapper;
import com.ba.mapper.OrderMapper;
import com.ba.mapper.UserMapper;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class TestDemo1{
    SqlSessionFactory ssf = null;
    @Before
    public void creatFactory(){
        try {
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test(){
        SqlSession sqlSession = ssf.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.findUserById(10);
        System.out.println(user);
    }
}

运行结果

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值