mybatis基础_动态代理开发

1、使用原始dao开发需要编写mapper的接口和实现类

  1、编写接口

  

public interface UserDao {
    User getUserById(int userId);
}

  2、编写实现类

public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User getUserById(int userId) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession.selectOne("test.selectUserById", 1);
    }

}

  3、编写测试类

  

public class MybatisTest2 {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void getSqlSessionFactory() throws IOException {
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    }

    @Test
    public void Test() {
        UserDao userDao = new UserDaoImpl(sqlSessionFactory);
        User user = userDao.getUserById(1);
        System.out.println(user);
    }
}

2、在编写代码的过程中逐渐发现所有实现类的方方法体内的代码都是相似的,唯独不同的是调用SQLSession的方法不同。所以推荐使用mybatis的动态代理的方式来开发

3、mybatis动态代理开发有五点要求

  1、xml文件和接口必须在同一文件夹(包)下

  2、xml中的id和接口的方法名相同

  3、xml的namespace要和接口的全类名相同

  4、接口的返回值类型要和xml中的一致

  5、xml中的参数要和接口的参数相同

4、使用方式

  1、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.liuxianglin.mybatis.study.mapper.UserMapper">

    <select id="getUserById" parameterType="int" resultType="user">
        SELECT * FROM `user` WHERE id = #{id};
    </select>

    <select id="listUserByName" parameterType="QueryVo" resultType="userMap">
        SELECT * FROM `user` WHERE `username` LIKE CONCAT(‘%‘,#{user.userName},‘%‘);
    </select>

    <select id="getUserCount" resultType="int">
        SELECT COUNT(1) FROM `user`;
    </select>
</mapper>

  2、接口

  

public interface UserMapper {
    /**
     * 通过id查询用户数据
     */
    User getUserById(int id);

    /**
     * 模糊查询数据
     */
    List<User> listUserByName(QueryVo queryVo);

    /**
     * 查询用户条目数
     */
    Integer getUserCount();
}  

  3、测试类

public class MybatisTest {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void getSqlSession() throws IOException {
        /*获得文件流*/
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        /*获取SQLSession工厂*/
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    }

    @Test
    public void test() {
        /*获取SQLSession连接*/
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /*动态代理获取Mapper实现类*/
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        /*执行方法*/
        User user = userMapper.getUserById(1);
        System.out.println(user);
    }
}

原文地址:https://www.cnblogs.com/l48x4264l46/p/10957735.html

时间: 2024-11-09 07:48:53

mybatis基础_动态代理开发的相关文章

JAVA基础_动态代理的基本API

JDK动态代理 代理类中使用的方法需要声明在接口中 需要得到目标类的对象 Cglib包中的动态代理 import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import org.junit.Test; import java.lang.reflect.InvocationHandler; import java.l

Mybatis框架三:DAO层开发、Mapper动态代理开发

这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqing/p/8601506.html 但是发现代码重复过多等问题 接下来整合并实现DAO开发: 一:原始DAO开发: package dao; import pojo.User; public interface UserDao { public User selectUserById(Integer

MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

摘自:https://www.cnblogs.com/yichunguo/p/11990961.html 目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Mapper动态代理方式 1.定义Mapper.xml(映射文件) 2.编写UserMapper.xml配置文件内容: 3.编写UserMapper(接口文件) 4.加载UserMapper.xml

MyBatis - Mapper动态代理开发

采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法. - Mapper接口开发需要遵循以下规范: ① Mapper.xml文件中的namespace与mapper接口的全类名相同. ② Mapper接口方法名和Mapper.xml中定义的statement的id相同. ③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的paramet

mybatis(Mybatis与hibernate的不同、原始Dao开发、Mapper动态代理开发)

1.Mybatis与hibernate的不同 (1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句.mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象. mybatis需要在配置文件中书写sql语句: <delete id="deleteStudentById" parameterType="

mapper动态代理开发

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/s

Spring之AOP原理_动态代理

面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming).声明式编程是和命令式编程(Imperative Programming)相对的概念.我们平时使用的编程语言,比如C++.Java.Ruby.Python等,都属命令式编程.命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么(How to do What).声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么

第17天(基础加强_注解_类加载器_动态代理)_学习目标版本

学习目标 能够使用Junit进行单元测试 能够说出注解的作用 能够使用JDK提供的3个注解 能够根据基本语法编写自定义注解实现类 能够了解自定义注解解析 能够了解元注解使用 能够根据上课案例分析,编写模拟@Test案例 能够理解动态代理原理 能够使用动态代理Proxy编写代理类 Junit单元测试 Junit介绍 JUnit是一个Java语言的单元测试框架,简单理解为可以用于取代java的main方法.Junit属于第三方工具,一般情况下需要导入jar包,不过,多数Java开发环境已经集成了JU

day19_java基础加强_动态代理+注解+类加载器

一.动态代理 1.1.代理模式 ? ? 什么是代理模式及其作用? ? ? ? ? Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一.? ? ? ? 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.? ? ? ? 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用.? ? 优点:? ? ? ? (1) 职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件