单例模式和DAO模式

本文介绍了Java编程中的两种重要模式——单例模式和DAO模式。单例模式是一种确保类只有一个实例的设计模式。DAO模式用于数据库访问,通过配置文件加载数据库参数,使得在数据库信息变动时,无需重启服务即可方便地进行更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、单例模式(设计模式的一种)

在这里插入图片描述

####################################懒汉式#########################################
public class TestSingle {
    private static TestSingle t =null;
    public synchronized static TestSingle newInstance(){
        if(t==null){
            return t=new TestSingle();
        }
            return t;
    }
    private TestSingle(){
    }

    public static void main(String[] args) {
        TestSingle ts= newInstance();
        System.out.println(ts);
        TestSingle ts1=newInstance();
        System.out.println(ts1);
    }
############################运行结果##############################################
cn.kgc.kb11.TestSingle@74a14482
cn.kgc.kb11.TestSingle@74a14482
###############################饿汉式##############################################
public class TestSingle2 {
    private static TestSingle2 ts=null;

    private TestSingle2(){}

    static{
        ts=new TestSingle2();
    }
    public static TestSingle2 getInstance(){
        return ts;
    }

    public static void main(String[] args) {
        TestSingle2 ts1=getInstance();
        System.out.println(ts1);
        TestSingle2 ts2=getInstance();
        System.out.println(ts2);
    }
}
###############################运行结果###########################################
cn.kgc.kb11.TestSingle2@74a14482
cn.kgc.kb11.TestSingle2@74a14482
##########################代理模式##############################################
public class Pet {
    public static final String TYPE_ONE="Dog";
    public static final String TYPE_TWO="Cat";
    public static Pet getInstance(String type){
        if(null==type)
            return null;
        if(type.equals(TYPE_ONE)){
            return new Dog();
        }
        if(type.equals(TYPE_TWO)){
            return new Cat();
        }
        return null;
    }
}
class Dog extends Pet{

}
class Cat extends Pet{

}

二、DAO模式

## 1.引入库
在这里插入图片描述

package cn.kgc.kb11.dao;

import cn.kgc.kb11.dao.impl.BaseDAOImpl;
import cn.kgc.kb11.entity.Student;

import java.sql.ResultSet;
import java.sql.SQLException;

public class StudentDao extends BaseDAOImpl {
    private final String DRIVER="com.mysql.jdbc.Driver";
    private final String URL="jdbc:mysql://192.168.186.100:3306/test";
    //根据学生id查询所有信息
    public Student getStudentById(String id) {
        String sql = "select * from student where stu_id=?";
        getConn(DRIVER, URL, "root", "ok");
        query(sql,id);
        ResultSet rs = getRs();
        //Data Access object
        Student s = new Student();
        try {
            if (rs.next()) {
                s.setStu_id(rs.getInt("stu_id"));
                s.setStu_name(rs.getString("stu_name"));
                s.setGrade_id(rs.getInt("grade_id"));
                s.setGender(rs.getString("gender"));
                s.setAddress(rs.getString("address"));
                s.setPhone(rs.getString("phone"));
                s.setIdCard(rs.getString("idCard"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            close();
        }
        return s;
    }
    public boolean insertIntoStudent(Student s){
        String sql="insert into student values(?,?,?,?,?,?,?)";
        getConn(DRIVER,URL,"root","ok");
        boolean update = update(sql, s.getStu_id() + "", s.getStu_name(), s.getGrade_id() + "", s.getGender(),null,null,null);
        if(update) return true;
        else return false;
    }

    public static void main(String[] args) {
        StudentDao dao=new StudentDao();
        Student s =  new Student(18,"白眉鹰王",3,"男",null,null,null);
//        Student student =dao.getStudentById("7");
//        System.out.println(student);
        boolean b = dao.insertIntoStudent(s);
        System.out.println(b ? "插入成功" : "插入失败");
    }
}

三、配置文件加载数据库访问参数

如果在java代码里添加数据库的访问信息,那么每次访问的数据库放生变化时,java里都需要重启服务,很麻烦,所以才有加载数据库访问参数的配置文件出现,修改起来比较方便。
在这里插入图片描述

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.186.100:3306/test
user=root
pwd=ok
public class Prop {
    static Properties p = new Properties();

    static {
        try {
            p.load(new FileInputStream("resources/db.properties"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String getValue(String key) {
        return p.getProperty(key);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值