Ibean

来源:互联网 发布:德瓦管在淘宝上叫什么 编辑:程序博客网 时间:2024/06/16 05:07

iBatis 简介:

iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis 已经改名为Mybatis 了。如果大家想深入了解ibatis的话,可以参考《深入分析iBATIS框架之系统架构与映射原理》一文。

官网为: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 文件)

Student.java:

[java] view plaincopy
  1. package com.lyz.entity;  
  2.   
  3. import java.sql.Date;  
  4. /** 
  5.  * 学生的实体类 
  6.  * @author liuyazhuang 
  7.  * 
  8.  */  
  9. public class Student {  
  10.     // 注意这里需要保证有一个无参构造方法,因为包括Hibernate在内的映射都是使用反射的,  
  11.     //如果没有无参构造可能会出现问题   
  12.     private int id;  
  13.     private String name;  
  14.     private Date birth;  
  15.     private float score;  
  16.       
  17.     public int getId() {  
  18.         return id;  
  19.     }  
  20.     public void setId(int id) {  
  21.         this.id = id;  
  22.     }  
  23.     public String getName() {  
  24.         return name;  
  25.     }  
  26.     public void setName(String name) {  
  27.         this.name = name;  
  28.     }  
  29.     public Date getBirth() {  
  30.         return birth;  
  31.     }  
  32.     public void setBirth(Date birth) {  
  33.         this.birth = birth;  
  34.     }  
  35.     public float getScore() {  
  36.         return score;  
  37.     }  
  38.     public void setScore(float score) {  
  39.         this.score = score;  
  40.     }  
  41.       
  42.     @Override  
  43.     public String toString() {  
  44.         return "Student [id=" + id + ", name=" + name + ", birth=" + birth  
  45.                 + ", score=" + score + "]";  
  46.     }   
  47.       
  48. }  
SqlMap.properties
[plain] view plaincopy
  1. driver=com.mysql.jdbc.Driver  
  2. url=jdbc:mysql://localhost:3307/ibatis  
  3. username=root  
  4. password=root  
Student.xml

