Spring- Hibernate数据基本操作

在阅读之前,最好对数据库,orm框架有简单的了解

1. 添加数据

DatabaseHelper.context();方法在我之前的(一)Spring- 开发环境搭建文章中有介绍,请圆度。

@Override
public boolean add(Plant plant) {
    Session context = DatabaseHelper.context();
    context.beginTransaction();
    try {
        context.save(plant);
        context.getTransaction().commit();
    }catch (Exception e){
        e.printStackTrace();
        return false;
    }
    finally {
        context.close();
    }
    return true;
}

这里面有个问题,就是添加成功后无论怎样都获取不到id,我的实体类型是通过数据库 schema反向生成的,添加成功之后,plant.getId获取的id都是0,不知道为什么, 后来不得不在根据其他的属性,再去做一次查询,才能得到id,如果谁能解决,请给我留言。

2. 查询数据

–sql语句查询

 Session context = DatabaseHelper.context();
//String sql = "select * from tb_user where id ="+ id ;
String sql = "select * from tb_user where tb_user.id = :id";
System.out.println(sql);
List list = context.createSQLQuery(sql).setInteger("id", id)
        .setResultTransformer(Transformers.aliasToBean(TbUserModel.class))
        .list();
return list;

–Cirteria查询,like,分页

Session context = DatabaseHelper.context();
Criteria criteria = context.createCriteria(Plant.class);
criteria.add(Restrictions.eq("userId",userId));
criteria.setFirstResult((page - 1) * size);
criteria.setMaxResults(size);
if(!StringHelper.isNullOrEmpty(key)) criteria.add(Restrictions.like("plantName","%" +key+"%"));

return criteria.list();

–查询单条记录

Session context = DatabaseHelper.context();
Plant plant = (Plant)context.get(Plant.class,plantId);
if (plant!=null){
    return  plant;
}
return null;

3. 删除数据

 @Override
    public boolean delete(int plantId) {
        Session context = DatabaseHelper.context();
        try {
            context.beginTransaction();
            Plant user =  (Plant)context.load(Plant.class, plantId);
            context.delete(user);
            context.getTransaction().commit();
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
        finally {
            context.close();
        }
        return true;
    }

4. 修改数据

–使用实体增加

@Override
public boolean edit(Plant plant) {
    Session context = DatabaseHelper.context();
    try {
        context.beginTransaction();
        context.update(plant);
        context.getTransaction().commit();
    }catch (Exception e){
        e.printStackTrace();
        return false;
    }
    finally {
        context.close();
    }
    return  true;
}


–使用字段修改

@Override
public boolean edit(int plantId) {
    Session context = DatabaseHelper.context();
    try {
     	Plant plant = context.load(Plant.class,plantId);
        context.beginTransaction();
		plant.setName("newname");
        context.getTransaction().commit();
    }catch (Exception e){
        e.printStackTrace();
        return false;
    }
    finally {
        context.close();
    }
    return  true;
}

5. 获取到的工厂方法和依赖注入

– 在没有spring ioc时候,可以使用这种方式获取Dao的实现类,业务层使用getDao(IService.Class)方法把自己的属性传入工厂方法从而获取实现类,、 这样的好处是服务层无需知道具体的实现类。


    public class DaoFactory {



        public static <T> T getDAO(Class interfaceClass)
        {

            if(interfaceClass == IUserDao.class){
                return  (T)new UserDao();
            }
            if(interfaceClass == IPlantDao.class){
                return  (T)new PlantDao();
            }
            return null;
        }


    }


– 我们的项目是spring 项目,当然会使用spring的ioc

1: 注解的规范

  • @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
  • @Service 通常作用在业务层,但是目前该功能与 @Component 相同。
  • @Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。

2: 属性注入

    public class UserService implements IUserService {

        @Resource(name = "IUserDao")
        IUserDao userDao;
    }

    @Bean("IUserDao")
    public class UserDao implements IUserDao {
    }

这样spring会自动在UserService实例化的时候,给我们注入UserDAO

Loading Disqus comments...
Table of Contents