一、首先设计数据库的表
a)根据你页面显示的字段
b)根据你实际需要的用户或者权限
c)需要关联的字段(主键和外键)
d)注意表名的命名问题
i.不要写中文
ii.保持小写
二、建立表与hibernate 中 model的映射关系
a)注意映射的每一个model的属性都要与配置文件中的字段一致。
b)配置hibernate中字段类型,都要与数据库中的类型一致。
c)看看表与表之间的关联性:
1)一对多:
首先,在一的一方的model属性为set类型的对应多的集合
在多的一方的model属性为一的对象
如:
一中cartype的属性为 private Set cars;
配置中为:
<set name="cars" inverse="true" cascade="save-update">
<key>
<column name="typeid"></column> //这里的列的名字为多表中的外键列名,一定要与数据库中的字段一致(容易出错)
</key>
<one-to-many class="pojo.Car"/>
</set>
多中car的属性为:private Cartype cartype;
配置中为:
<many-to-one name="cartype" class="pojo.Cartype">
<column name="typeid"></column> //这里的列的名字为多表中的外键列名,一定要与数据库中的字段一致(容易出错)
</many-to-one>
其次,在hibernate配置中进行修改
2)多对多
首先,在多的一方的model属性为set类型的对应对方的集合
同样在多的另一方的model属性为set类型的对应对方的集合
如:
在多的Team4Userinfo中的属性为:private Set roles;
配置中为:
<set name="roles" lazy="false" table="team4_user_role">
<key><column name="user_id"></column></key> //这里的列的名字为自身属性的 id并且与数据库中的字段一致
<many-to-many class="pojo.Team4Role" column="role_id"></many-to-many> //这里的列名的名字为对应多表的属性id,并且与数据库中的字段一致
</set>
在多的Team4Role 中的属性为: private Set users;
<set name="users" table="team4_user_role">
<key><column name="role_id"></column></key> //这里的列的名字为自身属性的 id并且与数据库中的字段一致
<many-to-many class="pojo.Team4Userinfo" column="user_id"></many-to-many> //这里的列名的名字为对应多表的属性id,并且与数据库中的字段一致
</set>
三、现在开始你的项目
1)关于日志
在此文件夹下有个日志需要引入,再在你的d盘建立一个logs文件,里面存放写好的log
2) 在你的xml中加一个
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
3)在struts中的配置中最后加一个
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>
4)引入filter
相应的在xml中加一个
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>characterEncoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5)每当新建一个action
其中的类型type都要改为:
org.springframework.web.struts.DelegatingActionProxy
6)spring中dataSource中的class
改为:org.springframework.jdbc.datasource.DriverManagerDataSource
四、现在开始真正的开发了
1)、编写你的dao(spring自带中就有数据库连接的打开和关闭)
a)首先编写基本的dao接口
b)在具体的 dao.Impl中先继承HibernateDaoSupport在实现改对应的dao接口,然后写该表的insert,update,delete,select方法
c)Insert,update方法的参数写成一个model对象;delete方法只需要接收主键作为参数;select方法接收一个sql语句(String类型)作为参数,返回值类型写成ResultSet
d)将方法的返回值类型改成boolean
e)注意在控制台打印你执行的SQL语句, 以便调试
2)、编写Service
a)在StudentService(接口)中声明你需要的业务方法:
i.boolean/void addStudent(Student s)
ii.boolean/void deleteStudent(String/int pk/id)
iii.boolean/void updateStudent(Student s)
iv.ArrayList selectAllStudents()
b)在StudentServiceImpl(类)中实现以上方法:
i.首先定义dao接口的属性
如private StudentDAO dao
ii.在具体的add,delete,update,select方法中去编写你的业务代码,并且调用daoinsert,delete,update,select方法
iii.注意打印add,delete,update,select传入的参数,以便调试
3)编写你的action
a)、首先定义service接口的属性
如:private IMachineService machineService
b)、相对应的在spring中进行增加一条
<bean name="/machine" class="struts.action.MachineAction">
<property name="machineService">
<ref bean="machineService"/>
</property>
</bean>
<bean id="machineService" class="service.Impl.MachineServiceImpl">
<property name="userdao">
<ref bean="userdao"/>
</property>
</bean>
<bean id="userdao" class="dao.Impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
c)从request中获取表单传入的参数值,如果表单中字段值比较多的话,新建一个StudentForm以便参数的传递
i.StudentForm要符合JavaBean的规范
d)进行非空判断?防止NullPointerException
e)调用service的方法,同时将request取到的参数传入service
f)用一个ArrayList去接收service返回的记录行(StudenModel的对象数组)
g)将这个ArrayList放入session,同时也可以将页面需要的一些参数放入其中:pageno,totalpage,username等。
4)编写你的jsp页面:
a)注意page指令设定中文字符集
b)注意request.setCharacterEncoding(“gb2312”);
c)从session中取出ArrayList,注意转型
i.ArrayList ls=(ArrayList)session.getAttribute(“ls”);
d)遍历这个ArrayList,将值显示在页面上:
i.for(int i=0;i<ls.size();i++)
{
StudentModel s=(StudentModel)ls.get(i);
out.print(s.getName()+”</br>”);
out.print(s.getAge()+”</br>”);
……
}
e)从session中取出需要在页面显示的值
i.int pageno=((Integer)session.getAttribute(“pageno”)).intValue();
ii.去html标签中需要显示该值的位置替换为<%=pageno%>
附录
一、关于JavaBean的命名规范:
a)变量名(属性)小写,访问修饰符为private
b)set和get方法自动生成
c)一定写一个不带参数的构造函数,注意访问修饰符为public
二、关于Form的使用问题:
a)如果表单中的字段比较多,可以写一个StudentForm
b)属性跟表单中保持一致
c)属性名称也跟表单中的html对象的名称保持一致,全部小写
d)set和get方法自动生成
e)一定写一个不带参数的构造函数,注意访问修饰符为public
三、关于html和jsp页面的编写问题:
a)一定要编写一个form,让这个form被包含在body标记中
b)注意form的命名问题,建议命名为myform…,即name=”myform”
c)注意 form的method属性设置为post,即method=”post”
d)保持form的action属性为空,即action=””
e)表单对象的命名问题
i.HTML对象(文本框,按钮,下拉列表,复选框,单选框…)的名称保持小写
ii.注意提交按钮,如果你设置type=”submit”,就不要再写onClick事件
iii.注意按钮,如果设置type=”button”,就一定要设置onClick事件