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(); }
相关文章推荐
- mybatis中Dao的三种实现方式
- Mybatis原理解析(一)--java.sql数据库操作的基本实现方式
- 解决mybatis继承SqlSessionDaoSupport方式操作数据库不打印sql日志的问题。
- SpringBootl连接数据库MyBatis方式实现
- C#数据库操作特殊字符单引号三种处理方式
- Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- Laravel数据库操作的三种方式
- Mybatis通过注解方式实现批量插入数据库
- MyBatis操作数据库的两种方式
- 数据库--MyBatis的(insert,update,delete)三种批量操作
- 数据库--MyBatis的(insert,update,delete)三种批量操作
- 一些常用数据库操作在mysql及sql server中实现方式的差异
- kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步操作(一)
- Dao接口实现基本的数据库操作。增删改查
- Mybatis(一)—实现对数据库的增删改查操作
- Laravel数据库操作的三种方式
- mybatis实战之路,疯狂的数据库操作框架、动态sql实现CRUD及带条件的增CRUD
- 终极解决sqlserver、MySQL、Oracle三种数据库模糊查询语句,ssm框架mybatis操作数据库