SSH框架整合
在之前的博文当中,我们完成了从环境的搭建,到第一个框架SSM的整合,在到Hibernate框架的学习,今天就SSH框架做一些整合,完成基本的手动编写Dao,service,controller代码,以及完成它们的配置;
那废话不多说,直接上代码:
1.首先我们有八个步骤类完成这个简单的项目,
首先更具需求来设计数据库结构,这儿小编已经设计好了:如图所示
表的结构设计如图所示:
2.搭建环境
环境的搭建大家已经比较熟悉了,就是创建maven项目,导入所需要的依赖
主要有,mysql,spring,hibernate,c3p0,jstl.lo4j,servlet核心包;
3.创建pojo与映射文件
这一步来说的话,之前的博文hibernate逆向生成pojo已经提及过了所以这儿也不再赘述,我们直接就开始来做开发;
4.创建Dao及其实现类
在Dao层sqlsessionFactory的注入我们采用配置文件来注入;
老是以添加用户开发怪无聊,今天我们以模糊查询为例来进行开发;
开下面代码:
看起实现类的代码:
由HibernateTemplate的源码我们可以得到Hibernate的模板类,在根据当中的方法我们得到sessionFactory来得到这个工厂,具体两个方法的源码如下:
- 得到工厂了以后,
SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
- 根据工厂的到session对像,
Session session = sessionFactory.openSession();
- 定义Hql语句
String q="from Javauser where name like :aaa";
,Hql语句就是hibernate得查询语句,之前得博文也有详细得介绍这儿也不做过多的赘述;
这儿我们也用到了命名是占位,也就是 :java,当然你也可以用索引占位,只是设置的方式不同而已,但是小编建议采用前者;
上面这句话就定义了Hql查询语句,然后我们要做的就是,、
- 创建查询
Query<Javauser> query = session.createQuery(q, Javauser.class);
- 定义参数
query.setParameter("aaa","%"+name+"%");
- 执行查询的到结果集
List<Javauser> resultList = query.getResultList();
(7)最后将得到得结果集返回
return resultList;
以上七小步就完成了Dao得开发
5.service得开发
之后我们进行得就是service得开发,服务层依赖Dao层,同样我们先采用得方式是手动配置方式注入,且采用得就是set方法得注入,看代码:
接口:
实现类set方法注入Dao
实现得模糊查询得方法:
当然为我们是规范写法,写了Dto层用来接收页面的参数,当然在这里我们dto里面得内容和pojo里面得是一样得,有些读者可能会问,那为什么要它呢?答案就是在真正做项目得时候。我们是需要给前端访问数据的,前端得命名方式可能会和我们得不同所以我们需要dto这样一层来做数据得过度将前端得东西转化成后端得东西,所以因为习惯所以小编这样写了;
好了我们解释代码:
首先我们需要创建一个用于返回得dto集合:
List<dto> list1=new ArrayList<>();
接下来我们用我们注入得Dao对象,来调用Dao层得方法,得到查询得结果集;
注意:我们得到得结果集是JavaUser类型得,所以我们需要将其转化为dto并加入到我们之前创建得集合当中:
List<Javauser> list = dao.fingByName(name);
for (Javauser javauser : list) {
dto dto1=new dto();
BeanUtils.copyProperties(javauser,dto1);
list1.add(dto1);
}
这就完成可上述得转化和添加;
之后将我们得集合返回给controller即可;
这样我们就开发完了service层;
6.编写controller
当然首先控制层是依赖于服务层得所以我们应该注入服务层 得对象:
控制层我们要完成得就是接收页面得数据,调用服务层,返回结果,并定向到新得页面;
对于表现层我们是采用注解方式来开发的
具体看下面代码:
声明是控制类,并采用注解得方式注入对象:
下面就是具体得控制器:
我们在这里得到页面得数据之后,调用方法得到结果集,
使用得是ModelAndView来添加域对象,并进行转达地址得设置
采用得是物理视图:
方法上面得注解就i不再赘述了,之前得博文都提了好多遍了
7.我们进行配置整合
首先整合得是持久层以及服务层
之前我们用到了dbcp.druid连接池,此处我们使用得就是才c3p0连接池;
具体看下面得代码:
首先就是数据源得配置c3p0我们采用得类是ComboPooledDataSource:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/user?characterEncoding=utf-8"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="user" value="root"></property>
<property name="password" value="root2"></property>
</bean>
之后就是sessionFactory对象得创建
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
对于这个类由源码我们知道
首先就是要关联数据源
<property name="dataSource" ref="dataSource"></property>
然后就是关联我们之前在hibernate核心配置文件当中得扩展属性,以及映射实体得注册:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</prop>
<prop key="format_sql">true</prop>
<prop key="show_sql">true</prop>
</props>
</property>
这儿就是完成,我们实体映射得注册,要是由多个,在这里创建多个value即可,
<property name="mappingResources">
<array>
<value>com/ww/pojo/Javauser.hbm.xml</value>
</array>
</property>
</bean>
以上我们就完成了hibernate 整合;
接下来,创建持久层对象,注入工厂
<bean id="userDao" class="com.qf.Dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
创建服务i层对象,注入Dao层对象
<bean id="userService" class="com.qf.service.UserServiceImpl">
<property name="dao" ref="userDao"></property>
</bean>
建立事务管理对象
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
定义事务表明那些方法需要事务那些不需要:
<tx:advice id="myadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
AOP编程,定义切入点,关联事务形成切面:
<aop:config>
<aop:pointcut id="mypoint" expression="execution(* com.qf.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="myadvice" pointcut-ref="mypoint"></aop:advisor>
</aop:config>
最后应该是web表现层得整合,之前都是写在一起得,这儿我们分出来了单独得文件,
SpringMvc
下面就是它的代码:
<!-- 创建表现层对象 也是扫描 和服务层的扫描方式是一样的.和服务层的注解组合 -->
<context:component-scan base-package="com.qf.controller"></context:component-scan>
<!-- 配置注解的处理器映射器和适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
一句话搞定处理器映射器以及适配器的配配置
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
最后我们应该去web.xml当中去配置前端控制器,即可;
这样我们就完成了整合项目的构建;
8.测试
我们最后要做的就是编写前端页面去测试;
一下就是小编编写的前端页面,有点草率,不过是能测试的:
输入三进行模糊查询得到的结果是:
以上就是开发以及测试,下篇博文会讲解到SSH全自动的整合,即关联到JPA,敬请期待!
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42112846