首页 > 其他分享 >iBatis简单入门教程

iBatis简单入门教程

时间:2023-05-06 14:32:48浏览次数:39  
标签:ibatis return 入门教程 id iBatis student 简单 public



 

 

 

iBatis简单入门教程



 



iBatis 简介:

iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis 已经改名为Mybatis 了。

官网为:http://www.mybatis.org/

 

搭建iBatis 开发环境:

1 、导入相关的jar 包,ibatis-2.3.0.677.jar 、mysql-connector-java-5.1.6-bin.jar

2 、编写文件:

       POJO类---------------Student.java用来与数据库打交道的持久层对象,也是通过 ibatis要操作的对象

       sqlMap.xml-----------Student.xml :配置DAO中调用的节点id,sql语句中传入的参数,结果集的封装类

                              (Hibernate中:实体类<----->表的对应关系,参数赋值、结果集封装都由框架自动完成)

      Jdbc 连接配置--------SqlMap.properties:配置数据库的连接数据

SqlMapConfig.xml :引入所有的配置文件,配置框架的数据源等

3、DAO层iBatis应用:

一、启动iBatis框架容器

二、加载iBatis框架的配置文件

三、调用iBatis框架接口、传入参数

    1)读取配置文件

"com/iflytek/SqlMapConfig.xml");

    2)获取sqlMapClient 对象(该实例已创建数据库连接)

  

sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
     (类似Hibernate中的new Configuration().buildSessionFactory().openSession()获取session对象)

    3)开始数据库操作

"addStudent", student); 
"deleteStudentById", id); 
"updateStudent", student); 
"selectAllStudent");
"selectStudentById", id);

Demo

Student.java: 

1. public   class
2. // 注意这里需要保证有一个无参构造方法,因为包括Hibernate在内的映射都是使用反射的,如果没有无参构造可能会出现问题 
3. privateint
4. private
5. private
6. privatefloat
7. publicint
8. return
9. } 
10. publicvoid setId(int
11. this.id = id;  
12. } 
13. public
14. return
15. } 
16. publicvoid
17. this.name = name;  
18. } 
19. public
20. return
21. } 
22. publicvoid
23. this.birth = birth;  
24. } 
25. publicfloat
26. return
27. } 
28. publicvoid setScore(float
29. this.score = score;  
30. } 
31. @Override
32. public
33. return"id=" + id + "\tname=" + name + "\tmajor=" + birth + "\tscore="
34. "\n";  
35. } 
36. }


SqlMap.properties :

       
1. driver=com.mysql.jdbc.Driver 
2. 3306/ibatis  
3. username=root 
4. 123


Student.xml :


 


