在cmd 里写入MySQL

学生系统需求

1. 用户表(名字,性别,年龄),首页显示出来

2. 如果年龄大于18,状态栏显示成人,否则显示小朋友。

3. 页面不刷新在首页点击【是否获奖】,弹出【是】或【否】

游戏规则a.必须是女  b.年龄必须大于等于18岁,和少于15

    【必须a.使用ajax技术  b.业务规则的代码写在service层。前后端互动】

一、 建立数据库

在cmd 里写入MySQL

 

CREATE DATABASE student DEFAULT CHARACTER SET utf8;

 在cmd 里写入MySQL

建表(手动写SQL

create table user(

  id int primary key auto_increment,

  user_name varchar(20),

  sex int,

  age int

);

--(0:1:2:其他)

 在cmd 里写入MySQL

三、 插入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);

在cmd 里写入MySQL在cmd 里写入MySQL

三、 创建新的项目(到时直接导入war

【参考之前的idea_maven的结合使用】

四、 建立4个目录action,service,dao,entity

 

五、 配置maven在cmd 里写入MySQL

Struts

在cmd 里写入MySQL

Spring

在cmd 里写入MySQL

自动包含core,beans,aop,但是版本不对

解决core,beansstruts的插件包版本冲突加进来





在cmd 里写入MySQL


在cmd 里写入MySQL



web支持

在cmd 里写入MySQL在cmd 里写入MySQL

Hibernate

在cmd 里写入MySQL

StrutsSpring结合的插件

在cmd 里写入MySQL

 在cmd 里写入MySQL

 

SpringHibernate结合的插件

在cmd 里写入MySQL

配置<bean id=”sessionFactory”>

数据库连接池C3P0

在cmd 里写入MySQL

配置<bean id=”myDataSource”>

Mysql驱动包

在cmd 里写入MySQL

由于版本问题,要注意URL以及driver的变化

根据前端的实际情况加入JSTL

在cmd 里写入MySQL

检查一下依赖jar包是否正常

在cmd 里写入MySQL

三、 配置web.xml

熟悉web.xml所在的目录结构,代码中webappàWEB-INF中的一个文件

在cmd 里写入MySQL

Web.xml

在cmd 里写入MySQL

配置struts2个过滤器(3年前的struts1个过滤器)

在cmd 里写入MySQL在cmd 里写入MySQL

如果不要struts,想使用springMVC,就把这项改为SpringMVCServlet

配置spring的监听器

在cmd 里写入MySQL

不管使用struts,还是SpringMVC,此spring监听器,都是必须的

三、 配置一个struts.xml

1. idea创建struts.xml文件文件要保存到resources

 在cmd 里写入MySQL在cmd 里写入MySQL

 

2. 配置所有的action实例,由spring的容器创建

 在cmd 里写入MySQL

四、 配置Spring容器的配置文件applicationContext.xml

1、 idearesources根目录下,创建applicationContext.xml

 在cmd 里写入MySQL在cmd 里写入MySQL

 

 

2、 增加contexttx的支持

 在cmd 里写入MySQL

3、 此项目中,我们期待自己写的类使用注解,而不是<bean>,增加自动扫描包配置

 在cmd 里写入MySQL在cmd 里写入MySQL

 

4、 增加对DAO层的支持(SessionFactory的获取事务的支持)

a. 提供相关的数据链接信息,方便实施人员可以随时修改数据库密码等

applicationContext.xml中加入

<context:property-placeholder location="classpath:jdbc.properties"/>

 在cmd 里写入MySQL

如图建立jdbc.properties文件

 在cmd 里写入MySQL

b. 配置数据连接池(本项目中使用的是C3P0,如果速度不够快,可以选DBCP)

编写一个DataSource<bean>,注意里面的${driverClass}等变量来自于上一步的jdbc.properties文件

如下

 在cmd 里写入MySQL

c. 继续在applicationContext.xml添加多一个SessionFactorybean

 在cmd 里写入MySQL

5、 把事务的代码交给Spring来完成(这是一种AOP的应用)

我们在Dao层就不用再写beginTransaction commit, rollback,close

 在cmd 里写入MySQL

注意:编码时,需要在service层写上@Transactional

 

顺便补充说明如图搞清楚由谁去扫描对应的注解

 在cmd 里写入MySQL

 

以上所有的环境搭配,(struts2+hibernate5+spring5)已经完成,剩下的全是编码了。

导出一个war平时或者考试时可以直接导入wareclipse使用

 

后端代码:

一、 实体类

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(本质上是StrutsAction接口的实现类)

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