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