javaDAO模式学习总结
2017-11-02 09:38
330 查看
DAO模式入门
1.什么是DAO模式
DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的业务逻辑分开,此模式的主要作用是封装对数据库的各种操作;
2.DAO模式的组成部分
VO:值对象,此对象只包含属性,而没有方法;代表数据库中表中的一条记录,一个VO与一个表是相对应的
DAO接口:定义对某个VO的所有操作
DAO实现类:DAO接口的具体实现
DAO工厂类:用来创建出DAO对象(可以没有)
3.案例代码
项目结构
说明
Book:图书表的VO类
BaseDao:所有DAO的父类,封装了所有DAO中可以使用的的通用方法
BookDao:图书的数据访问接口,定义了对图书表操作的所有方法
BookDaoImp:BookDao的实现类;
DaoTest:测试方法
4.部分代码
book.java
BaseDao.java
BookDao.java
BookDaoImpl.java
DaoTest.java
源码下载
1.什么是DAO模式
DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的业务逻辑分开,此模式的主要作用是封装对数据库的各种操作;
2.DAO模式的组成部分
VO:值对象,此对象只包含属性,而没有方法;代表数据库中表中的一条记录,一个VO与一个表是相对应的
DAO接口:定义对某个VO的所有操作
DAO实现类:DAO接口的具体实现
DAO工厂类:用来创建出DAO对象(可以没有)
3.案例代码
项目结构
说明
Book:图书表的VO类
BaseDao:所有DAO的父类,封装了所有DAO中可以使用的的通用方法
BookDao:图书的数据访问接口,定义了对图书表操作的所有方法
BookDaoImp:BookDao的实现类;
DaoTest:测试方法
4.部分代码
book.java
package com.oracle.vo; public class Book { private Integer isbn; //图书编号 private String bookName;//书名 private Integer price;//价格 @Override public String toString() { return "Book [isbn=" + isbn + ", bookName=" + bookName + ", price=" + price + "]"; } public Integer getIsbn() { return isbn; } public void setIsbn(Integer isbn) { this.isbn = isbn; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public Integer getPrice() { return price; } public void setPrice(Integer price) { this.price = price; } public Book(String bookName, Integer price) { super(); this.bookName = bookName; this.price = price; } public Book() { super(); } }
BaseDao.java
/** * 所有Dao的父类 */ package com.oracle.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.*; public class BaseDao { //获得连接 public Connection getConnection() { Connection conn=null; try { conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/books","root","tiger"); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 关闭资源 * @param auto,jdk7后的接口 */ public void close(AutoCloseable auto) { if(auto!=null) { try { auto.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 动态执行sql * @param sql:预编译的sql * @param objs:可变参数 */ public void executeSql(String sql,Object...objs) { //获得连接 Connection conn=this.getConnection(); PreparedStatement ps=null; try { ps=conn.prepareStatement(sql); //设置参数 for(int i=0;i<objs.length;i++) { ps.setObject(i+1, objs[i]); } //执行sql ps.execute(); }catch(Exception e) { e.printStackTrace(); }finally { this.close(ps); this.close(conn); } } /** * 执行一条select语名,并且将返回结果封装到List中,每条记录对一个Map * @param sql:sql查询语句,可带参数(?) * @param objs:可变参数 * @return */ publ 4000 ic List<Map<String,Object>> executeQuery(String sql,Object...objs){ List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); Connection conn=this.getConnection(); PreparedStatement ps=null; ResultSet rs=null; try { ps=conn.prepareStatement(sql); for(int i=0;i<objs.length;i++) { ps.setObject(i+1, objs[i]); } //执行查询 rs=ps.executeQuery(); //获得元数据 ResultSetMetaData rsmd=rs.getMetaData(); //将每条记录转成一个Map,key是列名,value是字段值 while(rs.next()) { Map<String,Object> map=new HashMap<String,Object>(); for(int i=1;i<=rsmd.getColumnCount();i++) { map.put(rsmd.getColumnLabel(i), rs.getObject(i)); } list.add(map); } }catch(Exception e) { e.printStackTrace(); }finally { this.close(rs); this.close(ps); this.close(conn); } return list; } }
BookDao.java
package com.oracle.dao; import java.util.List; import com.oracle.vo.Book; public interface BookDao { //插入图书 public void save(Book book); //修改图书 public void update(Book book); //删除图书 public void delete(int isbn); //查询所有图书 public List<Book> getAll(); //根据图书编号获得图书 public Book getBookById(int isbn); //分页查询图书 public List<Book> getAllByPage(int pageNumber,int pageSize); }
BookDaoImpl.java
package com.oracle.dao; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.oracle.vo.Book; public class BookDaoImpl extends BaseDao implements BookDao { @Override /** * 插入图书 */ public void save(Book book) { this.executeSql("insert into book values(null,?,?)", book.getBookName(),book.getPrice()); } @Override /** * 修改图书 */ public void update(Book book) { this.executeSql("update book set bookName=?,price=? where isbn=?", book.getBookName(),book.getPrice(),book.getIsbn()); } @Override /** * 删除图书 */ public void delete(int isbn) { this.executeSql("delete from book where isbn=?", isbn); } @Override /** * 获得所有的图书 */ public List<Book> getAll() { return this.convert(this.executeQuery("select isbn,bookName,price from book")); } @Override /** * 根据主键获得唯一的图书 */ public Book getBookById(int isbn) { List<Book> list=this.convert(this.executeQuery("select isbn,bookName,price from book where isbn=?",isbn)); return list.isEmpty()?null:list.get(0); } @Override /** * 分页查询 */ public List<Book> getAllByPage(int pageNumber, int pageSize) { return this.convert(this.executeQuery("select isbn,bookName,price from book order by isbn limit ?,?",(pageNumber-1)*pageSize,pageSize)); } /** * 将Map转成Book * @param list * @return */ private List<Book> convert(List<Map<String,Object>> list){ List<Book> bList=new ArrayList<Book>(); for(Map<String,Object> map:list) { Book b=new Book(); b.setIsbn((Integer)map.get("isbn")); b.setBookName(map.get("bookName").toString()); b.setPrice((Integer)map.get("price")); bList.add(b); } return bList; } }
DaoTest.java
package com.oracle.test; import java.util.List; import com.oracle.dao.BookDao; import com.oracle.dao.BookDaoImpl; import com.oracle.vo.Book; public class DaoTest { public static void main(String[] args) { BookDao dao = new BookDaoImpl(); // 插入图书测试 Book book = new Book("把球交给薛庭政", 3); dao.save(book); //修改图书 book.setIsbn(5600); book.setBookName("大话数据结构"); dao.update(book); // 删除图书 dao.delete(569); // 查询所有图书 List<Book> list = dao.getAll(); for (Book b : list) { System.out.println(b); } System.out.println("---------"); // 查询一本图书 System.out.println(dao.getBookById(666)); //分页查询 list = dao.getAllByPage(2, 5); for (Book b : list) { System.out.println(b); } } }
源码下载
相关文章推荐
- 黑马程序员——Java学习笔记之12——已接触的“设计模式”总结
- java的设计模式,学习心得总结-工厂模式
- Java中的设计模式学习总结(二)---单例模式
- Java设计模式学习总结
- Java基础学习总结(84)——Java面向对象六大原则和设计模式
- Java-马士兵设计模式学习笔记-总结
- jdbc学习总结3------javabean+dao
- java - 设计模式学习总结
- JAVA 设计模式学习总结
- Java基础学习总结——Java23种设计模式(Design Patterns)详解
- java访问者模式学习总结
- 关于java中static关键字在单态设计模式的应用学习和总结
- Java - 设计模式学习总结
- Java基础学习总结(84)——Java面向对象六大原则和设计模式
- Java学习之DAO设计模式
- Java-设计模式学习笔记-总结
- java 数据访问层DAO模式总结
- Java基础学习总结(85)——Java中四种线程安全的单例模式实现方式
- JAVA设计模式学习总结
- [学习笔记]JavaBean中DAO设计模式介绍