ibatis使用3

来源:互联网 发布:无法连接主机 端口23 编辑:程序博客网 时间:2024/06/07 04:45

3.6 使用命名空间区分相同的id

public class IBatisSameSQLMapId {// Ibatis核心对象,可以进行数据库操作private static SqlMapClient sqlMapper;    static {    try {      // 读取IBatis的数据库连接配置文件      Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");      // 创建Ibatis核心对象      sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);      // 关闭文件输入流      reader.close();     } catch (IOException e) {      // Fail fast.      throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);    }}/** * @param args */public static void main(String[] args) throws Exception {queryForList();}public static void queryForList() throws Exception {// Ibatis技术框架将sqlMapId和sql绑定在一起,那么如果在多个映射文件中存在相同名称sqlMapId,会出现问题。// 解决问题的方法:// 1) 修改映射ID名称,保证不相同。// 2) 增加命名空间来解决名称相同的问题。类似于java中的包的概念。//    如果指定命名空间,那么访问SQLID时,必须执行命名空间//    命名空间如果想要使用,必须让IBatis启用命名空间,需要修改连接配置文件。String sqlMapId = "user.selectList";sqlMapper.queryForList(sqlMapId);}}


3.6 sql文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap          PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"          "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="user">  <!--   select标签表示声明查询SQL语句    id属性表示sql语句关联ID,当程序访问这个ID时,等同于访问这个SQL语句。  resultClass属性表示当查询结果有了之后,将结果直接转换为指定类型的对象   -->  <!--   SQL中的##表示SQL语句需要参数,可以代替?号   -->  <!--   查询结果使用反射的方式将所有查询字段的值放置在对象的属性当中,如果查询字段不存在,那么属性值为null    usercode -> setUsercode  usercode  setUser_code    user_code -> setUser_code    如果表字段名称和对象属性名称不一致的场合,可以通过别名的方式保持一致,进行数据的封装。   -->  <select id="selectUserByCode" resultClass="com.cjf.ibatis.bean.User">    select      usercode as user_code,      username,      userpswd,      orgtype    from t_user    where usercode = #usercode#  </select>    <!--   resultClass属性表示查询的每一条数据转换成指定类型的对象  如果结果为多条数据,转换后会自动封装为集合对象   -->     <select id="selectUsers" resultClass="com.cjf.ibatis.bean.User">     select * from t_user  </select>    <select id="selectList" resultClass="com.cjf.ibatis.bean.User">     select * from t_user  </select></sqlMap>


---------------------

3.7  使用缓存

public class IBatisQueryCache {// Ibatis核心对象,可以进行数据库操作private static SqlMapClient sqlMapper;    static {    try {      // 读取IBatis的数据库连接配置文件      Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");      // 创建Ibatis核心对象      sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);      // 关闭文件输入流      reader.close();     } catch (IOException e) {      // Fail fast.      throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);    }}/** * @param args */public static void main(String[] args) throws Exception {queryForList();}public static void queryForList() throws Exception {// Ibatis技术框架查询缓存    // ibatis将查询结果和映射ID关联起来,放置在缓存当中,当下一回再次访问相同的映射ID时,不再访问数据库,而是从缓存中获取// 提供查询效率。// 使用缓存的步骤:// 1) 启用缓存,修改连接配置文件,增加缓存的操作。// 查询缓存对于修改可能会发生问题。修改操作会导致数据不统一。String sqlMapId = "userCache.selectUsers";List<User> userList = sqlMapper.queryForList(sqlMapId);for ( User u : userList ) {System.out.println( u.getUsername() );}System.out.println( "***************************" );sqlMapId = "userCUD.updateUser";User user = new User();user.setUsercode("1");user.setUsername("zhangsan");sqlMapper.update(sqlMapId, user);System.out.println( "***************************" );                  userList = sqlMapper.queryForList(sqlMapId);for ( User u : userList ) {System.out.println( u.getUsername() );}}}


3.7 sql文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap          PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"          "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="userCache">  <!-- 缓存模型,可以将查询结果放置缓存当中  id属性表示模型的引用标示ID  type属性表示缓存的处理方式    LRU : 最近最少使用的对象  MEMOERY : 基于引用的缓存策略,和垃圾回收器有关系。  FIFO :First In First Out 先进先出  OSCACHE : 基于OSCACHE组件的缓存策略。   -->  <cacheModel type="LRU" id="userCache">      <property name="size" value="100"/>      <!-- 当执行某一个操作时,可以将查询结果给清空掉,下一回查询时还是会访问数据库,获取最新的数据 -->      <flushOnExecute statement="userCUD.updateUser"/>      <!-- 当到达指定时间时,缓存的数据自动清除。 -->      <flushInterval hours="2" minutes="30" seconds="30"/>  </cacheModel>  <select id="selectUsers" resultClass="com.cjf.ibatis.bean.User" cacheModel="userCache">     select * from t_user  </select></sqlMap>


 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 gta5买了车以后怎么办 htc卡在开机画面怎么办 cf里名字占用了怎么办 烫伤起了大水泡怎么办 手干活磨起泡了怎么办 手上磨了个水泡怎么办 手指磨出水泡了怎么办 手上磨了个泡怎么办 脚上的水泡破了怎么办 脚上水泡破了怎么办 烫伤之后破皮了怎么办 皮肤被烫伤破皮怎么办 烫伤起泡皮掉了怎么办 被烫伤起大水泡怎么办 被烫伤起小水泡怎么办 脚走路磨起泡了怎么办 脚趾头磨了个泡怎么办 脚趾头起了大泡怎么办 脚上有脚气起水泡很痒怎么办 脚底有水泡很痒怎么办 脚底磨得起泡了怎么办 脚底有水泡很疼怎么办 脚底硬皮走路疼怎么办 上火鼻子上长脓包怎么办 鼻子上总是长脓包怎么办 孕妇脚上长水泡很痒怎么办 脚气有水泡很痒怎么办 脚又痒又脱皮怎么办 手指出水泡很痒怎么办 鼻子里上火长泡怎么办 鼻子又干又痒怎么办 眼皮长了小水泡怎么办 眼皮上长了个泡怎么办 眼皮上长了粉刺怎么办 上眼皮又肿又疼怎么办 眼皮长了个痘怎么办 手指上小水泡痒怎么办 阴茎长了一个泡怎么办 干活累的腰疼怎么办 手长白色的小泡怎么办 全身长水泡很痒怎么办