什么是Ibatis?
大家都知道jdbc的话就会知道,有很多操作是与业务和数据无关的真正你需要的就是,一个运行sql语句的功能,还有取回结果的功能但是jdbc要求你处理连接、会话、statement,尤其是还要你注意关闭资源,还要写try catch处理异常.ibatis 就是帮你把这些乱七八糟的东西都做了,不仅如此,还要求你把sql语句写道xml里,这样不会把sql编译到程序中,以增强程序的可移植性,在不重新编译的情况下,可以更换数据库.
Ibatis需要什么?
使用ibatis需要需要一个jar包,这个jar包在网上下载就可以了.下载之后倒入到你的工程下面就可以开始使用它了.
使用Ibatis实现查询
1.建立SqlMap.properties文件,存放数据库信息.如下:
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/ibatis 3 username=root 4 password=root
2.建立SqlMapConfig.xml文件(主配置文件),
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 文档申明 --> 3 <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config2.0//EN" 4 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> 5 6 <sqlMapConfig> 7 <settings <!--settings可以暂时不用设置--> 8 cacheModelsEnabled="true" <!--是否启用缓存机制-- > 9 lazyLoadingEnabled="true" <!-- 是否启用延迟加载机制 --> 10 enhancementEnabled="true" <!-- 是否启用字节码增强机制 --> 11 errorTracingEnabled="true" <!-- 是否启用错误处理机制 --> 12 maxRequests="100" <!-- 最大并发请求数 --> 13 maxSessions="20" <!-- 最大Session数 --> 14 maxTransactions="5" <!-- 最大并发事务数 --> 15 useStatementNamespaces="true" <!-- 是否启用名称空间 --> 16 /> 17 <properties resource="com/zhouxy/ibatis/SqlMap.properties"/> <!-- 引入properties文件 --> 18 19 <transactionManager type="JDBC"> <!-- 定义了ibatis事务管理器,有3种(JDBC,JTA,EXTERNAL) --> 20 21 <dataSource type="SIMPLE"> <!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) --> 22 23 <property name="JDBC.Driver" value="${driver}"/> <!-- 将properties文件中的属性绑定 --> 24 <property name="JDBC.ConnectionURL" value="${url}"/> 25 <property name="JDBC.Username" value="${username}"/> 26 <property name="JDBC.Password" value="${password}"/> 27 </dataSource> 28 </transactionManager> 29 30 <sqlMap resource="com/zhouxy/ibatis/Student.xml"/> <!-- 导入Student.xml文件 --> 31 </sqlMapConfig>
3.建立Student.xml文件.
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 文档申明 --> 3 <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 4 "http://ibatis.apache.org/dtd/sql-map-2.dtd"> 5 6 <sqlMap> 7 <typeAlias alias="Student" type="com.zhouxy.ibatis.Student"/> <!-- 给实体类启用简单别名 --> 8 9 <select id="selectAllStudent" resultClass="Student"> <!-- 编写sql语句.并给该sql语句命名即id,之后根据该id进行操作 --> 10 select * from student 11 </select> 12 </sqlMap>
4.编写Student实体类(Student.java)
1 package com.zhouxy.ibatis; 2 3 public class Student { 4 private int id; 5 private String name; 6 private int age; 7 public int getId() { 8 return id; 9 } 10 public void setId(int id) { 11 this.id = id; 12 } 13 public String getName() { 14 return name; 15 } 16 public void setName(String name) { 17 this.name = name; 18 } 19 public int getAge() { 20 return age; 21 } 22 public void setAge(int age) { 23 this.age = age; 24 } 25 public Student() { 26 super(); 27 } 28 29 @Override 30 public String toString() { 31 String string = "id="+id+"\tname="+name+"\tage="+age; 32 33 return string; 34 } 35 }
5.写方法解析SqlMapConfig.xml文件.可以自己运用DOMJ或者SAX去解析,但是在ibatis的jar中已经存在相关方法了,直接调用即可.我是将其封装在ReadMethod类中的readConfig方法中,方便多处调用.
1 package com.zhouxy.ibatis; 2 3 import java.io.IOException; 4 import java.io.Reader; 5 6 import com.ibatis.sqlmap.client.SqlMapClient; 7 import com.ibatis.sqlmap.client.SqlMapClientBuilder; 8 import com.ibatis.common.resources.Resources; 9 10 public class ReadMethod { 11 private static SqlMapClient sqlMapClient = null; 12 13 public static SqlMapClient readConfig(){ 14 15 Reader reader = null; 16 17 try { 18 reader = Resources.getResourceAsReader("com/zhouxy/ibatis/SqlMapConfig.xml"); 19 sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); 20 21 reader.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 26 return sqlMapClient; 27 } 28 }
6.测试
1 package com.zhouxy.ibatis; 2 3 import java.sql.SQLException; 4 import java.util.List; 5 6 public class StudentDaoImp{ 7 public static void main(String[] args) { 8 List<Student> list = null; 9 10 try { 11 list = ReadMethod.readConfig().queryForList("selectAllStudent"); //查API可知queryForList()方法有多种形式, 12 //这里使用Student.xml文件中sql语句对应的id 13 } catch (SQLException e) { 14 e.printStackTrace(); 15 } 16 17 for(Student student : list){ 18 System.out.println(student.toString()); 19 } 20 } 21 }
运行main方法,就可以将数据库中student表中的信息查询出来.如下:
时间: 2024-11-03 22:00:09