• ibatis入门教程


    ibatis入门教程

    博客分类: 
     
    1、本文通过几个简单的示例,实现ibatis的增删改查的功能。  2、构建数据库表,contact表,建表语句如下:(使用的是mysql数据库)  contact表: 
    Java代码  收藏代码
    1. drop table if exists contact;  
    2. create table contact(  
    3.    id int(10) not null auto_increment,  
    4.    firstName varchar(20) ,  
    5.    lastName varchar(20),  
    6.    email varchar(20),  
    7.    primary key(id)   
    8. );  
    9. insert into contact(firstName,lastName,email) values('tang','lj','tang@126.com');  
    10. insert into contact(firstName,lastName,email) values('li','lin','ll@126.com');  
    11. insert into contact(firstName,lastName,email) values('wang','lihong','lh@126.com');  
    12. insert into contact(firstName,lastName,email) values('cen','fen','cf@126.com');  
    3、构建相应的JavaBean  Contact.java 
    Java代码  收藏代码
    1. package com.tonyj.pojo;  
    2.   
    3. public class Contact {  
    4.     private String firstName;  
    5.     private String lastName;  
    6.     private String email;  
    7.     private int id;  
    8.     //相应的getter和setter方法,构造方法  
    9. }  
    4、ibatis配置文件详解  SqlMapConfig.xml文件配置如下: 
    Java代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE sqlMapConfig  
    3. PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"  
    4. "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  
    5. <sqlMapConfig>  
    6.     <properties resource="jdbc.properties"/>  
    7.     <settings   
    8.         cacheModelsEnabled="true"  
    9.         enhancementEnabled="true"  
    10.         lazyLoadingEnabled="true"  
    11.         maxRequests="32"  
    12.         maxSessions="10"  
    13.         maxTransactions="5"  
    14.         useStatementNamespaces="true"/>   
    15.     <transactionManager type="JDBC">  
    16.         <dataSource type="SIMPLE">  
    17.              <property name="JDBC.Driver" value="${jdbc.driverClassName}"/>  
    18.              <property name="JDBC.ConnectionURL" value="${jdbc.url}"/>  
    19.              <property name="JDBC.Username" value="${jdbc.userName}"/>  
    20.              <property name="JDBC.Password" value="${jdbc.password}"/>  
    21.         </dataSource>  
    22.     </transactionManager>  
    23.     <sqlMap resource="Contact.xml"/>  
    24. </sqlMapConfig>  
    1、<properties>元素,SQL Map配置文件拥有唯一的<properties>元素,用于在配置文件中使用标准的Java 属性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在SQL Map配置文件激情包含的所有SQL Map映射文件中引用。 
    2、<setting>元素  maxRequests:同时执行SQL预计的最大线程数。  maxSessions:同一时间内活动的最大session数。  maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数。  cacheModelsEnabled:全局性地启用和禁用SqlMapClient的所有缓存model。  lazyLoadingEnabled:全局性地启用或禁用SqlMapClient的所有延迟加载。  enhancementEnabled:全局性地启用或禁用运行时字节码增强,以优化访问JavaBean属性的性能,同时优化延迟加载的性能。  useStatementNamespaces:如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。 
    3、<typeAlias>元素  <typeAlias>元素为一个通常较长的、全限定类名指定一个较短的别名。  <typeAlias alias="shortname" type="com.long.class.path.Class"/> 
    4、<transactionManager>元素  <transactionManager>元素包含三个事物管理器分别是,JDBC,JTA和EXTERNAL  JDBC:通过常用的Connection commit()和rollback()方法,让JDBC管理事务。  JTA:本事务管理器使用一个JTA全局事务,使用SQL Map的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。  EXTERNAL:这个配置可以自己管理事务。 
    5、<datasource>元素  <datasource>是<transactionManager>的一部分,为SQL Map数据源设置了一系列参数。目前SQL Map架构只提供了三个DataSourceFactory,也可以添加自己的实现。  SimpleDataSourceFactory:DataSource提供了一个基本的实现,适用于J2EE容器提供DataSource的情况。  DbcpDataSourceFactory:实现使用Jakarta DBCP(Database Connection Pool)的DataSource API提供连接池服务。适用于应用/Web容器不提供DataSource服务的情况,或执行一单独的应用。  JndiDataSourceFactory:在应用容器内部从JNDI Context中查找DataSource实现。当使用应用服务器,并且服务器提供了容器管理的连接池和相关DataSource实现的情况下,可以使用JndiDataSourceFactory。 
    6、<sqlMap>元素  <sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。每个SqlMapClient对象使用的所有SQL Map映射文件都要在此声明。映射文件作为stream resource从类路径或URL读入。 
    jdbc.properties配置文件 
    Java代码  收藏代码
    1. jdbc.driverClassName=com.mysql.jdbc.Driver  
    2. jdbc.url=jdbc:mysql://localhost:3306/vin  
    3. jdbc.userName=root  
    4. jdbc.password=sa  
    Contact.xml文件 
    Java代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE sqlMap  
    3. PUBLIC "-//ibatis.apache.org//DTD SQL MAP 2.0//EN"  
    4. "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
    5. <sqlMap>  
    6.     <typeAlias alias="Contact" type="com.tonyj.pojo.Contact"/>  
    7.     <!-- ibatis查询操作 -->  
    8.     <select id="getAll" resultClass="Contact">  
    9.         select *   
    10.         from contact  
    11.     </select>  
    12.     <!-- ibatis插入1 -->  
    13.     <insert id="insert" parameterClass="Contact">  
    14.         insert into contact(firstName,lastName,email)  
    15.         values(#firstName#,#lastName#,#email#)  
    16.         <selectKey resultClass="int" keyProperty="id">  
    17.             select last_insert_id() as id  
    18.         </selectKey>  
    19.     </insert>  
    20.     <!-- ibatis插入操作2 -->  
    21.     <parameterMap class="Contact" id="insert-contact-parameter">  
    22.         <parameter property="lastName"/>  
    23.         <parameter property="firstName"/>  
    24.         <parameter property="email"/>  
    25.     </parameterMap>  
    26.     <statement id="insertContact" parameterMap="insert-contact-parameter">  
    27.         insert into contact(lastName,firstName,email) values (?,?,?);  
    28.     </statement>  
    29.     <!-- ibatis删除操作 -->  
    30.     <delete id="deleteContactById" parameterClass="int">  
    31.         delete from Contact where id=#id#  
    32.     </delete>  
    33.     <!-- ibatis更新操作 -->  
    34.     <update id="updateById" parameterClass="int">  
    35.         update Contact set lastName="tonyJ"  
    36.         where id=#id#  
    37.     </update>  
    38.     <!-- ibatis根据id查询 -->  
    39.     <resultMap class="Contact" id="result">  
    40.         <result property="id" column="id"/>  
    41.         <result property="firstName" column="firstName"/>  
    42.         <result property="lastName" column="lastName"/>  
    43.         <result property="email" column="email"/>  
    44.     </resultMap>  
    45.     <select id="getById" resultMap="result">  
    46.         select * from contact where id=#id#  
    47.     </select>  
    48.     <!-- ibatis调用mysql存储过程 -->  
    49.     <procedure id="storedInfo" resultClass="Contact">  
    50.         {call showData()}  
    51.     </procedure>  
    52.     <!-- ibatis模糊查询 -->  
    53.     <select id="selectByName" parameterClass="String" resultClass="Contact">  
    54.         select *   
    55.         from contact  
    56.         where firstName like '%$firstName$%'  
    57.     </select>  
    58.     <!-- ibatis分页查询1 -->  
    59.     <select id="getByPage" parameterClass="java.util.Map" resultClass="Contact">  
    60.         select * from contact   
    61.         <isParameterPresent>  
    62.             <isNotNull property="orderById">  
    63.                 order by $orderById$  
    64.             </isNotNull>  
    65.             <isNotNull property="limitClauseStart">  
    66.                 limit $limitClauseStart$,$limitClauseCount$  
    67.             </isNotNull>  
    68.         </isParameterPresent>  
    69.     </select>  
    70.     <!--ibatis 分页查询2 -->  
    71.     <select id="getByPage1" parameterClass="java.util.Map" resultClass="Contact">  
    72.         select *   
    73.         from contact  
    74.     </select>  
    75. </sqlMap>  
    5、测试类如下:  IbatisExample.java如下: 
    Java代码  收藏代码
    1. package com.tonyj.test;  
    2.   
    3. import java.io.Reader;  
    4.   
    5. import com.ibatis.common.resources.Resources;  
    6. import com.ibatis.sqlmap.client.SqlMapClient;  
    7. import com.ibatis.sqlmap.client.SqlMapClientBuilder;  
    8. import com.tonyj.pojo.Contact;  
    9.   
    10. public class IbatisExample {  
    11.     public static void main(String[] args) throws Exception{  
    12.         Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");  
    13.         SqlMapClient sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);  
    14.         //查询  
    15. //      System.out.println("All Contacts");  
    16. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList("getAll",null);  
    17. //      for(Contact c:contacts){  
    18. //          System.out.println(" "+c.getId()+"-->"+c.getFirstName()+"-->"  
    19. //          +c.getLastName()+"-->"+c.getEmail());  
    20. //      }  
    21.           
    22.         //插入1  
    23. //      System.out.println("*------insert Contact Table------------*");  
    24. //      Contact contact=new Contact("Amit","Kumar","amit@yes.com");  
    25. //      sqlMap.insert("insert",contact);  
    26.         //插入2  
    27.         System.out.println("*------insert Contact Table------------*");  
    28.         Contact contact=new Contact("firstName","lastName","tang@yes.com");  
    29.         sqlMap.insert("insertContact",contact);  
    30.         //删除  
    31. //      int i=sqlMap.delete("deleteContactById", 1);  
    32. //      System.out.println("i="+i);  
    33.           
    34.         //更新  
    35. //      sqlMap.update("updateById", 3);  
    36.           
    37.         //根据id查询  
    38. //      Contact contact=(Contact) sqlMap.queryForObject("getById", new Integer(3));  
    39. //      System.out.println(contact.toString());  
    40.           
    41.         //调用存储过程  
    42. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList("storedInfo", null);  
    43. //      Contact contact=null;  
    44. //      for(Contact c:contacts){  
    45. //          System.out.println(c.toString());  
    46. //      }  
    47.           
    48.         //模糊查询  
    49. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList("selectByName","t");  
    50. //      Contact contact=null;  
    51. //      for(Contact c:contacts){  
    52. //          System.out.println(c.toString());  
    53. //      }  
    54.         //分页1  
    55. //      Map<String,Object> map=new HashMap<String,Object>();  
    56. //      map.put("orederById"," id asc");  
    57. //      map.put("limitClauseStart",5);  
    58. //      map.put("limitClauseCount",5);  
    59. //      List<Contact> result=(List<Contact>)sqlMap.queryForList("getByPage", map);  
    60. //      for(Contact c:result){  
    61. //          System.out.println(c.toString());  
    62. //      }  
    63.           
    64.         //分页2  
    65. //      int skip=5;  
    66. //      int max=4;  
    67. //      String sql="getByPage1";  
    68. //      @SuppressWarnings("unchecked")  
    69. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList(sql,skip,max);  
    70. //      for(Contact c:contacts){  
    71. //          System.out.println(c.toString());  
    72. //      }  
    73.     }  
    74. }  
    对应Contact.xml文件,注释的指导,可以将注释除掉一个一个实现该功能。  在上面示例中调用存储过程的sql如下,先在mysql数据库中执行如下sql: 
    Java代码  收藏代码
    1. --更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)  
    2. --所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)  
    3. --这里将结束符号改成美元符号--$  
    4. delimiter $  
    5. create procedure vin.showData()  
    6. begin  
    7. select * from Contact;  
    8. end  
    9. $  
  • 相关阅读:
    洛谷——P1970 花匠
    洛谷—— P1969 积木大赛
    洛谷——P1966 火柴排队
    洛谷——P1965 转圈游戏
    python练习-跳出多层循环和购物车
    WinCE设置多国语言支持
    java开发环境搭建
    MCC(移动国家码)和 MNC(移动网络码)
    技术团队新官上任之基层篇
    技术团队新官上任之中层篇
  • 原文地址:https://www.cnblogs.com/wwy209/p/4322838.html
Copyright © 2020-2023  润新知