Hibernate ORM(Spring data JPA方式)举例与编码复杂度

172 篇文章 3 订阅
11 篇文章 0 订阅

Hibernate ORM(Spring data JPA方式)举例
例子来源于Spring data的官方例子,是采用JPA的方式。
7.1 每个实体对应的dao接口
public interface UserDao extends CrudRepository<User, Integer> {  }
public interface OrdersDao extends CrudRepository<Orders, Long> {
   //不能用组合条件.若要用,需要在对应接口写方法    
   List<Orders> findByUseridAndTotal(String userid, BigDecimal total);
}
public interface OrderitemDao extends CrudRepository<Orderitem, Long> { }

每个Dao都要定义一个接口文件,即使是空的也需要,那1000个JavaBean文件就要有1000个类似的接口。那n个JavaBean呢,就需要有n个类似的接口, 这样编码复杂度就是O(n)。

7.2 保存和查询数据库表的举例代码

    @Autowired

    private UserDao userDao;

    @Autowired

    private OrdersDao  ordersDao;

    @Autowired

    OrderitemDao orderitemDao;

     //...其它省略代码

         User n = new User();

         n.setName("testName");

         n.setEmail("hibernateUser@163.com");

         userDao.save(n);

        

         Orders orders=new Orders();

         orders.setUserid("Hibernate");

         orders.setName("ORM framework");

         orders.setTotal(new BigDecimal("92.22"));

         orders.setRemark("");  //empty String test

         ordersDao.save(orders);

        

         Orderitem orderitem=new Orderitem();

         orderitem.setOrderid(100001L);

         orderitem.setUserid("bee");

         orderitem.setCategory("book");

         orderitem.setPrice(new BigDecimal("30"));

         orderitemDao.save(orderitem);

        

//       ordersDao.findOne(id);   //不能用组合条件.若要用,需要在对应接口写方法   

//       List<Orders> list = (List<Orders>) ordersDao.findAll();

         List<Orders> list = (List<Orders>) ordersDao.findByUseridAndTotal("Hibernate",new BigDecimal("92.22"));

         for (int i = 0; i < list.size(); i++) {

             System.out.println(list.get(i).toString());

         }

        

7.3 打印的日志

Hibernate: insert into user (email, last_name, name, password, username) values (?, ?, ?, ?, ?)

Hibernate: insert into orders (createtime, name, remark, sequence, total, userid) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into orderitem (category, createtimne, orderid, price, remark, status, userid) values (?, ?, ?, ?, ?, ?, ?)

Hibernate: select orders0_.id as id1_1_, orders0_.createtime as createti2_1_, orders0_.name as name3_1_, orders0_.remark as remark4_1_, orders0_.sequence as sequence5_1_, orders0_.total as total6_1_, orders0_.userid as userid7_1_ from orders orders0_ where orders0_.userid=? and orders0_.total=?

Orders[id=1,userid=Hibernate,name=ORM framework,total=92.22,createtime=null,remark=, sequence=null]

7.4 结论

  1. 3个实体,需要写3个接口文件;n个实体则需要写n个。
  2. 需要为每一个实体定义不同的dao变量操作数据库,如userDaoordersDaoorderitemDaon个实体需要定义ndao变量。
  3. 使用Javabean中的字段,组合成查询条件,需要在接口中声明方法。
  4. 通过观察日志发现,不能默认过滤null和空字符串字段。像createtimenull,DB表设置了默认是当前时间时,还是被保存为null
  5. 编码复杂度为O(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值