Nutz实现主键自增

本文是我转载的,源地址是:https://supanccy2013.iteye.com/blog/2209702,个人觉得值得收藏!

nutz的主键不在数据库底层实现主键自增,还是要依靠数据库底层实现主键自增。
     下面是oracl和nutz配合实现主键自增。

第一步:在数据库里完成主键自增的机制。
1,创建表T_PERSON(设置id字段为主键)

-- Create table
create table T_PERSON
(
  ID        NUMBER not null,
  NAME      NVARCHAR2(60),
  PASSWORD  NVARCHAR2(60),
  ADDRESSID NUMBER
)
tablespace SYSTEM
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table T_PERSON
  add constraint PK_PERSON primary key (ID)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

2,创建序列(实现主键自增的必要前提)

--创建序列(实现person,address主键自增的必要序列)
create sequence seq_nutz
increment by 1
start with 1
maxvalue 999999999;

3,给要主键自增的表上创建触发器(在插入前利用触发器给主键id赋值)

--给person表创建触发器--实现主键自增
CREATE TRIGGER trigger_pk_person BEFORE
insert ON  T_PERSON FOR EACH ROW
begin
select seq_nutz.nextval into:New.id from dual;
end;

4,测试
插入sql:

INSERT INTO t_person(NAME,password,Addressid) VALUES('陈超阳','123456789','24');

再次查询该条记录已经有了id 42了。
至此数据库设计已经ok。

第二步:nutz插入:
1,数据库实体模型设计

package com.supan.nuts.module;

import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.One;
import org.nutz.dao.entity.annotation.Table;

@Table("T_PERSON")
public class Person {
	
         //ID表示使用数据库的自增(默认的)
	@Id
	private Integer id;
	
	@Column("name")
	private String name;
	
	@Column("password")
	private String password;
	
	@Column("addressId")
	private Integer addressId;
	
	@One(target = Address.class,field = "addressId")
	private Address address;
         //省略getter setter....
}

2,插入的action。

package com.supan.nuts.action;

import org.nutz.dao.impl.NutDao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.adaptor.JsonAdaptor;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;

import com.supan.nuts.module.Person;

@IocBean
public class PersonAction {
	
	@Inject
	private NutDao dao;

	@At("/insertPerson")
	@Ok("json")
	@AdaptBy(type=JsonAdaptor.class)
	public String insertPerson(@Param("..") Person person) {
		dao.insertWith(person, "address");
		return "success";
	}
	
	public NutDao getDao() {
		return dao;
	}

	public void setDao(NutDao dao) {
		this.dao = dao;
	}
}

 

Nutz框架可以通过使用AOP(面向切面编程)实现在方法执行前后插入自定义的逻辑,实现对方法的拦截和增强。 在Nutz框架中使用AOP需要进行以下步骤: 1. 定义一个切面类,该类需要使用@Aspect注解进行标记,同时在该类中定义需要拦截的方法,可以使用@Before、@After、@AfterReturning、@AfterThrowing注解来定义方法的执行时机和拦截逻辑。 2. 在需要进行拦截的类或方法上使用@Aop注解,指定需要使用的切面类。 3. 在Nutz配置文件中启用AOP功能,可以通过配置文件或者Java代码的方式进行配置。 下面是一个使用Nutz AOP实现方法拦截和增强的示例: ```java //定义切面类 @Aspect public class MyAspect { @Before("execution(public * com.example.demo.service.UserService.*(..))") public void before(JoinPoint joinPoint) { System.out.println("方法执行前拦截"); } @After("execution(public * com.example.demo.service.UserService.*(..))") public void after(JoinPoint joinPoint) { System.out.println("方法执行后拦截"); } } //在UserService类上使用@Aop注解 @IocBean @Aop(MyAspect.class) public class UserService { public void addUser() { System.out.println("添加用户"); } } //在Nutz配置文件中启用AOP功能 aop.enable=true aop.packages=com.example.demo.aop ``` 在上面的示例中,定义了一个切面类MyAspect,使用@Before和@After注解分别定义了方法执行前和执行后的拦截逻辑。在UserService类上使用@Aop注解指定需要使用的切面类,然后在Nutz配置文件中启用AOP功能,并指定需要扫描的切面类所在的包。 当执行UserService类中的addUser方法时,会先执行MyAspect中的before方法,然后执行addUser方法,最后执行MyAspect中的after方法。通过这种方式,我们可以实现对方法的拦截和增强,达到自定义逻辑的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值