接下来继续完成各作者出版图书数量、图书价格数量总计、各评分书籍数量的相关代码及结果展示。具体不详细讲了,可参考(四)https://blog.csdn.net/qq_45804925/article/details/113117424
1 各作者出版图书数量
1.1 在cn.geo.doubanbook.entity包下创建Author.java类
package cn.geo.doubanbook.entity;
import java.io.Serializable;
/**
* 各作者出版图书数量
* @author SGG
*
*/
public class Author implements Serializable{
private static final long serialVersionUID = 1365043351381386615L;
private String author;
private Integer num;
public Author() {
}
public Author(String author, Integer num) {
super();
this.author = author;
this.num = num;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((author == null) ? 0 : author.hashCode());
result = prime * result + ((num == null) ? 0 : num.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Author other = (Author) obj;
if (author == null) {
if (other.author != null)
return false;
} else if (!author.equals(other.author))
return false;
if (num == null) {
if (other.num != null)
return false;
} else if (!num.equals(other.num))
return false;
return true;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
return "Author [author=" + author + ", num=" + num + "]";
}
}
1.2 在cn.geo.doubanbook.dao包下创建AuthorDAO.java类
package cn.geo.doubanbook.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import cn.geo.doubanbook.entity.Author;
import cn.geo.doubanbook.util.DBUtils;
/**
* 各作者出版图书数量的持久层类
* @author SGG
*
*/
public class AuthorDAO {
/**
* 查询各作者出版图书数量
* @return
* @throws SQLException
*/
public List<Author> listAuthor() throws SQLException {
List<Author> list = new ArrayList<Author>(248);
// 从数据库连接池获取连接
Connection conn = DBUtils.getConn();
// 声明SQL的执行器
Statement st = conn.createStatement();
// 执行SQL语句
String sql = "select * from book_author_num";
ResultSet rs = st.executeQuery(sql);
// 对结果集进行操作
while(rs.next()) {
// 获取该行数据中的指定字段
String author = rs.getString("author");
int num = rs.getInt("num");
// 创建Author对象,封装一行数据
Author an= new Author(author, num);
// 将Author对象 保存到集合中
list.add(an);
}
// 关闭连接释放资源
st.close();
conn.close();
return list;
}
}
1.3 持久层测试用例开发
package cn.geo.doubanbook.dao;
import java.sql.SQLException;
import java.util.List;
import org.junit.Test;
import cn.geo.doubanbook.dao.AuthorDAO;
import cn.geo.doubanbook.entity.Author;
public class AuthorDAOTest {
AuthorDAO dao = new AuthorDAO();
@Test
public void listAuthor() throws SQLException{
List<Author> list = dao.listAuthor();
list.forEach(item->System.out.println(item));
}
}
1.4 在cn.geo.doubanbook.entity包下创建AuthorVO.java类
package cn.geo.doubanbook.entity;
import java.io.Serializable;
import java.util.List;
public class AuthorVO implements Serializable{
private static final long serialVersionUID = 4109889845897505740L;
private List<String> xData;
private List<Integer> yData;
public AuthorVO() {
}
/**
* @param xData
* @param yData
*/
public AuthorVO(List<String> xData, List<Integer> yData) {
super();
this.xData = xData;
this.yData = yData;
}
@Override
public String toString() {
return "AuthorVO [xData=" + xData + ", yData=" + yData + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((xData == null) ? 0 : xData.hashCode());
result = prime * result + ((yData == null) ? 0 : yData.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AuthorVO other = (AuthorVO) obj;
if (xData == null) {
if (other.xData != null)
return false;
} else if (!xData.equals(other.xData))
return false;
if (yData == null) {
if (other.yData != null)
return false;
} else if (!yData.equals(other.yData))
return false;
return true;
}
public List<String> getxData() {
return xData;
}
public void setxData(List<String> xData) {
this.xData = xData;
}
public List<Integer> getyData() {
return yData;
}
public void setyData(List<Integer> yData) {
this.yData = yData;
}
}
1.5 在cn.geo.doubanbook.service包下创建AuthorService.java类
package cn.geo.doubanbook.service;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.geo.doubanbook.dao.AuthorDAO;
import cn.geo.doubanbook.entity.Author;
import cn.geo.doubanbook.entity.AuthorVO;
public class AuthorService {
private AuthorDAO dao = new AuthorDAO();
public AuthorVO findAuthor() {
// 调用持久层方法,查询所需数据
List<Author> list = null;
try {
list = dao.listAuthor();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
// 创建xData,保存x轴数据
List<String> xData = new ArrayList<String>(list.size());
// 创建yData,保存y轴数据
List<Integer> yData = new ArrayList<Integer>(list.size());
// 遍历持久层查询到的数据
for(Author an: list) {
xData.add(an.getAuthor());
yData.add(an.getNum());
}
// 创建AuthorVO对象,封装xData和yData
AuthorVO vo = new AuthorVO(xData, yData);
return vo;
}