所有文档资料均可在此下载: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;
}
}
第七步:测试自己实现的方法,最后做一个小结。