iBatis简单入门教程

47 篇文章 0 订阅

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 、编写配置文件:

Jdbc 连接的属性文件

总配置文件, SqlMapConfig.xml

关于每个实体的映射文件(Map 文件)

 

Demo :

Student.java:

复制代码
 1 package com.iflytek.entity; 
 2  3 import java.sql.Date; 
 4  5 /** 
 6 * @author xudongwang 2011-12-31 
 7 * 
 8 * Email:xdwangiflytek@gmail.com 
 9 * 
10 */ 
11 public class Student { 
12 // 注意这里需要保证有一个无参构造方法,因为包括Hibernate在内的映射都是使用反射的,如果没有无参构造可能会出现问题 
13 private int id; 
14 private String name; 
15 private Date birth; 
16 private float score; 
17 18 public int getId() { 
19 return id; 
20 } 
21 22 public void setId(int id) { 
23 this.id = id; 
24 } 
25 26 public String getName() { 
27 return name; 
28 } 
29 30 public void setName(String name) { 
31 this.name = name; 
32 } 
33 34 public Date getBirth() { 
35 return birth; 
36 } 
37 38 public void setBirth(Date birth) { 
39 this.birth = birth; 
40 } 
41 42 public float getScore() { 
43 return score; 
44 } 
45 46 public void setScore(float score) { 
47 this.score = score; 
48 } 
49 50 @Override 
51 public String toString() { 
52 return "id=" + id + "\tname=" + name + "\tmajor=" + birth + "\tscore=" 
53 + score + "\n"; 
54 } 
55 56  
复制代码

SqlMap.properties :

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

Student.xml :

复制代码
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
 3    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
 4 
 5 <sqlMap>
 6     <!-- 通过typeAlias使得我们在下面使用Student实体类的时候不需要写包名 -->
 7     <typeAlias alias="Student" type="com.iflytek.entity.Student" />
 8 
 9     <!-- 这样以后改了sql,就不需要去改java代码了 -->
10     <!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->
11     <select id="selectAllStudent" resultClass="Student">
12         select * from
13         tbl_student
14     </select>
15 
16     <!-- parameterClass表示参数的内容 -->
17     <!-- #表示这是一个外部调用的需要传进的参数,可以理解为占位符 -->
18     <select id="selectStudentById" parameterClass="int" resultClass="Student">
19         select * from tbl_student where id=#id#
20     </select>
21 
22     <!-- 注意这里的resultClass类型,使用Student类型取决于queryForList还是queryForObject -->
23     <select id="selectStudentByName" parameterClass="String"
24         resultClass="Student">
25         select name,birth,score from tbl_student where name like
26         '%$name$%'
27     </select>
28 
29     <insert id="addStudent" parameterClass="Student">
30         insert into
31         tbl_student(name,birth,score) values
32         (#name#,#birth#,#score#);
33         <selectKey resultClass="int" keyProperty="id">
34             select @@identity as inserted
35             <!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->
36             <!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->
37             <!-- mssql:select @@IDENTITY as value -->
38             <!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->
39             <!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL。 
40                 有些是事后生成(post-generate)主键的,如MySQL和SQL Server 所以如果是Oracle数据库,则需要将selectKey写在insert之前 -->
41         </selectKey>
42     </insert>
43 
44     <delete id="deleteStudentById" parameterClass="int">
45         <!-- #id#里的id可以随意取,但是上面的insert则会有影响,因为上面的name会从Student里的属性里去查找 -->
46         <!-- 我们也可以这样理解,如果有#占位符,则ibatis会调用parameterClass里的属性去赋值 -->
47         delete from tbl_student where id=#id#
48     </delete>
49 
50     <update id="updateStudent" parameterClass="Student">
51         update tbl_student set
52         name=#name#,birth=#birth#,score=#score# where id=#id#
53     </update>
54 
55 </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 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
 3     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 4 
 5 <sqlMapConfig>
 6     <!-- 引用JDBC属性的配置文件 -->
 7     <properties resource="com/iflytek/entity/SqlMap.properties" />
 8     <!-- 使用JDBC的事务管理 -->
 9     <transactionManager type="JDBC">
10         <!-- 数据源 -->
11         <dataSource type="SIMPLE">
12             <property name="JDBC.Driver" value="${driver}" />
13             <property name="JDBC.ConnectionURL" value="${url}" />
14             <property name="JDBC.Username" value="${username}" />
15             <property name="JDBC.Password" value="${password}" />
16         </dataSource>
17     </transactionManager>
18     <!-- 这里可以写多个实体的映射文件 -->
19     <sqlMap resource="com/iflytek/entity/Student.xml" />
20 </sqlMapConfig>
复制代码

StudentDao :

复制代码
 1 package com.iflytek.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.iflytek.entity.Student;
 6 
 7 /**
 8  * @author xudongwang 2011-12-31
 9  * 
10  *         Email:xdwangiflytek@gmail.com
11  * 
12  */
13 public interface StudentDao {
14 
15     /**
16      * 添加学生信息
17      * 
18      * @param student
19      *            学生实体
20      * @return 返回是否添加成功
21      */
22     public boolean addStudent(Student student);
23 
24     /**
25      * 根据学生id删除学生信息
26      * 
27      * @param id
28      *            学生id
29      * @return 删除是否成功
30      */
31     public boolean deleteStudentById(int id);
32 
33     /**
34      * 更新学生信息
35      * 
36      * @param student
37      *            学生实体
38      * @return 更新是否成功
39      */
40     public boolean updateStudent(Student student);
41 
42     /**
43      * 查询全部学生信息
44      * 
45      * @return 返回学生列表
46      */
47     public List<Student> selectAllStudent();
48 
49     /**
50      * 根据学生姓名模糊查询学生信息
51      * 
52      * @param name
53      *            学生姓名
54      * @return 学生信息列表
55      */
56     public List<Student> selectStudentByName(String name);
57 
58     /**
59      * 根据学生id查询学生信息
60      * 
61      * @param id
62      *            学生id
63      * @return 学生对象
64      */
65     public Student selectStudentById(int id);
66 
67 }
复制代码

StudentDaoImpl :

复制代码
  1 package com.iflytek.daoimpl;
  2 
  3 import java.io.IOException;
  4 import java.io.Reader;
  5 import java.sql.SQLException;
  6 import java.util.List;
  7 
  8 import com.ibatis.common.resources.Resources;
  9 import com.ibatis.sqlmap.client.SqlMapClient;
 10 import com.ibatis.sqlmap.client.SqlMapClientBuilder;
 11 import com.iflytek.dao.StudentDao;
 12 import com.iflytek.entity.Student;
 13 
 14 /**
 15  * @author xudongwang 2011-12-31
 16  * 
 17  *         Email:xdwangiflytek@gmail.com
 18  * 
 19  */
 20 public class StudentDaoImpl implements StudentDao {
 21 
 22     private static SqlMapClient sqlMapClient = null;
 23 
 24     // 读取配置文件
 25     static {
 26         try {
 27             Reader reader = Resources
 28                     .getResourceAsReader("com/iflytek/entity/SqlMapConfig.xml");
 29             sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
 30             reader.close();
 31         } catch (IOException e) {
 32             e.printStackTrace();
 33         }
 34     }
 35 
 36     public boolean addStudent(Student student) {
 37         Object object = null;
 38         boolean flag = false;
 39         try {
 40             object = sqlMapClient.insert("addStudent", student);
 41             System.out.println("添加学生信息的返回值:" + object);
 42         } catch (SQLException e) {
 43             e.printStackTrace();
 44         }
 45         if (object != null) {
 46             flag = true;
 47         }
 48         return flag;
 49     }
 50 
 51     public boolean deleteStudentById(int id) {
 52         boolean flag = false;
 53         Object object = null;
 54         try {
 55             object = sqlMapClient.delete("deleteStudentById", id);
 56             System.out.println("删除学生信息的返回值:" + object + ",这里返回的是影响的行数");
 57         } catch (SQLException e) {
 58             e.printStackTrace();
 59         }
 60         if (object != null) {
 61             flag = true;
 62 
 63         }
 64         return flag;
 65 
 66     }
 67 
 68     public boolean updateStudent(Student student) {
 69         boolean flag = false;
 70         Object object = false;
 71         try {
 72             object = sqlMapClient.update("updateStudent", student);
 73             System.out.println("更新学生信息的返回值:" + object + ",返回影响的行数");
 74         } catch (SQLException e) {
 75             e.printStackTrace();
 76         }
 77         if (object != null) {
 78             flag = true;
 79         }
 80         return flag;
 81     }
 82 
 83     public List<Student> selectAllStudent() {
 84         List<Student> students = null;
 85         try {
 86             students = sqlMapClient.queryForList("selectAllStudent");
 87         } catch (SQLException e) {
 88             e.printStackTrace();
 89         }
 90         return students;
 91     }
 92 
 93     public List<Student> selectStudentByName(String name) {
 94         List<Student> students = null;
 95         try {
 96             students = sqlMapClient.queryForList("selectStudentByName",name);
 97         } catch (SQLException e) {
 98             e.printStackTrace();
 99         }
100         return students;
101     }
102 
103     public Student selectStudentById(int id) {
104         Student student = null;
105         try {
106             student = (Student) sqlMapClient.queryForObject(
107                     "selectStudentById", id);
108         } catch (SQLException e) {
109             e.printStackTrace();
110         }
111         return student;
112     }
113 }
复制代码

TestIbatis.java :

复制代码
 1 package com.iflytek.test;
 2 
 3 import java.sql.Date;
 4 import java.util.List;
 5 
 6 import com.iflytek.daoimpl.StudentDaoImpl;
 7 import com.iflytek.entity.Student;
 8 
 9 /**
10  * @author xudongwang 2011-12-31
11  * 
12  *         Email:xdwangiflytek@gmail.com
13  * 
14  */
15 public class TestIbatis {
16 
17     public static void main(String[] args) {
18         StudentDaoImpl studentDaoImpl = new StudentDaoImpl();
19 
20         System.out.println("测试插入");
21         Student addStudent = new Student();
22         addStudent.setName("李四");
23         addStudent.setBirth(Date.valueOf("2011-09-02"));
24         addStudent.setScore(88);
25         System.out.println(studentDaoImpl.addStudent(addStudent));
26 
27         System.out.println("测试根据id查询");
28         System.out.println(studentDaoImpl.selectStudentById(1));
29 
30         System.out.println("测试模糊查询");
31         List<Student> mohuLists = studentDaoImpl.selectStudentByName("李");
32         for (Student student : mohuLists) {
33             System.out.println(student);
34         }
35 
36         System.out.println("测试查询所有");
37         List<Student> students = studentDaoImpl.selectAllStudent();
38         for (Student student : students) {
39             System.out.println(student);
40         }
41 
42         System.out.println("根据id删除学生信息");
43         System.out.println(studentDaoImpl.deleteStudentById(1));
44 
45         System.out.println("测试更新学生信息");
46         Student updateStudent = new Student();
47         updateStudent.setId(1);
48         updateStudent.setName("李四1");
49         updateStudent.setBirth(Date.valueOf("2011-08-07"));
50         updateStudent.setScore(21);
51         System.out.println(studentDaoImpl.updateStudent(updateStudent));
52 
53     }
54 }
复制代码

iBatis 的优缺点:

优点:

1、 减少代码量,简单;

2、 性能增强;

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

4、 增强了移植性;

缺点:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值