Ibatis持久层框架是MyBatis的前身, 在springMVC中Ibatis与MyBatis使用不同,必须实现dao层,之前由于dao层没有实现出现了许多bug,这个地方比较容易出错。MyBatis中mapper接口与xml文件之间通过namespace一一对应进行绑定,Ibtis中namespace不是必要的,通过id将方法与xml文件sql语句的执行相关联,Ibatis中dao层方法的return语句写法上也有讲究。
pom配置文件:
<!-- ibatis包 -->
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency
db.properties数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/sim?useUnicode=true&characterEncoding=utf8
username=root
password=uroot
dao层配置
<!-- 加载数据库的配置文件 -->
<util:properties id="dbConfig"
location="classpath:db.properties" />
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="#{dbConfig.driver}"></property>
<property name="url" value="#{dbConfig.url}"></property>
<property name="username" value="#{dbConfig.username}"></property>
<property name="password" value="#{dbConfig.password}"></property>
</bean>
<!-- 配置sqlMapClient对象 -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="configLocation"
value="classpath:SqlMapConfig.xml"></property>
</bean>
<!-- 根据sqlMapClient创建SqlMapClient模板类 -->
<bean id="sqlMapClientTemplate"
class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
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>
<!-- 映射文件 -->
<sqlMap resource="mappers/UserMapper.xml" />
</sqlMapConfig>
BaseDao 重要 不实现会报错
public class BaseDao extends SqlMapClientDaoSupport{
//通过bean名称注入
@Resource(name="sqlMapClient")
private SqlMapClient sqlMapClient;
//完成sqlMapClient初始化工作
@PostConstruct
public void initSqlMapClient(){
super.setSqlMapClient(sqlMapClient);
}
}
UserDao继承BaseDao
@Component //将UserDao类注入到bean里面
public class UserDao extends BaseDao{
//找到所有未删除的用户
//告诉编译器忽略指定的警告,不用在编译完成后出现警告信息。
@SuppressWarnings("unchecked")
public List<User> selectUsers() throws Exception{
return getSqlMapClientTemplate().queryForList("selectUsers");
}
//根据用户名寻找用户
public User getUserByName(String name) throws Exception{
return (User) getSqlMapClientTemplate().queryForObject("findUserByName",name);
}
//根据id删除用户
public boolean deleteUser(int id) throws Exception{
int result = getSqlMapClientTemplate().delete("deleteUser", id);
return result > 0 ? true : false;
}
}
映射文件UserMapper.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 namespace="User">
<typeAlias alias="User" type="cn.ebiz.ibatis.bean.User" /><!--起别名 -->
<!-- 查找所有未删除用户 -->
<select id="selectUsers" resultClass="User">
select
id,
name,
real_name as realName,
email,
address,
create_time as createTime,
is_delete as isDelete
from
querry
where
is_delete=0;
</select>
<!-- 根据用户名找到用户 ## 防止sql注入 -->
<select id="findUserByName" resultClass="User" parameterClass="string">
select
id,
name,
real_name as realName,
email,
address,
create_time as createTime,
is_delete as isDelete
from
querry
where
is_delete=0
and
name=#name#;
</select>
<!-- 根据id删除用户 -->
<update id="deleteUser" parameterClass="int">
update
querry
set
is_delete=1
where
id=#id#
</update>
</sqlMap>
附:项目链接 点击打开链接
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="db.properties"></properties>
<!-- 配置数据源 -->
<transactionManager type="JDBC"> <!--定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</transactionManager>
<!-- 实体映射文件 -->
<sqlMap resource="mapper/User.xml" />
</sqlMapConfig>