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("更新成功");        }    }}

更新成功
查看数据库中是否有数据
数据库

原创粉丝点击