在cmd 里写入MySQL
学生系统需求:
1. 用户表(名字,性别,年龄),首页显示出来
2. 如果年龄大于18岁,状态栏显示成人,否则显示小朋友。
3. 页面不刷新,在首页点击【是否获奖】,弹出【是】或【否】
游戏规则:a.必须是女 b.年龄必须大于等于18岁,和少于15岁
【必须a.使用ajax技术 b.业务规则的代码写在service层。前后端互动】
一、 建立数据库
CREATE DATABASE student DEFAULT CHARACTER SET utf8;
二、建表(手动写SQL)
create table user(
id int primary key auto_increment,
user_name varchar(20),
sex int,
age int
);
--(0:男 1:女 2:其他)
三、 插入3条测试数据
insert into user(user_name,sex,age) values('小红',1,16);
insert into user(user_name,sex,age) values('小明',0,20);
insert into user(user_name,sex,age) values('小军',1,13);
三、 创建新的项目(到时直接导入war)
【参考之前的idea_maven的结合使用】
四、 建立4个目录action,service,dao,entity
五、 配置maven
Struts |
|
|
Spring |
自动包含core,beans,aop,但是版本不对 |
|
解决core,beans和struts的插件包版本冲突加进来 |
|
|
|
||
对web支持 |
|
|
Hibernate |
|
|
Struts与Spring结合的插件 |
|
|
Spring与Hibernate结合的插件 |
配置<bean id=”sessionFactory”> |
|
数据库连接池C3P0 |
配置<bean id=”myDataSource”> |
|
Mysql驱动包 |
由于版本问题,要注意URL以及driver的变化 |
|
根据前端的实际情况加入JSTL |
|
检查一下依赖jar包是否正常
三、 配置web.xml
熟悉web.xml所在的目录结构,代码中webappàWEB-INF中的一个文件
Web.xml头 |
|
配置struts的2个过滤器(3年前的struts是1个过滤器) |
如果不要struts,想使用springMVC,就把这项改为SpringMVC的Servlet |
配置spring的监听器 |
不管使用struts,还是SpringMVC,此spring监听器,都是必须的 |
三、 配置一个struts.xml
1. 用idea创建struts.xml文件,文件要保存到resources
2. 配置所有的action实例,由spring的容器创建
四、 配置Spring容器的配置文件applicationContext.xml
1、 用idea在resources根目录下,创建applicationContext.xml
2、 增加context和tx的支持
3、 此项目中,我们期待自己写的类使用注解,而不是<bean>,增加自动扫描包配置
4、 增加对DAO层的支持(SessionFactory的获取,事务的支持)
a. 提供相关的数据链接信息,方便实施人员可以随时修改数据库密码等
在applicationContext.xml中加入
<context:property-placeholder location="classpath:jdbc.properties"/>
如图,建立jdbc.properties文件
b. 配置数据连接池(本项目中使用的是C3P0,如果速度不够快,可以选DBCP)
编写一个DataSource的<bean>,注意里面的${driverClass}等变量来自于上一步的jdbc.properties文件
如下:
c. 继续在applicationContext.xml添加多一个SessionFactory的bean
5、 把事务的代码交给Spring来完成(这是一种AOP的应用)
我们在Dao层就不用再写beginTransaction commit, rollback,close
注意:编码时,需要在service层写上@Transactional
顺便补充说明,如图,搞清楚由谁去扫描对应的注解。
以上:所有的环境搭配,(struts2+hibernate5+spring5)已经完成,剩下的全是编码了。
导出一个war包,平时或者考试时,可以直接导入war到eclipse使用
后端代码:
一、 实体类
在entity建立一个实体类User
a.在类的前面写上@Entity,@Table
b.根据表结构,编写各个属性,然后填写get/set
c.在主键(id)前面加上
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
最好加上@Column(name="id")
d.其它字段加@ Column() 即可
e.对私有字段增加@Transient
二、 写Dao层,进行各种数据库的操作
1、 先写Dao接口UserDao
本例中设计一个方法getAllUser(),返回类型为:List<User>
2、 编写实现类UserDaoImpl
a、 implements UserDao
b、 添加未实现的方法getAllUser()
c、 添加注解@Repository和@Scope("prototype")
d、 添加一个SessionFactory的属性,未保证实例不为null,添加@Autowired
e、 编写具体数据库操作代码,生成一个session,然后调用具体api,注意不需要编写任何的事务代码(属于横切关注点的,交给Spring完成)
三、 写Service层,进行各种业务逻辑的操作(绝对不包含任何数据库代码)
1、 先写Service接口UserService
本例子中设计一个方法getAllUser(),返回类型为:List<User>
2、 编写实现类UserServiceImpl
a、 implements UserService
b、 添加未实现的方法getAllUser()
c、 对此方法添加一个注解:@Transactional
(因为此方法会调用Dao层,目的让Dao可以被Spring实现事务支持)
d、 对本类添加@Service 和@Scope("prototype")
e、 由于需要引用Dao的支持,所以添加一个Dao的属性,未保证实例不为null,添加@Autowired
f、 在getAllUser()中调用Dao层获取相关数据
g、 根据业务逻辑需要,假如有业务逻辑,先编写游戏规则
h、 返回结果
四、 编写Action层
1、 编写实现类UserAction(本质上是Struts的Action接口的实现类)
2、 写上注解@Controller和@Scope("prototype")
3、 编写方法showAllUser(),注意返回类型为String
4、 由于需要调用service层的东西,添加一个Service的属性,并且为了防止为,加入@Autowired
5、 调用service获取相关的数据(从数据库来的,以及经过service包装)
6、 把结果传递给前端的jsp页面
ActionContext.getContext().getValueStack().set();
7、 return this.SUCCESS;
8、 编写strtus.xml文件,配置返回结果与jsp的关系
a. 编写package的节点
b. 在package节点内,编写action节点
对应上name class method的属性值
c. 在action节点内,编写result,指定对应的jsp页面
前端代码:
编写jsp文件
1、 引入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
2、 使用相关<c:forEach>以及el表达式,进行数据的显示
3、 编写index.jsp,跳转到具体action去。