代码拉取完成,页面将自动刷新
我们在开发的过程中,经常使用hibernate作为持久层的框架,因而,突发奇想地模拟hibernate这个框架,自己写个框架出来。 这里去除了hibernate框架晦涩的地方,当做自己学习材料还是不错的。里面涉及到反射等等。 这个项目中,你可以知道数据库连接池是怎么建的,又是怎么回收的。 使用警惕代码块加载配置文件
请参看我的博客:https://segmentfault.com/a/1190000018535188
//静态代码块,初始化常量池
static {
connections = new ArrayList<>();
Connection connection;
for (int i = 0; i < Connect.minPoolSize; i++) {
connection = connect.createConnect();
connections.add(connection);
}
}
这里用到Iterator类,它是所有容器的父接口,其内部有一个方法,那就是remove方法,在容器中删除当前对象
/**
* 获取session
*
* @param autoCommit
* @return
*/
private Session getSession(boolean autoCommit) {
//【1】判断连接池有可用的连接对象
boolean hasNoValidConn = hasValidConnction();
//【2】没有可用的连接池,使用最大的连接池
if (!hasNoValidConn) {
for (int i = 0; i < (Connect.maxPoolSize - Connect.minPoolSize); i++) {
connections.add(connect.createConnect());
}
}
//【3】有可用的连接
for (Iterator iterator = connections.iterator(); iterator.hasNext(); ) {
Connection connection = null;
try {
connection = (Connection) iterator.next();
connection.setAutoCommit(autoCommit);
Session session = new Session(connection);
iterator.remove();
return session;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
@Ignore
public void testList() {
Session session = new SqlSessionFactory().openSession();
String sql = "SELECT " +
" customer_name AS customerName, " +
" `name` AS projectName " +
"FROM " +
" project where id >= ? and id <= ?";
SqlQuery query = session.createSqlQuery(sql);
query.setParamter(0, 1);
query.setParamter(1, 2);
query.addScalar("customerName", StandardBasicTypes.STRING)
.addScalar("projectName", StandardBasicTypes.STRING);
query.setTransformer(Transforms.aliasToBean(ProjectData.class));
List<ProjectData> projects = query.list();
for (ProjectData project : projects) {
System.out.println(project.getCustomerName() + " " + project.getProjectName());
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。