一般做法:
建包:
action层新建java文件 @Controller新建action继承BaseAction
@Resource(name=新建的action)
@Controller
1.源码:public class NewAction extends BaseAction{
@Resource(name="newService")
private NewService newService;
2.@RequestMapping(value="/test/add.do")
public ModelAndView addNew(,,){
在类中(新建的在bean中)new一个对象
}
bean层 新建一个类继承...bean 定义各属性以及get{}set{}
domain层 @Entity(name="实例名")
@Table(name=,catalog=等可选)
新建(bean中)类的子类通过注解如@Column等定义表中字段
repository层 详细http://blog.youkuaiyun.com/ming070423/article/details/22082389
新建类继承JpaRepository,实现数据库的各项操作update,delete.
JpaRepository支持接口规范方法名查询。
例: @Repository("testRepository")
public interface TestRepository extends JpaRepository<TbTest,Integer> {
@Query("sql")
service层 根java文件声明接口,声明所有方法如publicinterface TestService
public int delete(String title);
建impl包的子java文件使用接口的实现,以及使用到的事物
如 public int delete(String title)
return testRepository.delete(title);
接口进行对象的封装
有关对数据层的理解: 在.sql中create table tb_1.....
在bean中定义类(类中定义私有属性体现封装性,定义参数getset)
在domain中使用注解@Entity@Table 类继承bean中的类,再@ID@Column
@Id
@Column(name = "id", unique = true)
public Integer getId() {
return super.getId();
}
在repository层中定义接口并继承JpRepository
repository层
@Query("from Params p where p.paramName like %?1% and p.isValid=true")
public List<ParamsBean> findParamsByName(String name);
service层
impl中
声明所有使用到的方法接口等
父类baseaction里常用方法有: sendSuccess(,);return getRedirectView("..//.do",succ );
ModelAndView mv=new ModelAndView("/index");return mv;
EJB3方法注入http://www.doc88.com/p-102817070421.html
@MappedSuperclass 用在父类上面。当这个类肯定是父类时,加此标注。如果改成@Entity,则继承后,多个类继承,只会生成一个表,而不是多个继承,生成多个表.
//Constructor
构造函数:在对象创建或者实例化时候被调用的方法。通常使用该方法来初始化数据成员和所需资源
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
JPA&hibernate注解 来自http://wenku.baidu.com/view/118fd4a4b0717fd5360cdc72.html
@Entity实例化实体 @Entity(name="EntityName") 必须 ,name 为可选,对应数据库中一的个表
@Table 表连接 @Table(name="",catalog="",schema="") 可选 , 通常和 @Entity 配合使用 , 只能标注在实体的 class 定义处 , 表示实体对应的数据库表的信息 name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称一致 , 只有在不一致的情况下才需要指定表名 catalog: 可选 , 表示 Catalog 名称 , 默认为 Catalog(""). schema: 可选 , 表示 Schema 名称 , 默认为 Schema("").
@id 必须 @id 定义了映射到数据库表的主键的属性 , 一个实体只能有一个属性被映射为主键 . 置于 getXxxx() 前
@GeneratedValue(strategy=GenerationType,generator="") 可选 strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表示让 ORM 框架自动选择 , 根据数据库的 Identity 字段生成 , 根据数据库表的 Sequence 字段生成 , 以有根据一个额外的表生成主键 , 默认为 AUTO.generator: 表示主键生成器的名称 , 这个属性通常和 ORM 框架相关 , 例如 ,Hibernate 可以指定 uuid 等主键生成方式
示例 : @Id
@GeneratedValues(strategy=StrategyType.SEQUENCE)
public int getPk() {
return pk;
}
@Basic(fetch=FetchType,optional=true) 可选 @Basic 表示一个简单的属性到数据库表的字段的映射 , 对于没有任何标注的 getXxxx() 方法 , 默认即为 @Basic fetch: 表示该属性的读取策略 , 有 EAGER 和 LAZY 两种 , 分别表示主支抓取和延迟加载 , 默认为 EAGER. optional: 表示该属性是否允许为 null, 默认为 true
示例 : @Basic(optional=false)
public String getAddress() {
return address; }
@Column表字段
@Column 描述了数据库表中该字段的详细定义 , 这对于根据 JPA 注解生成数据库表结构的工具非常有作用 . name: 表示数据库表中该字段的名称 , 默认情形属性名称一致 nullable: 表示该字段是否允许为 null, 默认为 true unique: 表示该字段是否是唯一标识 , 默认为 false
length: 表示该字段的大小 , 仅对 String 类型的字段有效 insertable: 表示在 ORM 框架执行插入操作时 , 该字段是否应出现 INSETRT 语句中 , 默认为 true updateable: 表示在 ORM 框架执行更新操作时 , 该字段是否应该出现在 UPDATE 语句中 , 默认为 true. 对于一经创建就不可以更改的字段 , 该属性非常有用 , 如对于 birthday 字段 . columnDefinition: 表示该字段在数据库中的实际类型 . 通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此 外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 . 示例 : @Column(name="BIRTH",nullable="false",columnDefinition="DATE")
public String getBithday() {
return birthday;
}