ibatis的优点:
与jdbc相比较
1、减少了61%的代码量
2、简单 上手容易 因为你学习了jdbc
3、架构级性能增强
4、Sql语句与程序代码分离
5、简化项目中的分工
6、增强了移植性
坏处:
1、sql语句需要自己写
2、参数数量只能一个
SqlMapConfig.xml
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL MapConfig 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="cn/itcast/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="cn/itcast/student.xml"/>
</sqlMapConfig>
SqlMap.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=scott
password=tiger
student.xml
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<!--typeAlias别名减少你的代码名字代码长度 -->
<typeAliasalias="student" type="cn.itcast.Student" />
<!--查询所有学生信息-->
<selectid="selectAllStudent" resultClass="Student">
select* from student
</select>
<!-- 根据ID查询学生信息 ##相当于jdbc的点位符一样-->
<select id="selectStudentById"parameterClass="int" resultClass="Student">
select * from student
where sid = #sid#
</select>
<!-- 插入数据 -->
<insert id="insertStudent"parameterClass="Student">
insert into student(sid,sname,majob,birth,score)
values (#sid#,#sname#,#majob#,#birth#,#score#)
</insert>
<!--根据ID去删除 -->
<delete id="deleteStudentById"parameterClass="int">
delete
from student
where
sid=#sid#
</delete>
<!-- 依据ID去更新修改 -->
<update id="updateStudentById"parameterClass="Student">
update student
set sname=#sname#,
majob=#majob#,
score=#score#,
birth=#birth#
where sid=#sid#
</update>
<!-- 模糊查询 -->
<select id="selectStudentByName"parameterClass="String" resultClass="Student">
select sid,sname,majob,birth,score
from student
where sname like '%$sname$%'
</select>
<!-- sql主键生成方式 -->
<insert id="insertStudentBySequence"parameterClass="Student">
<selectKey resultClass="int"keyProperty="sid">
select studentPKSequence.nextVal
from dual
</selectKey>
insert into student(sid,sname,birth,majob,score)
values(#sid#,#sname#,#birth#,#majob#,#score#)
</insert>
</sqlMap>
IstudentDAOImpl.java
package cn.itcast;
import java.io.IOException;
import java.io.Reader;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;
importcom.ibatis.sqlmap.client.SqlMapClient;
public class IstudentDAOImpl implementsIStudentDAO {
privatestatic SqlMapClient sqlMapClient = null;
static{
try{
//导入相关Navigate-->open type --> resources
Readerreader = com.ibatis.common.resources.Resources
.getResourceAsReader("cn/itcast/SqlMapConfig.xml");
sqlMapClient= com.ibatis.sqlmap.client.SqlMapClientBuilder
.buildSqlMapClient(reader);
//关闭
reader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* 插入一语句
*/
publicvoid addStudent(Student student) {
try{
sqlMapClient.insert("insertStudent",student);
}catch (SQLException e) {
e.printStackTrace();
}
}
/**
* sql主键生成方式
* CREATE SEQUENCE studentPKSequence START WITH1 INCREMENT BY 1;
*/
publicvoid addStudentBySequence(Student student) {
try {
//1.从数据库序列中获取主键值
//2.往student表中的插入记录
sqlMapClient.insert("insertStudentBySequence",student);
System.out.println("sid="+ student.getScore());
}catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 根据id删除学生信息
*/
publicvoid deleteStudentById(int id) {
try{
sqlMapClient.delete("deleteStudentById", id);
System.out.println(sqlMapClient.delete("deleteStudentById",id));
}catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 查询所有学生信息
*/
publicList<Student> queryAllStudent() {
List<Student>studentList = null;
try{
studentList= sqlMapClient.queryForList("selectAllStudent");
}catch (SQLException e) {
e.printStackTrace();
}
returnstudentList;
}
/**
* 根据ID去查询学生信息
*/
publicStudent queryStudentById(int id) {
Studentstudent = null;
try{
student= (Student) sqlMapClient.queryForObject(
"selectStudentById",id);
}catch (SQLException e) {
e.printStackTrace();
}
returnstudent;
}
/**
* 模糊查询
*/
publicList<Student> queryStudentByName(String name) {
List<Student>studentList = null;
try{
studentList= sqlMapClient.queryForList("selectStudentByName", name);
}catch (SQLException e) {
e.printStackTrace();
}
returnstudentList;
}
/**
* 更新修改
*/
publicvoid updateStudentById(Student student) {
try{
sqlMapClient.update("updateStudentById",student);
System.out.println(sqlMapClient
.update("updateStudentById",student));
}catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* @param args
*/
publicstatic void main(String[] args) {
//IStudentDAOdao = new IstudentDAOImpl();
/**
* 1、查询所有学生信息
*
* for (Student student :dao.queryAllStudent()) {
* System.out.println(student); }
*/
/**
* 根据ID查询学生信息 这个111是我的学生表中的ID
*/
//System.out.println(dao.queryStudentById(111));
//这个就是测试类加载
try{
Class.forName("cn.itcast.Student").newInstance();
}catch(Exceptione){
e.printStackTrace();
}
/**
* 3 插入一条数据
Studentstudent = new Student();
student.setSid(112);
student.setSname("weixihu");
student.setMajob("Games");
student.setScore(98);
student.setBirth(Date.valueOf("2013-06-02"));
dao.addStudent(student);
//dao.deleteStudentById(112);
*/
/**
* 4、根据id去更新学生信息
Studentstudent = new Student();
student.setSid(112);
student.setSname("weixihusss");
student.setMajob("Gamesis null");
student.setScore(100);
student.setBirth(Date.valueOf("2013-06-02"));
dao.updateStudentById(student);
*/
/**
* 5、模糊查询
for(Studentstudent: dao.queryStudentByName("w")){
System.out.println(student);
}
*/
/**
* 主键生成方式测试
Studentstudent = new Student();
student.setSid(112);
student.setSname("weixihu");
student.setMajob("Games");
student.setScore(98);
student.setBirth(Date.valueOf("2013-06-02"));
dao.addStudentBySequence(student);
*/
}
}