初探三层架构

一、三层架构简介
      (1)三层架构概述
      (2)项目包结构
二、ORM思想(object relationship mapping)
      (1)图解ORM思想
      (2)Test_ORM
            ①account.sql账户表
            ②手动封装RowMapper接口处理结果集
            ③TestORM.java


一、三层架构简介
(1)三层架构概述

在软件设计当中,为了实现软件的高内聚低耦合,会将整个代码的结构划分为表现层(View)业务层(Service)数据访问层(DAO)的三层结构。

  • 表现层(View):收集用户名密码,然后展示。
  • 业务层(Service):将拿来的数据进行加工和校验。
  • 数据访问层(DAO):负责数据库访问。

在这里插入图片描述

举例:转账的三层结构描述
在这里插入图片描述

(2)项目包结构

在这里插入图片描述

二、ORM思想(object relationship mapping)
(1)图解ORM思想

在这里插入图片描述
在这里插入图片描述

(2)Test_ORM

在这里插入图片描述

①account.sql账户表
CREATE TABLE ACCOUNT(
	cardid INT(7) PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(15) NOT NULL,
	PASSWORD VARCHAR(6) NOT NULL,
	balance double
);

INSERT INTO ACCOUNT(NAME,PASSWORD,balance) VALUES('小A','123456',500);
INSERT INTO ACCOUNT(NAME,PASSWORD,balance) VALUES('小B','123456',800);

SELECT * FROM ACCOUNT;

在这里插入图片描述

②手动封装RowMapper接口处理结果集

在这里插入图片描述
RowMapper.java:

package rowmapper;
import java.sql.ResultSet;

public interface RowMapper<T> {
	// 将ResultSet结果集封装成对象
	public T mappreRow(ResultSet rs);
}

AccountRowMapper.java:

package rowmapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import entity.Account;
import rowmapper.RowMapper;

public class AccountRowMapper implements RowMapper {

	@Override
	public Object mappreRow(ResultSet rs) {
		Account account = new Account();
		try {
			account.setCardid(rs.getInt(1));
			account.setName(rs.getString("name"));
			account.setPassword(rs.getString(3));
			account.setBalance(rs.getDouble(4));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return account;
	}
}

③TestORM.java
package test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import rowmapper.AccountRowMapper;
import rowmapper.RowMapper;
import entity.Account;
import util.JdbcUtil3;

public class TestORM {
	RowMapper rm = new AccountRowMapper();

	@Test
	public void testQuery() throws Exception {
		Connection conn = JdbcUtil3.getConnection();
		String sql = "select * from account where name ='小A'";
		PreparedStatement pstm = conn.prepareStatement(sql);
		ResultSet rs = pstm.executeQuery();
		// 创建Account对象,对应查询的一条记录
		Account account = new Account();
		// 处理结果集
		if (rs.next()) {
			account = (Account) rm.mappreRow(rs);
			// int cardid = rs.getInt("cardid");
			// String name = rs.getString("name");
			// String password = rs.getString("password");
			// double balance = rs.getDouble("balance");
			// // 查询的记录,给Account对象赋值
			// account.setCardid(cardid);
			// account.setName(name);
			// account.setPassword(password);
			// account.setBalance(balance);
		}
		System.out.println(account);
	}

	@Test
	public void testQueryAll() throws Exception {
		Connection conn = JdbcUtil3.getConnection();
		String sql = "select * from account";
		PreparedStatement pstm = conn.prepareStatement(sql);
		ResultSet rs = pstm.executeQuery();
		// 创建Account集合,对应多条记录
		List<Account> list = new ArrayList<Account>();
		Account account = new Account();
		while (rs.next()) {
			account = (Account) rm.mappreRow(rs);
			// int cardid = rs.getInt("cardid");
			// String name = rs.getString("name");
			// String password = rs.getString("password");
			// double balance = rs.getDouble("balance");
			// // 将查询的一条记录封装到一个Account对象中
			// Account account = new Account();
			// account.setCardid(cardid);
			// account.setName(name);
			// account.setPassword(password);
			// account.setBalance(balance);
			list.add(account);
		}
		// 遍历list
		for (Account account1 : list) {
			System.out.println(account1);
		}
	}
}

查询单条记录:

在这里插入图片描述
查询多条记录:

在这里插入图片描述

发布了328 篇原创文章 · 获赞 798 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/103380517