前提须知
本章仅仅对使用hibernate的方法进行封装处理的优化记录过程。主题步骤主要分3个步骤如下
- 初次书写代码 ——————提出修改和修改方案
- 更新优化书写代码 ————主要是新添加优化功能
- 最后总结————————总结和进一步参考需要
注意:仅仅是记录学习过程。如有更好的方法可以留言。
初次代码
第一次书写hibernate的封装方法,主要分3步骤 1.开启2.服务 3.关闭。
以下是不足之处:
- 在修改和删除中没有和查找一样有判断数据库表中是否存在该id的用户,容易报错。(优化)
- 没有提供getAllId的方法,即查看所有用户的方法。也可以深入学习根据username中的关键词进行查找。
- 添加id的方式没有好好优化,可以优先空出部分的id先填入。(可以不用书写代码,方法和getAll类似,先找到空id再添加id,username,password,最后上交)
参考代码如下:
package com.test.dao;
import com.test.model.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
* @author 空Dian
*/
public class Hibernate {
/**
* 初始化变量
*/
Configuration configuration=null;
SessionFactory sessionFactory=null;
Session session=null;
Transaction transaction=null;
/**
*开始启动hibernate服务
*/
public void init(){
configuration=new Configuration().configure(); //实体化配置文件
sessionFactory=configuration.buildSessionFactory(); //获取session工厂
session=sessionFactory.openSession(); //打开session工厂
transaction=session.beginTransaction(); //开始事务
}
/**
*添加用户
*/
public void add(String username,String password){
User user=new User();
user.setUsername(username);
user.setPassword(password);
session.save(user);
transaction.commit();
transaction=session.beginTransaction();
}
/**
*修改ID为id的用户
*/
public void update(long id,String username,String password){
User user=(User) session.get(User.class,new Long(id));
user.setUsername(username);
user.setPassword(password);
session.update(user);
transaction.commit();
transaction=session.beginTransaction();
}
/**
*查找ID为id的用户
*/
public void getById(long id){
User user=(User) session.get(User.class,new Long(id));
if(user==null){
System.out.println("id为"+id+"的用户不存在");
} else{
session.update(user);
transaction.commit();
System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername());
transaction=session.beginTransaction();
}
}
/**
*删除ID为id的用户
*/
public void delete(long id){
User user=(User) session.get(User.class,new Long(id));
session.delete(user);
transaction.commit();
transaction=session.beginTransaction();
}
/**
*关闭hibernate服务
*/
public void close(){
transaction.commit();
if(session!=null){
session.close();
session=null;
}
if(sessionFactory!=null){
sessionFactory.close();
}
if(configuration!=null){
configuration=null;
}
}
}
更新优化之后代码如下:
注意: 本次操作优化了跳过id为空的用户,即数据库删除后造成id空出现象。有待提高,没有显示id为空的地方(如果有必要再进行修改更进方法else输出)。
/**
*查找ID为id及id之前的用户
*/
public void getAllId(long id){
for(long i=1;i<=id;i++) {
User user=(User) session.get(User.class,new Long(i));
if(user!=null){
session.update(user);
transaction.commit();
System.out.println("ID:"+user.getId()+" 用户名:"+user.getUsername());
transaction=session.beginTransaction();
}
}
}
总结:
- 本次操作仅使用与后台使用操作,不适合与前端联动操作。即虽然有初次学习借鉴性,有待提高与前端联动性。
- 查找所有人的方式还是不能好,虽然后台可以查看数据库所有人即最大id,但是还不够智能需要手动查看。
- 备注信息太少不利于他人(萌新)参考借鉴。