使用ibatis的理由:
1. 知道怎样操作10种以上的数据库
2. 可配置的caching(包括从属)
3. 支持DataSource、local transaction managemen和global transaction
4. 简单的XML配置文档
5. 支持Map, Collection, List和简单类型包装(如Integer, String)
6. 支持JavaBeans类(get/set 方法)
7. 支持复杂的对象映射(如populating lists, complex object models)
8. 对象模型从不完美(不需要修改)
9. 数据模型从不完美(不需要修改)
10. 你已经知道SQL,为什么还要学习其他东西
11. ibatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便
利。
12. ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,大大简化了Java数
据库编程的重复工作。
13. 简单易于学习,易于使用, 非常实用。
14. 因为Ibatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句,因
此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。
15. 阿里巴巴、慧点科技等多家知名软件公司都使用Ibatis。(这才是重点啊,不学何以学sofa啊)
环境搭建流程:(java语言+oralce)
1、下载jar包
2、eclipse中新建工程,将相关jar包导入ibatis-2.3.0.677.jar ojdbc14.jar
3、配置文件(三种):
jdbc连接的属性文件
总配置文件
关于每个实体的映射文件
SqlMap.properties(oralce版)
- driver=oracle.jdbc.driver.OracleDriver
- url=jdbc:oracle:thin:@127.0.0.1:1521:wxy
- username=wxy
- password=123456
SqlMap.properties(mysql版)
- driver=com.mysql.jdbc.Driver
- url=jdbc:mysql://localhost:3306/wxy
- username=root
- password=123456
SqlMapConfig.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <!--添加JDBC配置文件-->
- <properties resource="SqlMap.properties"/>
- <transactionManager type="JDBC">
- <dataSource type="SIMPLE">
- <property value="${driver}" name="JDBC.Driver"/>
- <property value="${url}" name="JDBC.ConnectionURL"/>
- <property value="${username}" name="JDBC.Username"/>
- <property value="${password}" name="JDBC.Password"/>
- </dataSource>
- </transactionManager>
- <!--添加实体类映射文件,注意路径的格式-->
- <sqlMap resource="com/wxy/Student.xml"/>
- </sqlMapConfig>
实体类的映射文件Student.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.rog//DTD SQL Map 2.0//EN" "http://ibatis.apche.org/dtd/sql-map-2.dtd">
- <sqlMap>
- <!--
- <resultMap id="StudentResult" class="Student">
- <result property="sid" column="sid"/>
- <result property="sname" column="sname"/>
- <result property="major" column="major"/>
- <result property=birth" column="birth"/>
- </resultMap>
- -->
- </sqlMap>
创建对应的Student.java
- package com.wxy;
- import java.sql.Date;
- public class Student {
- private int sid=0;
- private String sname = null;
- private String major = null;
- private Date birth = null;
- private float score = 0;
- //保证要有无参构造器
- public Student(){}
- public int getSid() {
- return sid;
- }
- public void setSid(int sid) {
- this.sid = sid;
- }
- public String getSname() {
- return sname;
- }
- public void setSname(String sname) {
- this.sname = sname;
- }
- public String getMajor() {
- return major;
- }
- public void setMajor(String major) {
- this.major = major;
- }
- public Date getBirth() {
- return birth;
- }
- public void setBirth(Date birth) {
- this.birth = birth;
- }
- public float getScore() {
- return score;
- }
- public void setScore(float score) {
- this.score = score;
- }
- }
定义crud接口IStudentDao.java
- package com.wxy;
- import java.util.List;
- public interface IStudentDao {
- public void addStudentBySequence(Student student);
- public void addStudent(Student student);
- public void deleteStudentById(int id);
- public void updateStudentById(Student student);
- public List<Student>queryAllStudent();
- public Student queryStudentById(int id);
- public List<Student>queryStudentByName(String name);
- }
在Student.xml中配置sql语句:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.rog//DTD SQL Map 2.0//EN" "http://ibatis.apche.org/dtd/sql-map-2.dtd">
- <sqlMap>
- <!--
- <resultMap id="StudentResult" class="Student">
- <result property="sid" column="sid"/>
- <result property="sname" column="sname"/>
- <result property="major" column="major"/>
- <result property=birth" column="birth"/>
- </resultMap>
- -->
- <!-- typeAlias别名,缩减类名前的包名字 -->
- <typeAlias alias="Student" type="com.wxy.Student"/>
- <selet id ="selectAllStudent" resultClass="Student">
- select * from student
- </selet>
- <!--查询所有学生-->
- <select id="selectAllStudent" resultClass="Student">
- select * from student
- </select>
- <!--根据id查询学生-->
- <select id="selectStudentById" parameterClass="int" resultClass="Student">
- select * from student where id=#id#
- </select>
- <!--添加学生-->
- <insert id="insertStudent" parameterClass="Student">
- insert into Student(id, name, major, birth, score)
- values (#id#, #name#, #major#, #birth#, #score#)
- </insert>
- <!--根据id删除学生-->
- <delete id="deleteStudentById" parameterClass="int">
- delete from student where id = #id#
- </delete>
- <!--根据sid修改学生-->
- <update id="updateStudentById" parameterClass="Student">
- update Student set
- name=#name#
- major=#major#
- score=#score#
- birth=#birth#
- where
- id=#id#
- </update>
- <!--模糊查询-->
- <select id="selectStudentByName" parameterClass="String" resultClass="Student">
- select id, name, major, birth, score from Student
- where name like '%$name$%'
- </select>
- <!--主键自增方式添加学生-->
- <insert id="insertStudentBySequence" parameterClass="Student">
- <selectKey resultClass="int" keyProperty="id">
- select studentPKSequence.nextVal from dual
- </select>
- insert into Student(id, name, birth, major, score)
- values(#id#, #name#, #birth#, #major#, #score#)
- </insert>
- </sqlMap>
写接口的实现类IStudentDAOImpl .java
- package com.wxy;
- import java.io.IOException;
- import java.io.Reader;
- import java.sql.SQLException;
- import java.util.List;
- import com.ibatis.sqlmap.client.SqlMapClient;
- public class IStudentDAOImpl implements IStudentDAO{
- private static SqlMapClient sqlMapClient = null;
- /** 读取配置文件*/
- static{
- try{
- Reader reader=com.ibatis.common.resources.Resources.getResourceAsReader("com/wxy/SqlMapConfig.xml");
- sqlMapClient = com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(reader);
- reader.close();
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- //查询所有学生
- public List<Student>queryAllStudent(){
- List<Student>studentList = null;
- try{
- studentList = sqlMapClient.queryForList("selectAllStudent");
- }catch(SQLException e){
- e.printStackTrace();
- }
- return studentList;
- }
- //根据id查询学生
- public Student queryStudentById(int id){
- Student student = null;
- try{
- student = (Student)sqlMapClient.queryForObject("selectStudentById",id);
- }catch(SQLException e){
- e.printStackTrace();
- }
- return student;
- }
- //添加学生
- public void addStudent(Student student){
- try{
- sqlMapClient.insert("insertStudent", student);
- }catch(SQLException e){
- e.printStackTrace();
- }
- }
- //根据sid删除学生
- public void deleteStudentById(int id){
- try{
- sqlMapClient.delete("deleteStudentById", id);
- }catch(SQLException e){
- e.printStackTrace();
- }
- }
- //根据id修改学生
- public void updateStudentById(Student student){
- try{
- sqlMapClient.update("updateStudentById",student);
- }catch(SQLException e){
- e.printStackTrace();
- }
- }
- //模糊查询
- public List<Student>queryStudentByName(String name){
- List<Student>studentList = null;
- try{
- studentList = sqlMapClient.queryForList("selectStudentByName", name);
- }catch(SQLException e){
- e.printStackTrace();
- }
- return studentList;
- }
- //根据主键自增方式添加学生,让数据库自动给对象设定id
- public void addStudentBySequence(Student student){
- try{
- sqlMapClient.insert("insertStudentBySequence",student);
- }catch(SQLException e){
- e.printStackTrace();
- }
- }
- @Override
- public void updateStudentById(int id) {
- // TODO Auto-generated method stub
- }
- }
编写测试类 ibatisTest.java
- package com.wxy;
- public class ibatisTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- IStudentDAO dao = new IStudentDAOImpl();
- for(Student student:dao.queryAllStudent()){
- System.out.println(student);
- }
- }
- }