1. <?xmlversion="1.0"encoding="UTF-8"?>
2. <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
3. >
4. <sqlMap>
5. <!-- 通过typeAlias使得我们在下面使用Student实体类的时候不需要写包名 -->
6.  <typeAliasalias="Student"type="com.iflytek.entity.Student"/>
7. getStudents" class="Student" >  
8.   <result column="id" property="id"              jdbcType="INT" />   
9.   <result column="name" property="name"  jdbcType="VARCHAR" />  
10.   <result column="address" property="address" jdbcType="VARCHAR" />  
11. </resultMap>
12. <!-- id表示select里的sql语句,resultClass:返回单个结果集,resultMap:返回多个结果集 -->
13.  <select id="selectAllStudent" resultMap="getStudents">
14.  select * from   tbl_student  
15. </select>


    1. <!-- parameterClass表示参数的内容 -->
    2. <!-- #表示这是一个外部调用的需要传进的参数,可以理解为占位符 -->
    3.  <select id="selectStudentById" parameterClass="int" resultClass="Student">
    4. id=#id#  
    5. </select>
    6. <!-- 注意这里的resultClass类型,使用Student类型取决于queryForList还是queryForObject -->
    7.  <select id="selectStudentByName"parameterClass="String" resultClass="Student">
    8.  select name,birth,score from tbl_student where name like '%$name$%'  
    9. </select>


    1. <insertid="addStudent"parameterClass="Student">返回数据库受影响的行数
    2.  insert into tbl_student(name,birth,score) values (#name#,#birth#,#score#);  
    3.  <selectKeyresultClass="int"keyProperty="id">
    4. select @@identity as inserted 
    5. <!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->
    6. <!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->
    7. <!-- mssql:select @@IDENTITY as value -->
    8. <!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->
    9. <!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL。 
    10. >
    11. </selectKey>
    12. </insert>


      1.  <deleteid="deleteStudentById"parameterClass="int">//在ibatis中默认的删除语句是返回数据库受影响的行数
      2. <!-- #id#里的id可以随意取,但是上面的insert则会有影响,因为上面的name会从Student里的属性里去查找 -->
      3. <!-- 我们也可以这样理解,如果有#占位符,则ibatis会调用parameterClass里的属性去赋值 -->
      4. id=#id#  
      5. </delete>
      6.  <updateid="updateStudent"parameterClass="Student">返回数据库受影响的行数
      7. name=#name#,birth=#birth#,score=#score# where id=#id#  
      8. </update>
      9. </sqlMap>


       

      说明:

      如果xml 中没有ibatis 的提示,则window --> Preference--> XML-->XML Catalog---> 点击add

      选择uri URI: 请选择本地文件系统上

      iBatisDemo1/WebContent/WEB-INF/lib/sql-map-config-2.dtd 文件;

      Key Type: 选择Schema Location;

      Key: 需要联网的,不建议使用;

       

      SqlMapConfig.xml :  


      1. <?xmlversion="1.0"encoding="UTF-8"?>
      2. <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 
      3. >
      4. <sqlMapConfig>
      5. <settings
      6.     cacheModelsEnabled="true"     是否启用缓存
      7.     lazyLoadingEnabled="true"       是否启用延迟加载
      8.     enhancementEnabled="true"    是否启用字节码增强
      9.     errorTracingEnabled="true"      是否启用错误处理
      10.     maxRequests="32"                   最大并发请求数
      11.     maxSessions="10"                    最大Session数,即当前最大允许的并发SqlMapClient数
      12.     maxTransactions="5"                最大并发事务数
      13.     useStatementNamespaces="false"    是否启用名称空间
      14. />
      15. <!-- 引用JDBC属性的配置文件 -->
      16.  <propertiesresource="com/iflytek/entity/SqlMap.properties"/>
      17. <!-- 定义IBatis的事务管理器类型,其类型有3种:(JDBC、JTA、EXTERNAL) -->
      18.  <transactionManager  type="JDBC">
      19. <!-- 定义数据源,数据源的连接类型有3种:(SIMPLE、DBCP、JNDI) -->
      20.  <dataSourcetype="SIMPLE">
      21.  <propertyname="JDBC.Driver"value="${driver}"/>
      22.  <propertyname="JDBC.ConnectionURL"value="${url}"/>
      23.  <propertyname="JDBC.Username"value="${username}"/>
      24.  <propertyname="JDBC.Password"value="${password}"/>
      25. <propertyname="Pool.MaximumActiveConnections"value="10"/>最大容量
      26. <propertyname="Pool.MaximumIdleConnections"value="5"/>允许挂起的最大连接
      27. <propertyname="Pool.MaximumCheckoutTime"value="120000"/>连接被某个任务所允许占用的最大时间
      28. <propertyname="Pool.TimeToWait"value="500"/>线程允许等待的最大时间
      29. </dataSource>
      30. </transactionManager>
      31. <!-- 这里可以写多个实体的映射文件 -->
      32.  <sqlMapresource="com/iflytek/entity/Student.xml"/>
      33. </sqlMapConfig>
      34. 注意:transactionManager节点  IBatis的事务管理器:
      35. JDBC---通过传统JDBC Connection.commit/rollback实现事务支持
      36. JTA----使用容器提供的JTA服务实现全局事务管理
      37. EXTERNAL-------外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制.此时ibatis将把所有事务委托给外部容器进行管理。此外,通过Spring等轻量级容器实现事务的配置化管理也是一个不错的选择
      38. dataSource 节点:
      39. SIMPLE ------ibatis 内置的dataSource 实现,其中实现了一个简单的数据库连接池机制,对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory. 
      JDBC 使用数据库自己的事务(局部事务),connect.beginTranstion(), connect.commit()等40. DBCP ---------基于Apache DBCP连接池组件实现的DataSource封装,当无容器提供DataSource服务时,建议使用该选项,对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.
      41. JTA :使用jta 事务管理器管理事务(全局事务),使用userTranstion对象
      42. JNDI ---------使用J2EE容器提供的DataSource实现, DataSource将通过指定的JNDI Name从容器中获取.对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory. Ibatis 不控制事务,事务交由外部控制,一般在CTM,或spring托管事务中使用


       

      StudentDao :


       


       

      1. public   interface
      2. /** 
      3. * 添加学生信息 
      4. * @param student  学生实体 
      5. * @return 返回是否添加成功 
      6. */
      7. public boolean
        
      1. /** 
      2. * 根据学生id删除学生信息 
      3. * @param id  学生id 
      4. * @return 删除是否成功 
      5. */
      6. public  boolean deleteStudentById(int
      7. /** 
      8. * 更新学生信息 
      9. * @param student  学生实体 
      10. * @return 更新是否成功 
      11. */
      12. publicboolean
      13. /** 
      14. * 查询全部学生信息 
      15. *  @return 返回学生列表 
      16. */
      17. public
      18. /** 
      19. * 根据学生姓名模糊查询学生信息 
      20. *  @param name  学生姓名 
      21. * @return 学生信息列表 
      22. */
      23. public
      24. /** 
      25. * 根据学生id查询学生信息 
      26. *  @param id 学生id 
      27. * @return 学生对象 
      28. */
      29. public Student selectStudentById(int
      30. }

      StudentDaoImpl :  


        1. public class StudentDaoImpl implements
        2. privatestatic SqlMapClient sqlMapClient = null;  
        3. // 读取配置文件 
        4. static
        5. try
        6. Reader reader = Resources .getResourceAsReader("com/iflytek/entity/SqlMapConfig.xml"); 
        7. sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); 
        8. reader.close(); 
        9. catch
        10. e.printStackTrace(); 
        11. } 
        12. }


         

        1. public  boolean
        2. null;  
        3. boolean flag = false;  
        4. try
        5. "addStudent", student); //实际返回值是插入数据的行号
        6. "添加学生信息的返回值:"
        7. catch
        8. e.printStackTrace(); 
        9. } 
        10. if (object != null) {  
        11. true;  
        12. } 
        13. return
        14. }

         

        1. public  boolean deleteStudentById(int
        2. boolean flag = false;  
        3. null;  
        4. try
        5. "deleteStudentById", id);  
        6. "删除学生信息的返回值:" + object + ",这里返回的是影响的行数");  
        7. catch
        8. e.printStackTrace(); 
        9. } 
        10. if (object != null) {  
        11. true;  
        12. } 
        13. return
        14. }

         

        1. public  boolean
        2. boolean flag = false;  
        3. false;  
        4. try
        5. "updateStudent", student);  
        6. "更新学生信息的返回值:" + object + ",返回影响的行数");  
        7. catch
        8. e.printStackTrace(); 
        9. } 
        10. if (object != null) {  
        11. true;  
        12. } 
        13. return
        14. }

         

        1. public
        2. null;  
        3. try
        4. "selectAllStudent");  
        5. students = sqlMapClient.queryForList("selectAllStudent" , null); //批量查询(方式二)
        6. students = sqlMapClient.queryForList("selectAllStudent" , null ,0 ,40); //批量指定范围的查询(方式二)
        7. PaginatedList list=sqlMap.queryForPaginatedList (“getProductList”,null ,10 );  
        list.nextPage();  
        list.previousPage();      //批量分页查询8. catch
        9. e.printStackTrace(); 
        10. } 
        11. return
        12. }

         

        1. public
        2. null;  
        3. try
        4. "selectStudentByName",name);  
        5. catch
        6. e.printStackTrace(); 
        7. } 
        8. return
        9. }

         

        1. public Student selectStudentById(int
        2. null;  
        3. try
        4. student = (Student) sqlMapClient.queryForObject("selectStudentById", id); 
        5. //sqlMapClient.queryForObject(“getStu”, parameterObject, student );在指定对象中存放查询结果
        6. catch
        7. e.printStackTrace(); 
        8. } 
        9. return
        10. } 
        11. }

        TestIbatis.java :  


        1. publicclass
        2. publicstaticvoid
        3. new
        4. "测试插入");  
        5. new
        6. "李四");  
        7. "2011-09-02"));  
        8. 88);  
        9. System.out.println(studentDaoImpl.addStudent(addStudent)); 
        10. "测试根据id查询");  
        11. 1));  
        12. "测试模糊查询");  
        13. "李");  
        14. for
        15. System.out.println(student); 
        16. } 
        17. "测试查询所有");  
        18. List<Student> students = studentDaoImpl.selectAllStudent(); 
        19. for
        20. System.out.println(student); 
        21. } 
        22. "根据id删除学生信息");  
        23. 1));  
        24. "测试更新学生信息");  
        25. new
        26. 1);  
        27. "李四1");  
        28. "2011-08-07"));  
        29. 21);  
        30. System.out.println(studentDaoImpl.updateStudent(updateStudent)); 
        31. } 
        32. }


        iBatis 的优缺点:

        优点:

        1、减少代码量,简单;

        2、性能增强;

        3、Sql 语句与程序代码分离;

        4、增强了移植性;

        缺点:

        1、和Hibernate 相比,sql 需要自己写;

        2、参数数量只能有一个,多个参数时不太方便;

        标签:ibatis,return,入门教程,id,iBatis,student,简单,public
        From: https://blog.51cto.com/iwtxokhtd/6249705

        相关文章

        • Reverse|Buuctf 简单注册器
          反编译apk文件,搜索flag找到关键代码publicvoidonClick(Viewparam1View){byteb=1;Stringstr=editview.getText().toString();if(str.length()!=32||str.charAt(31)!='a'||str.charAt(1)!='b'||str.ch......
        • 爬虫JS逆向其实挺简单
          JS逆向爬虫是指通过分析网站的JavaScript代码,模拟浏览器行为,从而获取网站数据的一种方式。下面是一个JS逆向爬虫的案例:1、分析目标网站的JavaScript代码,找到数据请求的URL和参数。2、使用Python的Requests库发送模拟的HTTP请求,携带必要的参数。3、解析返回的数据,提取需要的信息......
        • 电脑无法更新的一个简单解决办法
          我的电脑买了没多久,由于之前觉得老是更新太麻烦,看网上说电脑不更新也没关系,于是我搜索了一些办法把电脑弄得不再更新,具体什么办法我忘记了,动了一些系统文件,后来尝试修复也修复不了。网上搜了很多解决电脑无法更新的办法,尝试无果。最后我在微软官网下载了Windows10更新助手,一下子......
        • Python多线程爬虫简单模板
          多线程爬虫的流程可以大致分为:(1)获取种子URL:从初始URL中抓取起始页面,解析其中的URL,并将这些URL添加到未访问的URL队列中;(2)解析下载的网页:从URL队列中取出一个URL,下载其内容,解析其中的链接,并把新的链接放入未访问的URL队列中;(3)存储爬取的数据:从URL队列中取出未访问的URL,把其中的内......
        • 建立一个简单的web项目的dome
          创建一个web项目,添加一个HelloServlet类1、导入两个maven依赖,因为类中继承了HttpServlet,所以要有对应的jar包没有可以去maven仓库中下载<!--https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api-->  <dependency>   <groupId>javax.servlet</gr......
        • iBatis与MyBatis区别
           iBatis框架的主要优势:1、iBatis封装了绝大多数的JDBC样板代码,使得开发者只需关注SQL本身,而不需要花费精力去处理例如注册驱动,创建Connection,以及确保关闭Connection这样繁杂的代码。2、从iBatis到MyBatis,不只是名称上的变化,MyBatis提供了更为强大的功能,同时并没有损......
        • python练习-简单计算器
          #*_*coding:utf8*_*#简单计算器importtkinterfromfunctoolsimportpartial#按钮输入调用defget_input(entry1,argu):#从entry窗口展示中获取输入的内容input_data=entry1.get()#合法运算符:+-*/--**//+-#------------输入合法性判断的......
        • AWS CLI入门教程(亲测)
          背景因为公司有用到S3,所以整理了一个S3的简单入门教程。当然,入门之后有其他更高级的用法需求,就靠自己去查文档了。入门的教程能让你快速上手,不至于翻阅一堆文档,容易被劝退。这里主要是介绍如何用cli去操作S3。官方文档https://docs.aws.amazon.com/cli/latest/userguide/cli-se......
        • 缓存----Ibatis /Hibernate
          iBatis缓存的使用方法及解释:以iBatis2.3为例,做以下配置即可实现对某些查询进行缓存1、<settingslazyLoadingEnabled="false" cacheModelsEnabled="true" enhancementEnabled="true"/>   注释:       lazyLoadingEnabled延迟加载数据;cacheModelsEna......
        • flask_简单服务器搭建----根据不同的路由实现不同的功能
           当函数中出现很多的条件分支==,可使用字典封装 ......