一:ibatis简介 ibatis是apache的一个开源的框架,实现了O/R mapping(对象关系映射)。特点:小巧上手比较快。
优点:
1):java代码和sql语句分离,这样在修改sql语句后,无须重新编译java代码
2):ibatis对jdbc进行了封装,使用者无须手动写代码把数据放到对象中
3):简单容易上手
缺点:
1):相对于hibernate来说,ibatis需要手动写sql语句。
2):ibatis在给sql语句传递参数时,只能传递一个参数。
二:ibatis简单使用
步骤: 1):导入相关jar包:ibatis-xxx.jar,mysql-connector-java- xxx-bin.jar(附件中可以下载)
2):总配置文件(SqlMapConfig.xml)
3):实体映射文件(对实体操作的sql语句映射)
三:实例
jdbc.properties文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ibatis username=root password=123
总配置SqlMapConfig.xml内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!-- 加载数据库连接信息配置文件 --> <properties resource="jdbc.properties" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${driver}" /> <property name="JDBC.ConnectionURL" value="${url}" /> <property name="JDBC.Username" value="${username}" /> <property name="JDBC.Password" value="${password}" /> </dataSource> </transactionManager> <!-- 引入实体映射文件 --> <sqlMap resource="com/zt/entity/Student.xml" /> </sqlMapConfig>
实体映射文件Student.xml:
<?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> <!-- alias 可以看成是Student的别名,这样在下面就不用写类的全限定名 了, 只写别名即可 --> <typeAlias alias="Student" type="com.zt.entity.Student" /> <!-- 查询所有学生信息 --> <select id="queryAllStudents" resultClass="Student"> select * from student </select> <!-- 通过参数查询学生信息 --> <select id="getStudentById" parameterClass="int" resultClass="Student"> select * from student where id=#id# <!-- #id# 类似于占位符--> </select> <!-- 根据参数进行模糊查询 --> <select id="queryStudentsByName" parameterClass="String" resultClass="Student"> select * from student where name like '%$name$%' </select> <!-- 插入操作 --> <insert id="insertStudent" parameterClass="Student"> insert into student (id, name, birthday, password) values (#id#, #name#, #birthday#, #password#) </insert> <!-- 插入操作,主键自动生成 --> <insert id="insertStudent1" parameterClass="Student"> <selectKey resultClass="int" keyProperty="id"> SELECT @@IDENTITY AS ID </selectKey> insert into student (id, name, birthday, password) values (#id#, #name#, #birthday#, #password#) </insert> <!-- 更新操作 --> <update id="updateStudent" parameterClass="Student"> update student set name=#name#,birthday=#birthday#,password=#password# where id=#id# </update> <!-- 删除操作 --> <delete id="deleteById" parameterClass="int"> delete from student where id=#id# </delete> </sqlMap>
实体Student.java
package com.zt.entity; import java.util.Date; public class Student { private int id; private String name; private String password; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "id:" + id + " name:" + name + " password:" + password; } }
IStudent 接口,定义了对Student的常用操作
package com.zt.entity; import java.util.List; /** * 学生增删改 * @author zt_pc * */ public interface IStudentDao { /** * 添加操作 * @param student * @return */ public Integer save(Student student); /** * 添加操作主键自动生成 * @param student * @return Integer */ public Integer save1(Student student); /** * 更新操作 * @param student * @return */ public void update(Student student); /** * 查询所有学生信息 * @param student * @return List<Student> */ public List<Student> queryStudents(); /** * 根据ID查询学生信息 * @param id * @return Student */ public Student getStudentById(int id); /** * 模糊查询 * @param name * @return */ public List<Student> queryStudentsByName(String name); /** * 删除操作 * @param id * @return */ public void deleteById(int id); }
StudentDao 实现了ISudentDao
package com.zt.entity; import java.io.IOException; import java.io.Reader; import java.sql.SQLException; import java.util.Date; import java.util.List; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class StudentDao implements IStudentDao { private static SqlMapClient sqlMapClient = null; static { try { Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (IOException e) { throw new RuntimeException("文件未找到"); } } @Override public Integer save(Student student) { Integer id = null; try { //queryForList的第一个参数是student.xml文件sql语句的id,第二个参数是要插入的数据 id = (Integer)sqlMapClient.insert("insertStudent", student); } catch (SQLException e) { e.printStackTrace(); } return id; } @Override public Integer save1(Student student) { Integer id = null; try { //queryForList的第一个参数是student.xml文件sql语句的id,第二个参数是要插入的数据 id = (Integer)sqlMapClient.insert("insertStudent1", student); } catch (SQLException e) { e.printStackTrace(); } return id; } @Override public void update(Student student) { try { //update的第一个参数是student.xml文件sql语句的id,第二个参数要更新数据 sqlMapClient.update("updateStudent", student); } catch (SQLException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") @Override public List<Student> queryStudents() { List<Student> students = null; try { //queryForList的第一个参数是student.xml文件sql语句的id students = (List<Student>)sqlMapClient.queryForList("queryAllStudents"); } catch (SQLException e) { e.printStackTrace(); } return students; } @SuppressWarnings("unchecked") @Override public List<Student> queryStudentsByName(String name) { List<Student> students = null; try { //queryForList的第一个参数是student.xml文件sql语句的id,第二个参数是查询条件 students = sqlMapClient.queryForList("queryStudentsByName", name); } catch (SQLException e) { e.printStackTrace(); } return students; } @Override public void deleteById(int id) { try { sqlMapClient.delete("deleteById", id); } catch (SQLException e) { e.printStackTrace(); } } @Override public Student getStudentById(int id) { Student student= null; try { //queryForObject的第一个参数是student.xml文件sql语句的id,第二个参数是查询条件 student = (Student) sqlMapClient.queryForObject("getStudentById", id); } catch (SQLException e) { e.printStackTrace(); } return student; } //测试 public static void main(String[] args) { IStudentDao studentDao = new StudentDao(); //测试查询所有学生 List<Student> students1 = studentDao.queryStudents(); if(students1 == null) return; for (Student student : students1) { System.out.println(student); } //测试根据参数查询查询学生 Student student1 = studentDao.getStudentById(1); if(student1 == null) return; System.out.println(student1); //测试模糊查询 List<Student> students2 = studentDao.queryStudentsByName("gs"); if(students2 == null) return; for (Student student : students2) { System.out.println(student); } // 测试插入操作 Student student2 = new Student(); student2.setId(4); student2.setName("wangsi"); student2.setBirthday(new Date()); student2.setPassword("123"); Integer id = studentDao.save1(student2); System.out.println(id); //测试更新操作 Student student3 = new Student(); student3.setId(4); student3.setName("wangsi12"); student3.setBirthday(new Date()); student3.setPassword("1234"); studentDao.update(student3); //测试删除操作 studentDao.deleteById(6); } }
总结:ibatis在执行增删改查操作时,首先根据要执行sql语句的ID 去 实体映射文件中查找相应的sql语句。
其中parameterClass 属性表示传递参数的类型,returnClass 表示返回值的类型。
相关推荐
简单的Ibatis入门例子,让你踏入Ibatis大门
最简单的iBatis入门例子
NULL 博文链接:https://qing393260529.iteye.com/blog/459723
iBATIS入门学习
ibatis入门教程
NULL 博文链接:https://vincent-yy.iteye.com/blog/325670
ibatis入门与ibatis迭代的用法
NULL 博文链接:https://wcp88888888.iteye.com/blog/1328456
ibatis入门到精通详细讲解,配以生动详细的实例,让你用最少的时间学以致用
ibatis入门,这里讲述了初级和高级的所有ibatis数据库连接的配置
iBATIS 入门讲解 程序源码 iBATIS开发指南
ibatis入门级完整示例,包含ibatis-2.3.4.726.jar、commons-logging-1.0.4.jar、mysql-connector-java-3.1.10-bin.jar和建表语句。
包含IBatis入门教程和开发指南的PDF格式,详细介绍了IBATIS的架构和原理,安装和配置,以及如何使用IBATIS。
ibatis 入门级教程,里面包含了Ibatis的增删改查操作,采用的数据库是Oracle,表使用的是emp表,同时包含了Ibatis的主键生成策略,里面注释写得比较详细,非常适合Ibatis入门学习
iBATIS框架学习:iBATIS入门教程
ibatis入门教程,ibatis开发指南 内含两份文档
简单的ibatis入门实例(全代码),附带数据库以及表格创建语句,适合新手学习