一、三层架构简介
(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);
}
}
}
查询单条记录:
查询多条记录: