您的位置:首页 > 数据库

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

2018-03-14 14:19 441 查看

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();
}


创建具体的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;
}

}


配置文件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>


测试:

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: