基于以下的对话,决定看看ibatis 这个东东
℡封号 17:21:41
ibatis 和hibernate那个快??
螃蟹 17:22:06
各有特点
℡封号 17:22:24
多表查询
螃蟹 17:22:30
ibatis的sql是自己写的,好优化,hibernate的sql不好控制
螃蟹 17:22:38
多表的话当然是ibatis
螃蟹 17:22:55
我们现在的项目就是这样子的
℡封号 17:23:00
直接写sql和用ibatis哪个快 多表
螃蟹 17:23:02
业务逻辑大都在sql里
螃蟹 17:23:16
这两个怎么比较啊
℡封号 17:23:36
怎么不能比呀?
螃蟹 17:24:07
拿什么比
螃蟹 17:24:18
ibatis最后也是走的sql啊
℡封号 17:24:54
ibatis 干了个啥??我没用过!我看到itcast上有教程
螃蟹 17:25:19
什么也没干,就他妈的,把sql组织了一下
℡封号 17:25:56
那还学不?
螃蟹 17:26:21
做个demo就行了,或者看看维系挽留的代码就完了
螃蟹 17:26:33
没什么学的
螃蟹 17:26:54
只不过在面试的时候,人家会让你将它同hibernate做比较
℡封号 17:27:22
要是人家问我 我就说我以前的同事说:
什么也没干,就他妈的,把sql组织了一下
螃蟹 17:35:35
太阳
螃蟹 17:35:51
你在网上看看
螃蟹 17:35:57
与hibernate的比较
螃蟹 17:36:01
差别大着呢
步骤:
1.首先搭建环境,导入相关的jar包,我们这里用的是mysql数据库,ibatis-2.3.4.726\lib\ibatis-2.3.4.726.jar
和mysql-connector-java-3.1.7-bin.jar
2.建立数据库表结构 student 表
+-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | sid | int(10) | NO | | NULL | | | sname | varchar(20) | YES | | NULL | | | major | varchar(20) | YES | | NULL | | | birth | date | YES | | NULL | | | score | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
3.编写配置文件
a.jdbc连接的属性文件 SqlMap.properties
driver=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost\:3306/test?useUnicode\=true&characterEncoding\=UTF-8
username=root
password=12345678
b.总配置文件 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="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="Student.xml"/>
</sqlMapConfig>
c.关于每个实体的映射文件(map) 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>
<typeAlias alias="Student" type="cn.com.xinli.ibatis.Student"/>
<select id="selectAllStudent" resultClass="Student">
select * from student
</select>
</sqlMap>
4.建立student实体:student.java
package cn.com.xinli.ibatis;
import java.sql.Date;
public class Student
{
int sid;
String sname=null;
String major=null;
Date birth=null;
private float score =0;
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;
}
}
5.对student表进行增删改查,面向接口编程,首先写接口 StudentDAO.java和实现 StudentDAOImpl.java
package cn.com.xinli.ibatis.dao;
import java.util.List;
import cn.com.xinli.ibatis.Student;
public interface StudentDAO
{
public void add(Student student);
public void addStudentBySequence();
public void deleteStudentById(int id);
public List<Student> queryAllStudents();
}
package cn.com.xinli.ibatis.dao.impl;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import cn.com.xinli.ibatis.Student;
import cn.com.xinli.ibatis.dao.StudentDAO;
public class StudentDAOImpl implements StudentDAO
{
public void add(Student student)
{
// TODO Auto-generated method stub
}
public void addStudentBySequence() {
// TODO Auto-generated method stub
}
public void deleteStudentById(int id) {
// TODO Auto-generated method stub
}
public List<Student> queryAllStudents()
{
// TODO Auto-generated method stub
List<Student> studentList=null;
try {
studentList=sqlMapClient.queryForList("selectAllStudent");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return studentList;
}
}
}
6.查询所有的student对象,在Student.xml中写sql,在实现类中写简单的读取配置文件和main方法,使用ibatis进行表的增删改查固定的代码就是先获取SqlMapClient 对象,调用其中的增删改查的方法完成业务,对于查询所有的student
我们需要sqlMapClient.queryForList("selectAllStudent");,参数传递map中定义的查询所有student的sql的别名,用一个list接受返回对象。
package cn.com.xinli.ibatis.dao.impl;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import org.apache.log4j.Logger;
import cn.com.xinli.ibatis.Student;
import cn.com.xinli.ibatis.dao.StudentDAO;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class StudentDAOImpl implements StudentDAO
{
private static SqlMapClient sqlMapClient=null;
private final static Logger log=Logger.getLogger(StudentDAOImpl.class);
static
{
try
{
Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void add(Student student)
{
// TODO Auto-generated method stub
}
public void addStudentBySequence() {
// TODO Auto-generated method stub
}
public void deleteStudentById(int id) {
// TODO Auto-generated method stub
}
public List<Student> queryAllStudents()
{
// TODO Auto-generated method stub
List<Student> studentList=null;
try {
studentList=sqlMapClient.queryForList("selectAllStudent");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return studentList;
}
public static void main(String[] args)
{
StudentDAO studentDAO=new StudentDAOImpl();
List<Student> studentList = studentDAO.queryAllStudents();
for(Student student:studentList)
{
log.info(student.getSid());
log.info(student.getSname());
log.info(student.getMajor());
log.info(student.getBirth());
log.info(student.getScore());
}
}
}
7.运行 StudentDAOImpl.java
485 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(89) - 1
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(90) - 1
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(91) - 1
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(92) - 1985-12-11
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(93) - 1.0
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(89) - 2
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(90) - 2
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(91) - 2
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(92) - 1985-12-10
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(93) - 2.0
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(89) - 324
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(90) - 你好
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(91) - 1
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(92) - 1985-12-14
500 [main] INFO cn.com.xinli.ibatis.dao.impl.StudentDAOImpl(93) - 56.0
本文介绍了一个基于Ibatis的实战案例,从环境搭建到具体应用进行了详细的讲解。通过本教程,读者可以了解到Ibatis的基本配置、数据库操作的具体实现,并且能够掌握如何使用Ibatis进行表的增删改查。

被折叠的 条评论
为什么被折叠?



