記事のディレクトリ
DAOモード
DAOモードの紹介
データアクセスオブジェクト(データアクセスオブジェクト)
は、永続データへの
アクセスを実現するために、ビジネスロジックと永続データの間に配置されます
DAOはコンバーターとして機能し、
エンティティークラスとデータベースレコード間でデータを変換します
DAOモデルの構成
コードの実装例:
1.新しいBaseDAOインターフェースを作成します
最初に使用する必要のあるメソッドの名前を設定します。
コードは次のとおりです。
public interface BaseDAO {
void getConn(String driver,String url,String user,String pwd);
void query(String sql,String... params);
boolean update(String sql,String... params);
void close();
}
2.BaseDAOインターフェースの実装クラスBaseDAOImplを作成します
BaseDAOインターフェイスの各メソッドの特定の実装が完成しました。
コードは次のとおりです。
public class BaseDAOImpl implements BaseDAO {
private Connection conn;
private PreparedStatement pst;
private ResultSet rs;
public ResultSet getRs() {
return rs;
}
@Override
public void getConn(String driver, String url, String user, String pwd) {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(url,user,pwd);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void query(String sql, String... params) {
try {
pst=conn.prepareStatement(sql);
for (int i = 0; params!=null && i < params.length; i++) {
pst.setObject(i+1,params[i]);
}
rs=pst.executeQuery();
}
catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public boolean update(String sql, String... params) {
int num=0;
try {
pst=conn.prepareStatement(sql);
for (int i = 0; params!=null && i < params.length; i++) {
pst.setObject(i+1,params[i]);
}
num=pst.executeUpdate();
}
catch (SQLException e) {
e.printStackTrace();
}
return num>0;
}
@Override
public void close() {
try {
if (rs!=null)
rs.close();
if (pst!=null)
pst.close();
if (conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.新しいプロパティファイルを作成します
プロジェクト内のフォルダに新しいリソースを作成し、db.propertiesという名前の新しいファイルを作成し、アイデアのプロジェクトStructrueにおけるリソースフォルダとして設定(非常に重要な、あなたはそれを設定することを忘れてはいけません!!!)
デシベルで.propertiesファイル事前に設定したmysqlテーブルの内容に対応するキーワードを書き込みます
4.プロパティクラスを作成します
プロパティクラスメソッドを作成して、ソースファイルのコンテンツを読み取ります。
静的メソッドを使用する利点は、オブジェクトを最初に生成できることです。
public class Prop {
static Properties p=new Properties();
static {
try {
p.load(new FileInputStream("resources/db.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getValue(String key){
return p.getProperty(key);
}
}
5.学生クラスを作成します
データの保存に使用される
コードは次のとおりです。
public class Student {
private int stu_id;
private String stu_name;
private int grade_id;
private String gender;
private String address;
private String phone;
private String idCard;
@Override
public String toString() {
return "Student{" +
"stu_id=" + stu_id +
", stu_name='" + stu_name + '\'' +
", grade_id=" + grade_id +
", gender='" + gender + '\'' +
", address='" + address + '\'' +
", phone='" + phone + '\'' +
", idCard='" + idCard + '\'' +
'}';
}
public int getStu_id() {
return stu_id;
}
public void setStu_id(int stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public int getGrade_id() {
return grade_id;
}
public void setGrade_id(int grade_id) {
this.grade_id = grade_id;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
}
6.studentDaoクラスを作成します
主な方法として、データベースの追加、削除、変更、クエリ機能を具体的に実装します。
具体的なコードは次のとおりです。
public class StudentDao extends BaseDAOImpl {
//假装这里已经做了接口
private final String Driver= Prop.getValue("driver");
private final String url=Prop.getValue("url");
private final String user=Prop.getValue("user");
private final String pwd=Prop.getValue("pwd");
//根据学生id查询所有信息
public Student getStudentById(String id){
String sql="select * from student where stu_id=?";
getConn(Driver,url,user,pwd);
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 void insertInto(String stu_id,String stu_name,String grade_id,String gender){
String sql1="insert into student(stu_id,stu_name,grade_id,gender) values(?,?,?,?)";
getConn(Driver,url,user,pwd);
update(sql1,stu_id,stu_name,grade_id,gender);
}
public static void main(String[] args) {
StudentDao dao=new StudentDao();
// dao.insertInto("14","虚竹","3","男");
// Student student=dao.getStudentById("14");
// System.out.println(student);
Student student1=dao.getStudentById("14");
System.out.println(student1);
}
}
7.まとめ
プロパティファイルを使用する利点は、柔軟性があることです。データベースアドレスを変更したり、複数のデータベースにアクセスしたりする必要がある場合は、プロパティファイルのキーワードを変更するだけで済みます。これにより、プログラムコードの変更が減り、プログラムが作成されます。より柔軟で変更可能。