Dao设计模式
来源:互联网 发布:羽西的淘宝旗舰店 编辑:程序博客网 时间:2024/06/05 10:27
什么是Dao
DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口.现在的设计模式包括以下几步
1.VO(Value Object):用来对应数据库中的表
2.Dao(Data Access Object):定义公共数据操作方法的接口
3.DaoImpl:Dao的实现类,实现Dao定义的具体方法功能
下面,演示一个学过不久的例子
1.对照数据库,新建OV表:给大家一个小技巧,如果表中字段过多,可以使用以下方法:
(1)
(2)
(3)
(4)
(5)
这样在你转存的.sql文件中可以看出表机构,把你向新建的表的字段赋值
2.User.java
package com.Test_Dao.ov;/*** @author 唐学俊* @version 创建时间:2017年11月2日 下午1:15:19* */public class User { /*`userid` varchar(50) NOT NULL, `username` varchar(20) NOT NULL, `password` varchar(20) NOT NULL,*/ private String userid; private String username; private String password; public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}//ps:因为使用了最新版本的eclipse和jdk,头String方法暂时不能生成,懒得自己写
这样,对应数据库中的user表就生成了,
3.DaoBase接口
package com.Test_Dao.dao;/*** @author 唐学俊* @version 创建时间:2017年11月2日 下午1:20:23* */public interface DaoBase { //数据库连接大概抽取出三种 //1.查询(select) public Object QueryTang(); //2.修改(update,insert,delete) public boolean UpdateTang(String sql,Object... parmas); //3.关闭连接 public void close(AutoCloseable auto);}
4.DaoBaseImpl
package com.Test_Dao.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import com.Test_Dao.utils.CommonUtils;import com.Test_Dao.utils.DateBaseUtils;/** * @author 唐学俊 * @version 创建时间:2017年11月2日 下午1:26:58 * */public class DaoImpl implements DaoBase { Connection conn = null; PreparedStatement pstmt = null; public DaoImpl() { conn = DateBaseUtils.getConnection(); } @Override public Object QueryTang() { return null; } @Override public boolean UpdateTang(String sql,Object... params) { int count = 0; boolean flag = false; //调用检查参数匹配方法 if(CommonUtils.checkParameter(sql, params)) { new Exception("你输入的参数和占位符数量不一致"); }else { try { pstmt = conn.prepareStatement(sql); for(Object object :params) { count ++; pstmt.setObject(count, object);//将参数传递到数据库 } flag = true; } catch (SQLException e) { e.printStackTrace(); } finally { this.close(pstmt); this.close(conn); } } return flag; } @Override public void close(AutoCloseable auto) { try { auto.close(); } catch (Exception e) { e.printStackTrace(); } }}
4-1数据库连接
package com.Test_Dao.utils;/*** @author 唐学俊* @version 创建时间:2017年11月2日 下午6:40:53* */import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DateBaseUtils { // 数据库配置参数 private static final String url = "jdbc:mysql://localhost:3306/jdbc_test"; private static final String DataBaseUserName = "root"; private static final String DataBaseUserPassword = "960624"; // 获取连接 public static Connection getConnection() { Connection conn = null; // 加载驱动,获取连接 try { Class.forName("com.mysql.jdbc.Driver"); DriverManager.getConnection(url, DataBaseUserName, DataBaseUserPassword); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; }}
4-2检测输入的数据与占位符个数是否匹配
package com.Test_Dao.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @author 唐学俊 * @version 创建时间:2017年11月2日 下午7:00:30 * */public class CommonUtils { /** * 校验sql占位符和用户输入的参数是否匹配 * * @param sql * @param params * @return */ public static boolean checkParameter(String sql, Object[] params) { // 调用统计占位符方法 int counterPlaceHolder = counterPlaceHolder(sql); return counterPlaceHolder==params.length?true:false; } /** * 统计sql占位符方法 * @param str * @return */ public static int counterPlaceHolder(String str) { int count = 0; String patttern = "\\?"; Pattern compile = Pattern.compile(patttern); Matcher matcher = compile.matcher(str); if (matcher.find()) { count++; } return count; }}
5.测试类
package com.Test_Dao.dao;import com.Test_Dao.ov.User;import com.Test_Dao.utils.DBSUtils;/*** @author 唐学俊* @version 创建时间:2017年11月2日 下午7:47:56* 测试类*/public class Test { public static void main(String[] args) { DaoImpl dao = new DaoImpl(DBSUtils.getConnection()); String sql ="insert into user values (?,?,?)"; User user = new User(); user.setUsername("张三"); user.setPassword("123"); user.setUserid("15rs3r5se4"); boolean updateTang = dao.UpdateTang(sql,user.getUserid(),user.getUsername(),user.getPassword()); if(updateTang) { System.out.println("更新成功"); } }}
查看数据库中是否有数据
阅读全文
1 0
- 实现DAO 设计模式
- DAO设计模式
- 实现DAO 设计模式
- 什么DAO设计模式
- 设计模式--DAO
- DAO设计模式
- DAO设计模式
- 实现DAO 设计模式
- DAO设计模式(转)
- DAO 设计模式 总结
- DAO设计模式笔记
- DAO设计模式总结
- dao设计模式
- DAO设计模式
- DAO设计模式
- DAO 设计模式
- DAO设计模式基础
- DAO设计模式
- 无穷小微积分:发源于西方,扎根在中国
- Pick-up sticks
- package.json文件中的^和~的区别
- Android App监听软键盘按键的三种方式 以及 输入法删除退格键的冲突问题解决
- WebService
- Dao设计模式
- java设计模式总结八:代理模式
- "=="和equals方法究竟有什么区别?
- 急!在线等!遥控钥匙没电了怎么办?
- unity 遮挡剔除
- Redis学习笔记之六:集合类型Set
- 随机矩形(PeekMessage函数)
- java文件读取常用方法
- Java8 Stream