什么是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("更新成功");
}
}
}
查看数据库中是否有数据