您的位置:首页 > 其它

ibatis之HelloWorld项目,很多时候我们只需要一个HelloWorld

2011-12-06 20:05 671 查看
所有文档资料均可在此下载:http://download.csdn.net/detail/tsyj810883979/3887793

资源中包含很多比较好的,我入门的文档,ibatis2.x的jar包,ibatis源码等。还有一个本文说的HelloWord项目。

由于提供的文档中几乎都有你想要的资料,所以本文中只是一个小小的HelloWorld项目,完整代码在资源中。

很多时候其实我们只是需要一个HelloWorld,从次开始不断深入学习即可。

首先创建数据库以及两个数据表:

CREATE database db_study CHARACTER SET UTF-8;
CREATE TABLE `t_address` (
  `id` int(11) NOT NULL,
  `uid` int(11) DEFAULT NULL,
  `province` varchar(10) DEFAULT NULL,
  `postcode` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL,
  `name` varchar(10) DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

新建java项目-》导入ibatis包(项目截图)



上面是完整的项目结构图。

第一步:新建一个java project,导入数据库连接包,日志相关包,以及Ibatis包。

第二步:写实体类,用eclipse生成方法即可。

第三步:写sqlMapConfig(对应项目中的sql_map_mysql.xml文件)

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
        
<sqlMapConfig>
	<!-- 基本设置 -->
    <settings cacheModelsEnabled="false" enhancementEnabled="false"
              lazyLoadingEnabled="false" maxRequests="300" maxSessions="300"
              maxTransactions="300" useStatementNamespaces="false"/>
              
	<!-- 数据访问相关配置 -->
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
			<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/db_study?useUnicode=true&characterEncoding=UTF-8" />
			<property name="JDBC.Username" value="root" />
			<property name="JDBC.Password" value="tmall" />
		</dataSource>
	</transactionManager>
	
	<sqlMap resource="sqlmap/address_mapping.xml"/>
    <sqlMap resource="sqlmap/user_mapping.xml"/>
    
</sqlMapConfig>
第四步:定义接口,定义可以预期的可能要用到的方法(比如UserDAO)

package study.ibatis.dao;
import java.util.List;
import study.ibatis.entity.User;

public interface UserDAO {
	//增加当前用户
	void insertUser(User user);
	//删除指定用户
	void deleteByUserId(int id);
	//删除当前用户
	void deleteUser(User user);
	//更新当前用户
	void updateUser(User user);
	//查询指定用户
	User queryByUserId(int id);
	//查询所有用户
	List<User> query();
	//查询部分用户
	List<User> queryForPage(int start, int end);
	//模糊查询用户群
	List<User> search(User user);
}
第五步:针对接口定义sqlMap,例(user_mapping.xml)

<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
	<!--模块配置 -->
	<typeAlias alias="User" type="study.ibatis.entity.User" />
	<typeAlias alias="GenderTypeHandler" type="study.ibatis.handler.GenderTypeHandler" />
	<resultMap id="user" class="User">
		<result column="id" property="id"/>
        <result column="name" property="name" nullValue="unknown"/>
        <result column="sex" property="sex" typeHandler="GenderTypeHandler"/>
        <result column="age" property="age" nullValue="0"/>
	</resultMap>
	<sql id="user.all">
		id,
		name,
		sex,
		age
	</sql>
	<!-- Statement配置-->
	<!-- 增加一条记录 -->
	<insert id="Ibatis.insertUser" parameterClass="User">
		<![CDATA[
		insert into
		t_user(id, name, sex, age)
		values(#id#, #name#, #sex,handler=GenderTypeHandler#, #age#)
		]]>
	</insert>
	<!-- 更新一条数据 -->
	<update id="Ibatis.updateUser" parameterClass="User">
		UPDATE t_user
		SET
		name=#name#,
		sex=#sex,handler=GenderTypeHandler#,
		age=#age#
		WHERE id = #id#
	</update>
	<!-- 查询一条数据记录 -->
	<select id="Ibatis.queryByUserId" parameterClass="java.lang.Integer" resultMap="user">
		select
		<include refid="user.all" />
		from t_user
		where id=#id#
	</select>
	<!-- 查询所有数据 -->
	<select id="Ibatis.queryAll" resultMap="user">
		select
		<include refid="user.all" />
		from t_user
	</select>
	<!-- 删除指定的用户 -->
	<delete id="Ibatis.deleteByUserId" parameterClass="java.lang.Integer">
		delete
		from t_user
		where id=#id#
	</delete>
	<!-- 删除当前的用户 -->
	<delete id="Ibatis.deleteUser" parameterClass="user">
		delete
		from t_user
		where id=#id#
	</delete>
	<!-- 用于分页查询 -->
	<select id="Ibatis.queryForPage" parameterClass="java.util.Map" resultMap="user">
		<![CDATA[
		select
		id, name, sex, age
		from t_user
		limit #start#, #end#
		]]>
	</select>
	<!-- 动态模糊查询 -->
	<select id="Ibatis.search" parameterClass="User" resultMap="user">
		select
		<include refid="user.all" />
		from t_user
		<dynamic prepend="where">
			<isNotEmpty prepend="and" property="name">
				(name like '%$name$%')
			</isNotEmpty>
			<isNotNull prepend="and" property="sex">
				(sex = #sex,handler=GenderTypeHandler#)
			</isNotNull>
			<isNotEmpty prepend="and" property="age">
				(age = #age#)
			</isNotEmpty>
		</dynamic>		
	</select>
</sqlMap>
第六步:定义通用底层类及接口实现类

例如SQLMapBaseDAO.java

package study.ibatis.dao.impl;

import java.io.IOException;
import java.io.Reader;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class SqlMapBaseDAO {
	protected static  SqlMapClient sqlMap;
	protected static Logger logger;
	
	static {
		sqlMap = SqlMapBaseDAO.getSqlMapClient();
		logger = SqlMapBaseDAO.getLogger();
	}
	
	private static SqlMapClient getSqlMapClient() {
		String resource = "sql_map_mysql.xml";
		Reader reader;
		try {
			reader = Resources.getResourceAsReader(resource);
			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		} catch (IOException e) {
			sqlMap = null;
			e.printStackTrace();
		}
		return sqlMap;
	}
	
	protected static Logger getLogger() {
		logger = LogManager.getLogger("study.ibatis.dao");
		return logger;
	}
}
IbatisUserDAO.java

package study.ibatis.dao.impl;

import java.security.InvalidParameterException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import study.ibatis.dao.UserDAO;
import study.ibatis.entity.User;

public class IbatisUserDAO extends SqlMapBaseDAO implements UserDAO{
	//向user表中增加一条记录
	@Override
	public void insertUser(User user) {
		try {
			sqlMap.insert("Ibatis.insertUser", user);
		} catch (SQLException e) {
			e.printStackTrace();
			logger.error("插入数据时出现错误"+e.getMessage());
		}
	}
	//更新当前记录的信息
	@Override
	public void updateUser(User user) {
		try {
			//默认将自动提交事务
			sqlMap.startTransaction();
			sqlMap.update("Ibatis.updateUser", user);
			sqlMap.commitTransaction();
		} catch (SQLException e) {
			logger.error("更新数据时出现错误"+e.getMessage());
		}
	}
	//查询指定用户的信息
	@Override
	public User queryByUserId(int id) {
		User user = new User();
		try {
			user = (User)sqlMap.queryForObject("Ibatis.queryByUserId", id);
		} catch (SQLException e) {
			System.out.println("123");
			e.printStackTrace();
			logger.error("查询数据时出现错误"+e.getMessage());
		}
		return user;
	}
	//查询表中所有记录
	@SuppressWarnings("unchecked")
	@Override
	public List<User> query() {
		List<User> lsUser = new ArrayList<User>();
		try {
			lsUser = sqlMap.queryForList("Ibatis.queryAll");
		} catch (SQLException e) {
			logger.error("查询数据时出现错误"+e.getMessage());
		}
		return lsUser;
	}
	//分页查询使用
	@SuppressWarnings("unchecked")
	@Override
	public List<User> queryForPage(int start, int end) {
		if(end<=start || start<0) {
			throw new InvalidParameterException("输入参数不合法");
		}
		List<User> lsUser = new ArrayList<User>();
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("start", start);
		map.put("end", end);
		try {
			lsUser = (List<User>)sqlMap.queryForList("Ibatis.queryForPage", map);
		} catch (SQLException e) {
			logger.error("查询数据时出现错误"+e.getMessage());
		}
		return lsUser;
	}
	//删除指定的一条用户记录
	@Override
	public void deleteByUserId(int id) {
		try {
			sqlMap.delete("Ibatis.deleteByUserId", id);
		} catch (SQLException e) {
			logger.error("删除数据时出现错误"+e.getMessage());
			e.printStackTrace();
		}
	}
	//删除特定的用户
	@Override
	public void deleteUser(User user) {
		try {
			sqlMap.delete("Ibatis.deleteUser", user);
		} catch (SQLException e) {
			logger.error("删除数据时出现错误"+e.getMessage());
			e.printStackTrace();
		}
	}
	//用于模糊查询
	@SuppressWarnings("unchecked")
	@Override
	public List<User> search(User user) {
		List<User> users = null;
		try {
			users = sqlMap.queryForList("Ibatis.search", user);
		} catch (SQLException e) {
			logger.error("查询数据时出现错误"+e.getMessage());
			e.printStackTrace();
		}
		return users;
	}
}
第七步:测试自己实现的方法,最后做一个小结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