struts2+mybatis

Posted 倦兮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2+mybatis相关的知识,希望对你有一定的参考价值。



Lead


第二阶段中期项目临近之际(我已经蒙了,谁让我不好好做笔记呢),故对所学框架struts2和mybatis做详细总结。

框架(framework):
软件开发过程的半成品,解决了软件开发过程中的通用问题,从而提高了软件开发的效率。

(项目= 框架+业务逻辑)

struts2+mybatis



1


struts2
简介

Struts2是一个MVC框架,主要负责控制器的开发,底层封装servlet技术。

struts2框架和struts1的关系?

struts1是apache旗下的mvc框架

还有一个公司也有mvc框架,叫做webwork 

webwork + struts1 = struts2 (核心来自于webwork)

MVC开发是一种编程思想,由设计者人为的把一个项目,划分成三个层次,分别是:

    M(Model 模型层) :Servlet(action)

    V(View 视图层) :XXX.jsp/html

    C(Controller控制层):JavaBean= Service+DAO+Entity

MVC编程思想的好处

    1.   MVC处理后,便于多个程序员协同开发,提高开发效率。

    2.   解耦和 【耦合指的是代码的强关联性 一部代码的维护 影响到其他代码】

Servlet充当控制器存在哪些问题

环境搭建

1.1 添加jar包

1.2 添加配置文件 struts.xml

1.3 web.xml

 (配置struts2的核心过滤器,用于拦截器所有请求)

1.4 Action类


package的标签namespace属性

作用:规范请求的url路径,避免action名称的命名冲突

注意跨包跳转的result标签编写方式!!


action标签的method属性

指定请求要调用action类中的方法,允许在action类中自定义方法,向DAO一样完成多个功能。


跳转 (result的type属性)

1、Action到jsp

默认forword;type="dispatcher"

重定向type="redirect"

2、BAction到CAction

forword:type="chain"

重定向type="redirectAction"

Struts2的执行流程

1.  浏览器发送请求

      http://localhost:8888/项目名/hello

2.  web.xml的核心过滤器

     拦截所有请求,自动执行核心过滤器中的doFilter方法

3.  struts.xml

    请求路径匹配action 标签的name属性值,执行Action中   的方法,根据Action方法返回的字符串匹配result标签的name属性值,进行转发或者重定向

4.   服务器给浏览器一个响应

接收请求参数

用Action类的属性接收请求参数

情况1:基本类型+字符串类型

应用场景:删除

情况2:用实体类对象接收参数

应用场景:添加、修改、注册

情况3:接收数组或者集合

应用场景:批量删除

注意:不要忘记生成相应属性的set/get方法!

开发总体思路

1、环境搭建:导入jar包,web.xml配置核心过滤器,src目录下struts.xml

2、数据库表,实体类、DAO 、DAOImpl、Service、ServiceImpl

3、Action类:定义相关属性以及方法,set/get方法

4、struts.xml配置

package标签属性:name(随便写,不重复)、

extends(固定写法)、namespace

action标签:name:一般写方法名、class:全类名、method:方法名

result标签:name:方法的返回值、type:跳转方式



2

mybatis
简介

MyBatis是一个ORM框架,底层封装了JDBC,简化对数据库的增删改查操作。

mybatis3.0版本之前叫做ibatis, ibatis早期也是apache旗下的子项目,后来源码迁移到google code , 2013年的时候又迁移到了github。

环境搭建

1、添加mybatis的jar包 + ojdbc.jar

2、 添加mybatis-config.xml文件到src目录下、mapper文件

在dao包下

3、  编写测试类 (打印获取的到SqlSession对象即可)

什么是SqlSession?

1. sqlSession是mybatis框架中的一个对象,类似之前学习的JDBC的Connection(连接)。

 sqlSession其实就是java程序端和数据库之间的会话,底层通过sqlSession对象,去执行sql语句,帮助我们实现增删改查操作。

2. sqlSession和之前的session关系?没关系

之前是HttpSession (浏览器客户端和服务器之间的连接会话)

今天的SqlSession(java程序和数据库之间的连接会话)

编码

1、数据库表

2、实体类

3、DAO接口(传递多个参数@Param)

4、DAO对应的Mapper文件

<mapper namespace="DAO全类名">

<标签名 id="dao对应方法名" resultType="返回值类型">

sql语句

</标签名>

</mapper>

5、 将Mapper文件的路径注册到总配置文件中

<mappers>

    <mapper resource="Mapper文件路径"/>

</mappers>

resultMap

表中的列名和实体类的属性名不一致

<resultMap type="返回值类型" id="随便">

<result column="列名" property="属性名"/>

</resultMap>

resultType和 resultMap 区别?

相同点:都可以添加到select标签中,对查询结果映射存储

<select  resultType=””>

<select  resultMap =””>

不同点:resulType只能去映射实体类对象以及基本类型

        resultMap无法映射基本类型,但是可以映射实体类对象

        1.运行查询结果的列名和实体类的属性名不一致

        2.映射对象类型的属性


association

当实体类中存在对象类型的属性

<association property="属性名" javaType="类型">

    <result column="列名" property="属性名"/>

</association>

collection

当实体类中存在集合类型的属性时

<collection property="属性名" ofType="返回值类型">

<result column="列名" property="属性名"/>

</collection>

条件查询where if

select *...........

    <where>

<if test="name!=null and name!=''">

e.name=#{name}

</if>

<if test="beginAge!=null">

    and e.age>=#{beginAge}

</if>

<if test="endAge!=null">

and e.age <![CDATA[<=]]>#{endAge}

</if>

</where>

批量删除 foreach

delete from ems_employees where id in

<foreach collection="list" open="(" close=")" item="i" separator=",">

#{i}

</foreach>

打印执行的sql

1. 在src下添加一个log4j.properties

   log4j.properties日志文件  日志帮助记录执行过程

2. 在mybatis-config.xml总配置文件设置一下

<settings>

    <setting name="logImpl" value="LOG4J"/>

</settings>

3. 确定有log4j这个jar包

mybatis缓存 cache

为什么要使用缓存?

如果很多访问一个系统,查询他们执行的查询结果是一样的话,我们可以考虑在第一个用户执行完查询之后,将查询结果缓存起来,这样以后再有用户过来执行查询,我们就不需要去数据库执行SQL语句了,而是将缓存的数据返回给用户。

优势:检索访问数据库的频率,提高用户查询的效率 。

劣势:1.缓存中的数据可能和数据库中的数据不一致。

      2.使用缓存增加了服务器的内存压力(拿空间(钱)换时间)。

缓存编码实现
  1. 在mybatis-config.xml文件中开启二级缓存

    <settings>

        <setting name="cacheEnable" value="true"/>

    </settings>

  2.  在mapper文件中增加<cache/>标签

    <cache/>

  3.  放到缓存中的对象都实现序列化接口(实体类)

mybatis+struts2

1.     添加jar包

   struts2 + mybatis + ojdbc.jar

 2.   添加配置文件

       web.xml  核心过滤器

       struts.xml

       mybatis-config.xml

        XxxMapper.xml

3、建表+实体类+DAO

4、Mapper

5、service +serviceImpl

6.     Action

7、 struts.xml

8.     JSP

End

图片:网络




以上是关于struts2+mybatis的主要内容,如果未能解决你的问题,请参考以下文章

MybatisMyBatis 注解方式的基本 用法

MybatisMyBatis之缓存

MyBatisMyBatis的增删改查

Mybatismybatis登录实例

MybatisMybatis基础(中)

MybatisMybatis缓存