MyBatis实现数据库操作DAO的三种方式

本文介绍了MyBatis中进行数据库操作DAO的三种方法:1) Dao接口+Dao实现类+XML映射文件,2) Dao接口+XML映射文件,3) Dao接口+Annotation。其中,第一种方式较为繁琐,不推荐;第二种方式常见,通过XML配置SQL;第三种适合简单SQL,复杂情况维护困难。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Dao接口+Dao实现类+XML映射文件(不建议使用,较繁琐)

具体实现细节:通过在Dao接口的实现类中调用SqlSession的方法,与传统的在实现类中调用JDBC提供的一系列执行sql的方法大同小异

1. 创建Dao接口:

package com.oracle.dao;

import java.util.List;

import com.oracle.vo.Book;

public interface BookDao {
    /**
     * 插入一本图书
     * @param book
     */
    public void save(Book book);
    /**
     * 根据isbn删除图书
     * @param isbn
     */
    public void delete(Integer isbn);
    /**
     * 查询全部图书信息
     * @return
     */
    public List<Book> getAll();
}
  1. 创建具体的Dao实现类:具体调用SqlSession的方法执行数据库的操作
package com.oracle.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.oracle.utils.SessionUtil;
import com.oracle.vo.Book;

public class BookDaoImpl implements BookDao {

    public void save(Book book) {
        //获得session
        SqlSession session=SessionUtil.getSession();
        //执行操作
        session.insert("save", book);
        session.commit();
        session.close();
    }

    public void delete(Integer isbn) {
        //获得session
        SqlSession session=SessionUtil.getSession();
        //执行操作
        session.delete("delete", isbn);
        session.commit();
        session.close();
    }

    public List<Book> getAll() {
        //获得session
        SqlSession session=SessionUtil.getSession();
        //执行操作
        List<Book> list= session.selectList("getAll");
        session.close();
        return list;
    }

}
  1. 配置文件XML:只负责配置sql语句及参数
<?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.oracle.dao.BookDao">
    <insert id="save" parameterType="com.oracle.vo.Book"
        keyProperty="isbn" useGeneratedKeys="true">
        insert into
        book(isbn,bookname,price)
        values(null,#{bookName},#{price})
    </insert>
    <select id="getAll" resultType="com.oracle.vo.Book">
        select * from book
    </select>
    <delete id="delete" parameterType="int">
        delete from book where isbn=#{isbn}
    </delete>
</mapper> 
  1. 测试:
package mybatisTest;
import java.io.IOException;
import java.util.List;

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.After;
import org.junit.Before;

import com.oracle.dao.BookDao;
import com.oracle.dao.BookDaoImpl;
import com.oracle.vo.Book;
public class Test {

    @org.junit.Test
    public void test() throws IOException {
        BookDao dao=new BookDaoImpl();
//      Book book=new Book();
//      book.setBookName("深入了解java虚拟机");
//      book.setPrice(96);
//      dao.save(book);
//      System.out.println(book);
//      dao.delete(1);
        List<Book> list=dao.getAll();
        for (Book book : list) {
            System.out.println(book);
        }
    }

}

2.Dao接口+XML映射文件

要求:
    接口的名称与配置文件的namespace(命名空间)一致
    接口中方法名与配置文件中的id相对应  
    参数类型相同 
具体实现:创建满足上述条件的Dao接口以及XML映射文件,使用SqlSession提供的getMapper(Class<T> arg0);由Mybatis自动创建具体的实现类
示例:
package mybatisTest;
import java.io.IOException;
import java.util.List;

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.After;
import org.junit.Before;

import com.oracle.dao.BookDao;
import com.oracle.dao.BookDaoImpl;
import com.oracle.utils.SessionUtil;
import com.oracle.vo.Book;
public class Test {
    @org.junit.Test
    public void test() throws IOException {
        //获得session
        SqlSession session=SessionUtil.getSession();
        //通过session的getMapper方法,创建BookDao的实现类
        BookDao dao=session.getMapper(BookDao.class);
        Book book=new Book();
        book.setBookName("深入了解java虚拟机");
        book.setPrice(96);
        dao.save(book);
        session.commit();
        session.close();
        System.out.println(book);
    }
}

3. Dao接口+Annotation(仅用于简单的sql语句,复杂的sql使用该方式太繁琐,不易于维护)

具体实现:在Dao接口的方法上加入对应操作的Annotation,获得接口实现类的方法与Dao接口+映射文件方法相同(SqlSession 的getMapper()方法)
要求:需要使用配置文件(configuration.xml)中<mappers>的子标记<package>,name属性对应具有Annotation的接口的包名
    示例:`<package name="com.oracle.dao"/>`
示例: 
package com.oracle.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import com.oracle.vo.Book;
public interface BookDao {
    /**
     * 插入一本图书
     * @param book
     */
    @Insert("insert into book(isbn,bookname,price) values(null,#{bookName},#{price})")
    public void save(Book book);
    /**
     * 根据isbn删除图书
     * @param isbn
     */
    @Delete("delete from book where isbn=#{isbn}")
    public void delete(Integer isbn);
    /**
     * 查询全部图书信息
     * @return
     */
    @Select("select * from book")
    public List<Book> getAll();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值