一旦简单了就易于维护,代码量也就少了,效率就提高,成本就降低了,老板就笑了
缺点:参数只能带一个,sql还要自己写
与jdbc相比:
减少61%的代码量,简单,性能增强,sql与代码分离
简化了项目分工,增强移植性
Student.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-2.dtd">
<sqlMap>
<typeAlias alias="Student" type="com.zwz.Student"/>
<select id="selectAllStudent" resultClass="Student">
select *
from student
</select>
<select id="selectStudentById" parameterClass="int" resultClass="Student">
select *
from student
where sid=#sid#
</select>
<insert id="insertStudent" parameterClass="Student">
insert into Student(sid,sname,major,birth,score)
values(#sid#,#sname#,#major#,#score#)
</insert>
<delete id="deleteStudentById" parameterClass="int">
delete
from Student
where sid=#sid#
</delete>
<update id="updateStudentById" parameterClass="Student">
update Student
set
major=#major#,
sname=#sname#,
birth=#birth#,
score=#score#
where
sid=#sid#
</update>
<select id="selectStudentByName" parameterClass="String" resultClass="Student">
select sid,sname,major,birth,score
from Student
where sname like '%$sname$%'
</select>
<insert id="insertStudentBySequence" parameterClass="Student">
<selectKey resultClass="int" keyProperty="sid">
select studentPKSequence.nextVal
from dual
</selectKey>
insert into Student(sid,sname,birth,major,score)
values(#sid#,#sname#,#birth#,#major#,#score#)
</insert>
<insert id="addWebSite" parameterClass="WebSite">
insert into website(site_name, url,emplid) values (#siteName#,#url#,#emplId#)
<selectKey resultClass="java.lang.Integer" keyProperty="id">
SELECT
@@IDENTITY AS ID
</selectKey>
</insert>
<parameterMap class="pro" id="java.util.Map">
<parameter property="name" jdbcType="VARCHAR"
javaType="string" mode="IN"/>
</parameterMap>
<procedure id="pro_insert" parameterMap="pro">
{call new_proc(?)}
</procedure>
</sqlMap>
<isNotNull property="queryString" prepend=" AND ">
(e.NAME LIKE '%$queryString$%'
OR e.CHINESE_NICKNAME LIKE '%$queryString$%'
OR e.EMPLID LIKE '%$queryString$%'
OR e.TAOBAO_WANGWANG LIKE '%$queryString$%'
OR e.EMAIL LIKE '%$queryString$%'
OR e.ALI_WANGWANG LIKE '%$queryString$%')
</isNotNull>
ORDER BY ur.id DESC
<isNull property="queryString">
LIMIT #pageSize# offset #startRow#
</isNull>
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>
<!-- Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:."/>
<property name="JDBC.Username" value="sa"/>
<property name="JDBC.Password" value="sa"/>
</dataSource>
</transactionManager>
<!-- List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data...) -->
<sqlMap resource="com/mydomain/data/Account.xml"/>
<!-- List more here...
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->
</sqlMapConfig>
<insert id="INSERT-SPM-PAGE-ACLS" parameterClass="java.util.List">
<![CDATA[
insert into T_SPM_SITE_PAGE_ACL(PAGE_ID, USER_ID, USER) values
]]>
<iterate conjunction=",">
<![CDATA[
(#list[].pageId#, #list[].userId#, #list[].userName#)
]]>
</iterate>
</insert>
e.EMPLID in
<iterate property="employeeIdList" open="(" close=")" conjunction=",">
#employeeIdList[]#
</iterate>
注意 报错就这么加cdata
<select id="getStarName" resultClass="java.util.Map" parameterClass="java.util.List">
<![CDATA[
SELECT classify_level_id,star_name from bdc_spm_dim_star
where classify_level_id in
]]>
<iterate open="(" close=")" conjunction=",">
<![CDATA[
#list[].levelId#
]]>
</iterate>
</select>
<select id="get_emplId_by_email_account" parameterClass="list" resultClass="java.util.HashMap">
<![CDATA[
select emplid,email from t_employee
where email in
]]>
<iterate open="(" close=")" conjunction=",">
<![CDATA[
#[]#
]]>
</iterate>
</select>
sqlMapClient.queryForMap("person.get_emplId_by_email_account", accounts,
"emplid");
StudentDaoImpl.java
package com.zwz;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class StudentDaoImpl implements IStudentDao {
public static SqlMapClient sqlMapClient = null;
static {
try {
Reader reader = Resources.getResourceAsReader("com/zwz/SqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addStudent(Student student) {
try {
sqlMapClient.insert("insertStudent", student);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void addStudentBySequence(Student student) {
// TODO Auto-generated method stub
}
public void deleteStudentById(int id) {
try {
sqlMapClient.delete("deleteStudentById",id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<Student> queryAllStudent() {
List<Student> s = null;
try {
s = sqlMapClient.queryForList("selectAllStudent");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public Student queryStudentById(int id) {
Student student = null;
try {
student = (Student) sqlMapClient.queryForObject("selectStudentById",id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return student;
}
public List<Student> queryStudentByName(String name) {
List<Student> studentList = null;
try {
studentList = sqlMapClient.queryForList("selectStudentByName", name);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void updateStudentById(Student student) {
try {
sqlMapClient.update("updateStudentById",student);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void goPro(){
Map m = new HashMap(1);
m.put("name",new String("LISI"));
sqlMap.update("pro_insert",m);
}
public void batchSql(){
Account c1 = new Account();
c1.setUsername("zhangsan");
c1.setPassword("123");
c1.setGroupname("CN");
Account c2 = new Account();
c2.setUsername("lisi");
c2.setPassword("nanjing");
c2.setGroupname("cn");
sqlMap.startBatch();
sqlMap.insert("insertOneUser3",c1);
sqlMap.insert("insertOneUser3",c2);
sqlMap.executeBatch();
}
public void insertPageAcls(List<SpmPageAcl> pageAcls) throws DAOException {
try {
sqlMapClient.insert("INSERT-SPM-PAGE-ACLS", pageAcls);
} catch (SQLException e) {
throw new DAOException("insertSpmPageError", e);
}
}
public java.util.Map queryForMap(java.lang.String id,
java.lang.Object parameterObject,
java.lang.String keyProp)throws java.sql.SQLException
//该方法有三个参数,第一个是statement,第二个是查询入参,第三个是返回的Map集合的key属性。
public Map<String, User> getUserMap2() throws SQLException
{
return sqlMapClient.queryForMap("User.queryForMap2", null, "userID");
}
//Dao里面有这样两个方法,第一个作用就是查询出所有的User对象,以User对象的userID为key存放到Map集合中返回。
}
分享到:
相关推荐
### ibatis 与 hibernate 之间的比较:优点和缺点 #### 概述 在 Java 开发领域中,对象关系映射(Object Relational Mapping,简称 ORM)是一种将面向对象编程语言中的对象模型与数据库系统中的关系模型相互转换的...
### ibatis与Hibernate对比之优缺点分析 #### 一、简介 在Java开发领域中,持久层框架(ORM框架)的选择对于项目的成功至关重要。其中,ibatis(现更名为MyBatis)与Hibernate作为两种广为人知且应用广泛的持久层...
8. **iBATIS的优缺点**: - 优点:SQL语句易于维护,降低了数据库操作的复杂性,支持动态SQL。 - 缺点:相比ORM框架如Hibernate,iBATIS对数据库的抽象程度较低,需要手动处理一些SQL细节。 9. **iBATIS-SqlMaps-...
最后,还讨论了iBATIS的优缺点,及为什么是这样的一种方式,即所谓的“在完全OR与JDBC之间的一个幽雅的折衷。” <br>就象Developer's Notebook 系列中所有的书一样,你将由直接的且实用的方式获得信息,这些信息...
### 四、动态 SQL 的优缺点 **优点:** - **灵活性高**:可以方便地根据不同的业务需求构建不同的 SQL 语句。 - **可维护性好**:将 SQL 语句和 Java 代码分离,便于维护。 **缺点:** - **易出错**:手动拼接 ...
**优缺点分析:** - **优点:** 实现简单,无需额外封装。 - **缺点:** - 违背了ibatis的设计理念,即业务逻辑与数据访问层分离。 - 容易受到SQL注入攻击,安全性较差。 ##### 2. 使用Map容器 **实现方式:** ...
六、Ibatis的优缺点 优点: - SQL语句可独立于代码,便于调整和优化。 - 支持复杂的映射和动态SQL,提高了代码的可读性和可维护性。 - 灵活性高,可以很好地适应各种数据库。 缺点: - 需要手动编写SQL,增加了开发...
iBATIS课件 iBATIS简介 搭建环境 配置文件 读取配置 基本的CRUD操作 模糊查询 iBATIS代码生成工具iBATOR 优缺点 选择Hibernate还是iBATIS
五、iBATIS的优缺点 优点: 1. 提高代码可读性:SQL语句独立于Java代码,便于理解和维护。 2. 提升开发效率:通过模板化SQL,减少重复代码。 3. 灵活的映射机制:支持复杂的查询结果映射。 缺点: 1. 对于复杂的...
2. 基于存储过程和基于SQL的分页方法,各自的优缺点。 3. 分析iBATIS源码,理解执行器如何处理分页逻辑。 4. 使用工具或插件辅助iBATIS的分页配置。 5. 如何在实际项目中优化分页性能,比如使用缓存,避免全表扫描等...
- **iBATIS优缺点总结** - **优点**: - 易于上手。 - 可控性好。 - 性能较高。 - **缺点**: - SQL语句分散不易维护。 - 需要编写较多的XML配置文件。 #### 四、SqlMapConfig标签详解 - **引用属性文件**:...
#### 二、iBatis的优缺点 **2.1 优点** - **易于掌握**: 学习成本低。 - **SQL优化能力强**: 提供更高的灵活性和控制力。 - **细粒度优化**: 支持针对具体需求进行精细化处理。 - **可维护性强**: SQL分离存储便于...
6. **XML配置与注解配置**:比较使用XML配置和基于注解的配置方式来实现iBATIS和Spring的集成,分析各自的优缺点。 7. **事务管理**:讲解如何在Spring中配置和管理事务,确保数据库操作的一致性,例如使用`@...
本文将深入探讨这两种框架的主要差异,并分析其各自的优缺点。 #### 二、概念介绍 1. **Hibernate**:当前最流行的ORM框架之一,提供了一种基于元数据的方式来进行对象与关系数据库之间的映射。Hibernate的核心...
3. **Ibatis的特点与优缺点** **优点**: - **简单易用**:Ibatis只需要两个核心jar包,且配置相对简洁。 - **关注点分离**:它使开发者能够专注于对象操作,避免了处理低级数据集的复杂性。 - **可移植性**:...
7. **优缺点**: - 优点:高度可定制,性能优异,支持动态SQL,减少数据库依赖。 - 缺点:相比于ORM框架,学习曲线较陡峭,手动维护映射文件可能增加工作量。 总之,iBatis.net提供了一种灵活的方式来管理数据库...
5.5.1 优缺点分析 92 5.5.2 IN、OUT和INOUT参数 93 5.6 小结 95 第6章 使用高级查询技术 96 6.1 在iBATIS中使用XML 96 6.1.1 XML参数 96 6.1.2 XML结果 98 6.2 用已映射语句关联对象 101 6.2.1 复杂集合 101 6.2.2 ...
#### 四、iBatis的优缺点 1. **优点**: - 轻量级:iBatis相对简单,易于上手。 - 性能优势:由于iBatis允许开发者手动编写SQL语句,避免了动态SQL的开销,因此在某些场景下性能表现更佳。 - 灵活性高:iBatis...