设为首页 收藏本站
查看: 1043|回复: 0

[经验分享] 10/26/2011

[复制链接]

尚未签到

发表于 2016-11-27 09:23:59 | 显示全部楼层 |阅读模式
1. Filter 主要用作处理 Request 和 Response 比如对指定IP的限制, 简单的页面权限控制,用户登陆控制, 日志等等。
2. iBatis SqlMap中得占位符 # 和 $ 有什么区别 - #value# 代表传入的Value, 而$value$则代表向sql中插入改value, 如 ... WHERE NAME LIKE '%$value$%' 但是这样可能会暴露而被sql注入。
3. iBatis 中主要使用了 SqlMapClient 中得大量API, 如
   a) sqlMap.queryForObject(String namespaceAndSqlId, Object parameter);
   b) sqlMap.queryForMap(XXX,xxx);
   c) sqlMap.queryForList(XXX,xxx);
这里的namespaceAndSqlId参数是指sqlMap配置文件当中的namespace+sql statement 的 id, 两者一一对应。
而在 MyBatis 中则不需要直接使用SqlMapClient去指定namespace 和 sql statement id。 只需要在 sql map config 文件中指定接口的 namespace, 并且sql statement id 和 接口的名字意义对应。
比如:
接口的定义

package com.vrplat.persistence;
import java.util.Map;
import com.vrplat.pojo.User;
public interface UserMapper {
User getUserByUserName(Map<String, Object> param);
void insertUser(User user);
User getUserByNameOrEmail(Map<String, Object> param);
}


对应的sql map config

<mapper namespace="com.vrplat.persistence.UserMapper">
<select id="getUserByUserName" parameterType="map" resultType="user">
SELECT * FROM USER
WHERE NAME = #{userName} AND PASSWORD = #{password}
</select>
<select id="getUserByNameOrEmail" parameterType="map" resultType="user">
SELECT * FROM USER
WHERE NAME = #{userName} OR EMAIL_ADDR = #{emailAddress}
</select>
<insert id="insertUser" parameterType="user">
INSERT INTO USER
(NAME, PASSWORD, ALIAS, BIRTHDAY, EMAIL_ADDR, PHONE, ADDRESS, DESCRIPTION)
VALUES
(#{name}, #{password}, #{alias}, #{birthday}, #{email_addr}, #{phone}, #{address}, #{description})
<selectKey resultType="int" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
</mapper>


然后具体的实现

@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUser(String userName, String password) {
Map<String, Object> param = new HashMap<String, Object>(2);
param.put("userName", userName);
param.put("password", password);
return userMapper.getUserByUserName(param);
}
public void insertUser(User user) {
userMapper.insertUser(user);
}
public User getUserByNameOrEmail(String userName, String emailAddress) {
Map<String, Object> param = new HashMap<String, Object>(2);
param.put("userName", userName);
param.put("emailAddress", emailAddress);
return userMapper.getUserByNameOrEmail(param);
}
}


iBatis 事务 - 不是很了解, 需进一步研究。。。。
在try子句中SqlMapClient.startTransaction(); SqlMapClient.commitTransaction(); 在finally子句中SqlMapClient.endTransaction();
事务分为 自动事务、全局事务、局部事务、定制事务 其区别在于Sql Map Cofig文件上
局部事务transactionManager type="JDBC" ----(通过传统JDBC Connection.commit/rollback实现事务支持)
全局事务transactionManager type="JTA" (主动参与) type="EXTERNAL" (被动参与) ----  使用容器提供的JTA服务实现全局事务管理;外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制.此时ibatis将把所有事务委托给外部容器进行管理.此外,通过Spring等轻量级容量实现事务的配置化管理也是一个不错的选择。
iBatis 缓存
缓存的使用通过在Sql Map Config中加入<cacheModel>标签块,并在具体的sql statement中指定改cacheModel的id就可以了。 如:
<sqlMap namespace="User">
<cacheModel id="myCache" type="MEMORY">
   <flushInternal hours="24" />
   <flushOnExecute statement="insert" />
   <flushOnExecute statement="update" />
   <flushOnExecute statement="delete" />
   <property name="reference-type" value="WEAK" />
</cacheModel>
<select id="getUser" parameterClass="User" resultClass="User" cacheModel="myCache">
    SELECT * FROM USER WHERE userId=#userId#
</select>
</sqlMap>
需要特别说明的是cacheModel中得type属性
1. MEMORY - 基于引用的告诉缓存 reference-type 的值有 STRONG/SOFT/WEEK
2. LRU - Latest Recently Used 其中有一个属性 size 指定缓存的数量。
3. FIFO - 先进先出策略, 类似队列, 也有个size属性,指定队列大小。
4. OSCACHE - 需要对OSCache JAR依赖。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306030-1-1.html 上篇帖子: spring 3 和mybatis 3集成,并用junit4进行测试 下篇帖子: Spring MyBatis 事务配置不回滚
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表