struts2+mybatis
Posted 倦兮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2+mybatis相关的知识,希望对你有一定的参考价值。
第二阶段中期项目临近之际(我已经蒙了,谁让我不好好做笔记呢),故对所学框架struts2和mybatis做详细总结。
框架(framework):
软件开发过程的半成品,解决了软件开发过程中的通用问题,从而提高了软件开发的效率。
(项目= 框架+业务逻辑)
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"
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:跳转方式
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 type="返回值类型" id="随便">
<result column="列名" property="属性名"/>
</resultMap>
resultType和 resultMap 区别?
相同点:都可以添加到select标签中,对查询结果映射存储
<select resultType=””>
<select resultMap =””>
不同点:resulType只能去映射实体类对象以及基本类型
resultMap无法映射基本类型,但是可以映射实体类对象
1.运行查询结果的列名和实体类的属性名不一致
2.映射对象类型的属性
当实体类中存在对象类型的属性
<association property="属性名" javaType="类型">
<result column="列名" property="属性名"/>
</association>
当实体类中存在集合类型的属性时
<collection property="属性名" ofType="返回值类型">
<result column="列名" property="属性名"/>
</collection>
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>
delete from ems_employees where id in
<foreach collection="list" open="(" close=")" item="i" separator=",">
#{i}
</foreach>
1. 在src下添加一个log4j.properties
log4j.properties日志文件 日志帮助记录执行过程
2. 在mybatis-config.xml总配置文件设置一下
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
3. 确定有log4j这个jar包
为什么要使用缓存?
如果很多访问一个系统,查询他们执行的查询结果是一样的话,我们可以考虑在第一个用户执行完查询之后,将查询结果缓存起来,这样以后再有用户过来执行查询,我们就不需要去数据库执行SQL语句了,而是将缓存的数据返回给用户。
优势:检索访问数据库的频率,提高用户查询的效率 。
劣势:1.缓存中的数据可能和数据库中的数据不一致。
2.使用缓存增加了服务器的内存压力(拿空间(钱)换时间)。
在mybatis-config.xml文件中开启二级缓存
<settings>
<setting name="cacheEnable" value="true"/>
</settings>
在mapper文件中增加<cache/>标签
<cache/>
放到缓存中的对象都实现序列化接口(实体类)
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的主要内容,如果未能解决你的问题,请参考以下文章