温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyBatis中DAO代理怎么使用

发布时间:2022-04-07 15:46:01 来源:亿速云 阅读:170 作者:iii 栏目:开发技术

这篇文章主要介绍了MyBatis中DAO代理怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis中DAO代理怎么使用文章都会有所收获,下面我们一起来看看吧。

    DAO代理实现数据库操作

    1、去掉Dao接口实现类

    MyBatis中DAO代理怎么使用

    2、getMapper获取代理对象

    只需调用 SqlSession 的 getMapper()方法,即可获取指定接口的实现类对 象。该方法的参数为指定 Dao 接口类的 class 值。

    SqlSession session = factory.openSession();
    StudentDao dao = session.getMapper(StudentDao.class);

    使用工具类

    StudentDao studentDao = 
    MyBatisUtil.getSqlSession().getMapper(StudentDao.class);

    getMapper()创建的对象,是代替我们自己创建的 StudentDaoImpl 类

    3、使用 Dao 代理对象方法执行 sql 语句

    select方法进行查询

    @Test
    public void testSelect() throws IOException {
     final List<Student> studentList = studentDao.selectStudents();
     studentList.forEach( stu -> System.out.println(stu));
    }

    insert方法进行插入

    @Test
    public void testInsert() throws IOException {
     Student student = new Student();
     student.setId(1006);
     student.setName("林浩");
     student.setEmail("linhao@163.com");
     student.setAge(26);
     int nums = studentDao.insertStudent(student);
     System.out.println("使用 Dao 添加数据:"+nums);
    }

    4、深入理解参数

    从 java 代码中把参数传递到 mapper.xml 文件。

    parameterType

    parameterType: 接口中方法参数的类型, 类型的完全限定名或别名。这个属 性是可选的,因为 MyBatis 可以推断出具体传入语句的参数,默认值为未设置 (unset)。接口中方法的参数从 java 代码传入到 mapper 文件的 sql 语句。

    • int 或 java.lang.Integer

    • hashmap 或 java.util.HashMap

    • list 或 java.util.ArrayList

    • student 或 com.bjpowernode.domain.Student

    <select>,<insert>,<update>,<delete>都可以使用 parameterType 指定类型。

    eg:

    <delete id="deleteStudent" parameterType="int">
     delete from student where id=#{studentId}
    </delete>
    等同于
    <delete id="deleteStudent" parameterType="java.lang.Integer">
     delete from student where id=#{studentId}
    </delete>

    一个简单参数

    Dao 接口中方法的参数只有一个简单类型(java 基本类型和 String),占位符 #{ 任意字符 },和方法的参数名无关。

    接口方法

    Student selectById(int id);

    mapper文件

    <select id="selectById" resultType="com.bjpowernode.domain.Student">
     select id,name,email,age from student where id=#{studentId}
    </select>

    #{studentId} , studentId 是自定义的变量名称,和方法参数名无关。

    测试方法

    @Test
    public void testSelectById(){
     //一个参数 
     Student student = studentDao.selectById(1005);
     System.out.println("查询 id 是 1005 的学生:"+student);
    }

    使用@Param

    当 Dao 接口方法多个参数,需要通过名称使用参数。 在方法形参前面加 入@Param(“自定义参数名”),mapper 文件使用#{自定义参数名}。

    例如定义 List<Student> selectStudent( @Param(“personName”) 

    String name ) { … } 

    mapper 文件 select * from student where name = 

    #{ personName}

    接口方法

    List<Student> selectMultiParam(@Param("personName") String name,
     @Param("personAge") int age);

    Mapper文件

    <select id="selectMultiParam" resultType="com.bjpowernode.domain.Student">
     select id,name,email,age from student where name=#{personName} or age 
    =#{personAge}
    </select>

    测试方法

    @Test
    public void testSelectMultiParam(){
     List<Student> stuList = studentDao.selectMultiParam("李力",20);
     stuList.forEach( stu -> System.out.println(stu));
    }

    使用对象

    使用 java 对象传递参数, java 的属性值就是 sql 需要的参数值。 每一个属性就是一个参数。

    语法格式: #{ property,javaType=java 中数据类型名

    jdbcType=数据类型名称 } javaType, jdbcType 的类型 MyBatis 可以检测出来,一般不需要设置。常用格式 #{ property }

    MyBatis中DAO代理怎么使用

     创建保存参数值的对象 QueryParam

    package com.bjpowernode.vo; 
    public class QueryParam {
     private String queryName;
     private int queryAge;
     //set ,get 方法
    }

    接口方法

    List<Student> selectMultiObject(QueryParam queryParam);

    Mapper文件

    <select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
     select id,name,email,age from student where name=#{queryName} or age 
    =#{queryAge}
    </select>
    或
    <select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
     select id,name,email,age from student
     where name=#{queryName,javaType=string,jdbcType=VARCHAR}
     or age =#{queryAge,javaType=int,jdbcType=INTEGER}
    </select>

    测试方法

    @Test
    public void selectMultiObject(){
     QueryParam qp = new QueryParam();
     qp.setQueryName("李力");
     qp.setQueryAge(20);
     List<Student> stuList = studentDao.selectMultiObject(qp);
     stuList.forEach( stu -> System.out.println(stu));
    }

    关于“MyBatis中DAO代理怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“MyBatis中DAO代理怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI