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