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依赖。
分享到:
相关推荐
Spring 2.0仅支持iBATIS 2版本,当尝试将MyBatis 3的支持加入到Spring 3.0时(参见Spring Jira问题),不幸的是,由于MyBatis 3.0正式发布前Spring 3.0的开发周期已结束。为了避免基于未发布的MyBatis版本进行代码...
第三章引出了MyBatis,它是Apache iBatis的延续,现在托管在GitHub。MyBatis旨在填补JDBC和Hibernate之间的空白,结合两者的优点。它提供了一种介于完全的手动SQL操作和全自动化ORM之间的解决方案。MyBatis允许...
- **MyBatis官方网站:** 虽然ibatis已经更名为MyBatis,但官方网站仍然是获取最新信息的重要途径。 ### 第Ⅰ部分:使用ibatis开发第一个程序 #### 准备与测试 在使用ibatis开发第一个程序之前,需要做好准备工作...
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 获取用户 --> select * from users where id=#{id} </select> <!-- 添加用户 --> ...
1. emis10(Struts2+iBATIS).zip:这个项目结合了Struts2和Ibatis,Struts2是一个MVC框架,它与Ibatis一起使用,可以构建出更高效、模块化的Web应用程序。在这个项目中,Ibatis作为数据访问层,负责与数据库交互,而...
### MyBatis核心配置回顾与拓展 #### 数据持久化的重要性及应用场景 数据持久化是指将数据以某种形式存储到物理媒介上(如硬盘),以便在系统重启或崩溃后仍然能够保持其状态。这一过程强调了数据的安全存储和长期...
在深入了解本文档之前,我们先简单回顾一下ibatis(现称为MyBatis)的基本概念及其在多对一关系处理上的应用。ibatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。ibatis消除了几乎所有的JDBC...
- MyBatis最初源自iBATIS,由Apache基金会开发,后来转移到Google Code,最终迁移到GitHub,目前支持Java、.NET和Ruby等不同语言版本。 - MyBatis的核心优势在于提供了一种灵活的SQL定制方式,允许开发者在XML或...
【标题】"ibatis 实例教程" 在Java Web开发领域,iBatis作为一个持久层框架,因其简单易用、灵活性高而备受青睐。...同时,对于已经熟悉MyBatis的开发者来说,这也是一个回顾和比较不同版本的好机会。
基于python+SpringBoot+Mybatis+velocity仿知乎开发的sns+资讯web应用+redis+mysq,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 仿照知乎做的一个...
模仿知乎做的SpringBoot问答社交网站项目,项目技术点SpringBoot+Mybatis+Mysql+redis+solr+velocity,利用爬虫对项目进行数据填充。 知乎项目总体预览 登陆注册 [] 知乎首页 用户提问 关注、评论、点赞问题 用户发私...
内容包括: 开发工具和Java语言 Spring入门,模板语法和渲染 数据库交互iBatis集成 用户注册登录管理 资讯发布,图片上传,资讯首页 评论中心,站内信 Redis入门以及Redis实现赞踩功能 异步设计和站内邮件通知系统 ...
使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 内容包括: 开发工具和Java语言介绍 Spring入门,模板语法和渲染 数据库交互...