第1,2讲 --准备ibatis环境和查询表中所有的对象

本文介绍了一个基于Ibatis的实战案例,从环境搭建到具体应用进行了详细的讲解。通过本教程,读者可以了解到Ibatis的基本配置、数据库操作的具体实现,并且能够掌握如何使用Ibatis进行表的增删改查。

 

   基于以下的对话,决定看看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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值