[html] view plaincopy
  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. <sqlMap>  
  5.   
  6.     <!-- 通过typeAlias使得我们在下面使用Student实体类的时候不需要写包名 -->  
  7.     <typeAlias alias = "Student" type="com.lyz.entity.Student" />  
  8.     <!-- 这样以后改了sql,就不需要去改java代码了 -->  
  9.     <!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->  
  10.     <select id = "selectAllStudent" resultClass="Student">  
  11.         select * from  
  12.         tbl_student  
  13.     </select>  
  14.       
  15.     <!-- parameterClass表示参数的内容 -->  
  16.     <!-- #表示这是一个外部调用的需要传进的参数,可以理解为占位符 -->  
  17.     <select id = "selectStudentById" parameterClass="int" resultClass="Student">  
  18.         select * from tbl_student where id=#id#  
  19.     </select>  
  20.       
  21.     <!-- 注意这里的resultClass类型,使用Student类型取决于queryForList还是queryForObject -->  
  22.     <select id = "selectStudentByName" parameterClass="String" resultClass="Student">  
  23.         select name,birth,score from tbl_student where name like '%$name$%'  
  24.     </select>  
  25.       
  26.     <insert id = "addStudent" parameterClass="Student">  
  27.         insert into  
  28.         tbl_student(name,birth,score) values  
  29.         (#name#,#birth#,#score#)  
  30.         <selectKey resultClass = "int" keyProperty="id">  
  31.             select @@identity as inserted  
  32.             <!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->  
  33.             <!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->  
  34.             <!-- mssql:select @@IDENTITY as value -->  
  35.             <!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->  
  36.             <!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL。   
  37.                 有些是事后生成(post-generate)主键的,如MySQL和SQL Server 所以如果是Oracle数据库,则需要将selectKey写在insert之前 -->  
  38.         </selectKey>  
  39.     </insert>  
  40.       
  41.     <delete id = "deleteStudentById" parameterClass="int">  
  42.         <!-- #id#里的id可以随意取,但是上面的insert则会有影响,因为上面的name会从Student里的属性里去查找 -->  
  43.         <!-- 我们也可以这样理解,如果有#占位符,则ibatis会调用parameterClass里的属性去赋值 -->  
  44.         delete from tbl_student where id=#id#  
  45.     </delete>  
  46.       
  47.     <update id = "updateStudent" parameterClass="Student">  
  48.         update tbl_student set name=#name#,birth=#birth#,score=#score# where id=#id#  
  49.     </update>  
  50.       
  51. </sqlMap>  
SqlMapConfig.xml

[html] view plaincopy
  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. <sqlMapConfig>  
  5.     <!-- 引用JDBC属性的配置文件 -->  
  6.     <properties resource="SqlMap.properties"/>  
  7.     <!-- 使用JDBC的事务管理 -->  
  8.     <transactionManager type="JDBC">  
  9.     <!-- 数据源 -->  
  10.     <dataSource type="SIMPLE">  
  11.     <property name="JDBC.Driver" value="${driver}"/>  
  12.     <property name="JDBC.ConnectionURL" value="${url}"/>  
  13.     <property name="JDBC.Username" value="${username}"/>  
  14.     <property name="JDBC.Password" value="${password}"/>  
  15.     </dataSource>  
  16.     </transactionManager>  
  17.     <!-- 这里可以写多个实体的映射文件 -->  
  18.     <sqlMap resource="com/lyz/entity/Student.xml"/>  
  19. </sqlMapConfig>  
StudentDao
[java] view plaincopy
  1. package com.lyz.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.lyz.entity.Student;  
  6.   
  7. /** 
  8.  * 学生数据操作接口 
  9.  * 这个类中封装了对学生类的增删改查操作 
  10.  * @author liuyazhuang 
  11.  * 
  12.  */  
  13. public interface StudentDao {  
  14.     /** 
  15.     * 添加学生信息 
  16.     * 
  17.     * @param student 
  18.     * 学生实体 
  19.     * @return 返回是否添加成功 
  20.     */  
  21.     public boolean addStudent(Student student);  
  22.     /** 
  23.     * 根据学生id删除学生信息 
  24.     * 
  25.     * @param id 
  26.     * 学生id 
  27.     * @return 删除是否成功 
  28.     */  
  29.     public boolean deleteStudentById(int id);  
  30.     /** 
  31.     * 更新学生信息 
  32.     * 
  33.     * @param student 
  34.     * 学生实体 
  35.     * @return 更新是否成功 
  36.     */  
  37.     public boolean updateStudent(Student student);  
  38.     /** 
  39.     * 查询全部学生信息 
  40.     * 
  41.     * @return 返回学生列表 
  42.     */  
  43.     public List<Student> selectAllStudent();  
  44.     /** 
  45.     * 根据学生姓名模糊查询学生信息 
  46.     * 
  47.     * @param name 
  48.     * 学生姓名 
  49.     * @return 学生信息列表 
  50.     */  
  51.     public List<Student> selectStudentByName(String name);  
  52.     /** 
  53.     * 根据学生id查询学生信息 
  54.     * 
  55.     * @param id 
  56.     * 学生id 
  57.     * @return 学生对象 
  58.     */  
  59.     public Student selectStudentById(int id);   
  60. }  
StudentDaoImpl
[java] view plaincopy
  1. package com.lyz.dao.impl;  
  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.lyz.dao.StudentDao;  
  12. import com.lyz.entity.Student;  
  13.   
  14. /** 
  15.  * 学生数据操作接口的实现类 
  16.  *  
  17.  * @author liuyazhuang 
  18.  * 
  19.  */  
  20. public class StudentDaoImpl implements StudentDao {  
  21.     // SqlMapClient客户端对象  
  22.     private static SqlMapClient sqlMapClient = null;  
  23.     // 在静态代码块中读取配置文件  
  24.     static {  
  25.         try {  
  26.             Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");  
  27.             sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);  
  28.             reader.close();  
  29.         } catch (IOException e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.     }  
  33.   
  34.     @Override  
  35.     public boolean addStudent(Student student) {  
  36.         Object object = null;  
  37.         boolean flag = false;  
  38.         try {  
  39.             object = sqlMapClient.insert("addStudent", student);  
  40.             System.out.println("添加学生信息的返回值:" + object);  
  41.         } catch (SQLException e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.         if (object != null) {  
  45.             flag = true;  
  46.         }  
  47.         return flag;  
  48.     }  
  49.   
  50.     @Override  
  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.         return flag;  
  64.     }  
  65.   
  66.     @Override  
  67.     public boolean updateStudent(Student student) {  
  68.         boolean flag = false;  
  69.         Object object = null;  
  70.         try {  
  71.             object = sqlMapClient.update("updateStudent", student);  
  72.             System.out.println("更新学生信息的返回值:" + object + ",返回影响的行数");  
  73.         } catch (SQLException e) {  
  74.             e.printStackTrace();  
  75.         }  
  76.         if (object != null) {  
  77.             flag = true;  
  78.         }  
  79.         return flag;  
  80.     }  
  81.   
  82.     @Override  
  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.     @Override  
  94.     public List<Student> selectStudentByName(String name) {  
  95.         List<Student> students = null;  
  96.         try {  
  97.             students = sqlMapClient.queryForList("selectStudentByName", name);  
  98.         } catch (SQLException e) {  
  99.             e.printStackTrace();  
  100.         }  
  101.         return students;  
  102.     }  
  103.   
  104.     @Override  
  105.     public Student selectStudentById(int id) {  
  106.         Student student = null;  
  107.         try {  
  108.             student = (Student) sqlMapClient.queryForObject("selectStudentById", id);  
  109.         } catch (SQLException e) {  
  110.             e.printStackTrace();  
  111.         }  
  112.         return student;  
  113.     }  
  114.   
  115. }  
TestIbatis.java

[java] view plaincopy
  1. package com.lyz.test;  
  2.   
  3. import java.sql.Date;  
  4. import java.util.List;  
  5.   
  6. import com.lyz.dao.StudentDao;  
  7. import com.lyz.dao.impl.StudentDaoImpl;  
  8. import com.lyz.entity.Student;  
  9.   
  10. /** 
  11.  * ibatis框架的测试类 
  12.  * @author liuyazhuang 
  13.  * 
  14.  */  
  15. public class TestIbatis {  
  16.       
  17.     public static void main(String[] args) {  
  18.           
  19.         StudentDao studentDaoImpl = new StudentDaoImpl();  
  20.         System.out.println("测试插入");  
  21.         Student addStudent = new Student();  
  22.         addStudent.setName("李四");  
  23.         addStudent.setBirth(Date.valueOf("1992-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.           
  31.         System.out.println("测试模糊查询");  
  32.         List<Student> mohuLists = studentDaoImpl.selectStudentByName("李");  
  33.         for (Student student : mohuLists) {  
  34.             System.out.println(student);  
  35.         }  
  36.           
  37.         System.out.println("测试查询所有");  
  38.         List<Student> students = studentDaoImpl.selectAllStudent();  
  39.         for (Student student : students) {  
  40.             System.out.println(student);  
  41.         }  
  42.           
  43.         System.out.println("测试更新学生信息");  
  44.         Student updateStudent = new Student();  
  45.         updateStudent.setId(1);  
  46.         updateStudent.setName("李四1");  
  47.         updateStudent.setBirth(Date.valueOf("2011-08-07"));  
  48.         updateStudent.setScore(21);  
  49.         System.out.println(studentDaoImpl.updateStudent(updateStudent));  
  50.           
  51.         System.out.println("根据id删除学生信息");  
  52.         System.out.println(studentDaoImpl.deleteStudentById(1));  
  53.     }  
  54. }  

运行效果


注:我修改过自己的数据库默认端口,所以我的端口是3307,mysql默认端口是3306,大家如果没有改过端口的话,那端口就是3306

0 0
原创粉丝点击