IBATIS简介

ibatis是 Apache的开源项目,一个ORM 解决方案,ibatis最大的特点就是小巧,上手很快。
使用 ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM而言是基本一致的。
iBatis是一个基于SQL映射支持Java和·NET的持久层框架,相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,iBatis 是一种“半自动化”的ORM实现。
一、JAR包依赖
ibatis-2.3.4.726.jar
mysql-connector-java-5.0.8-bin.jar
二、SqlMap.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test username=root password=root
三、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>
<!-- 引用JDBC属性的配置文件 -->
<properties resource="com/ligang/SqlMap.properties"/>
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC">
<!-- 数据源 -->
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>
<!-- 这里可以写多个实体的映射文件 -->
<sqlMap resource="com/ligang/Student.xml"/>
</sqlMapConfig>
四、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使得我们在下面使用Student实体类的时候不需要写包名 -->
<typeAlias alias="Student" type="com.ligang.Student"/>
<!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->
<select id="findAll" resultClass="Student">
select * from student
</select>
<!-- parameterClass表示参数的内容 -->
<select id="findByID" parameterClass="String" resultClass="Student">
select * from student where id = #id#
</select>
<insert id="insertStudent" parameterClass="Student">
insert into Student(id,name,age,address) values(#id#,#name#,#age#,#address#)
<!-- 返回自动增长值 -->
<selectKey resultClass="String" keyProperty="id">
select @@identity as inserted
</selectKey>
</insert>
<delete id="deleteStudentByID" parameterClass="String">
delete from student where id = #id#
</delete>
<delete id="deleteStudent" parameterClass="Student">
delete from Student where id = #id#
</delete>
<update id="updateStudent" parameterClass="Student">
update student set name=#name#,age=#age#,address=#address# where id = #id#
</update>
<!-- 模糊查询,使用$代替#。此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入风险-->
<select id="selectByLike" parameterClass="String" resultClass="Student">
select * from student where name like '%$name$%'
</select>
<!-- 多条件组合查询 -->
<!-- 方法一(对象构造查询参数) -->
<!-- 项目中在写ibatis中的sql语句时,where user_id in (#user_id_list# ),运行时总是不行,这里不该用#,而应该用$,区别如下:
1.#是把传入的数据当作字符串,如#user_id_list#传入的是1,2,则sql语句生成是这样,in ('1,2') ,当然不可以
2.$传入的数据直接生成在sql里,如#user_id_list#传入的是1,2,则sql语句生成是这样,in(1,2) 这就对了.
3.#方式能够很大程度防止sql注入.
4.$方式无法方式sql注入.
5.$方式一般用于传入数据库对象.例如传入表名.
6.一般能用#的就别用$.
直观的说
#str# 出来的效果是 'str'
$str$ 出来的效果是 str
另外 ##只能用在特定的几个地方 $$可以用在任何地方 比如 order by $str$
你甚至可以直接写 $str$ 把 order by 这个字串放在str里传进来 -->
<select id="findByCon1" parameterClass="Student" resultClass="Student">
select * from student where name like '%$name$%' and age >= #age#
</select>
<!-- 方法二(map封装查询参数) -->
<parameterMap class="java.util.HashMap" id="paramMap">
<parameter property="name"/>
<parameter property="age"/>
</parameterMap>
<select id="findByCon2" parameterMap="paramMap" resultClass="Student">
select * from student where name like ? and age >= ?
</select>
</sqlMap>
五、JAVA代码
实体类:略
Dao:略
DaoImpl:
package com.ligang;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class StudentDaoImpl implements StudentDao {
public static SqlMapClient sqlMapClient = null;
static{
try {
Reader reader = Resources.getResourceAsReader("com/ligang/SqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public List<Student> findAll() {
List<Student> list = null;
try {
list = sqlMapClient.queryForList("findAll");
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public Student findByID(String id){
Student student = null;
try {
student = (Student) sqlMapClient.queryForObject("findByID", id);
} catch (SQLException e) {
e.printStackTrace();
}
return student;
}
public void addStudent(Student student){
try {
sqlMapClient.insert("insertStudent",student);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deleteStudentByID(String id){
try {
sqlMapClient.delete("deleteStudentByID",id);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deleteStudent(Student student){
try {
sqlMapClient.delete("deleteStudent",student);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateStudent(Student student){
try {
sqlMapClient.update("updateStudent", student);
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<Student> findByCon(String name){
List<Student> stuList = new ArrayList<Student>();
try {
stuList = sqlMapClient.queryForList("selectByLike",name);
} catch (SQLException e) {
e.printStackTrace();
}
return stuList;
}
public List<Student> findByCon(Student student){
List<Student> stuList = new ArrayList<Student>();
try {
stuList = sqlMapClient.queryForList("findByCon1",student);
} catch (SQLException e) {
e.printStackTrace();
}
return stuList;
}
public List<Student> findByCon(Map map){
List<Student> stuList = new ArrayList<Student>();
try {
stuList = sqlMapClient.queryForList("findByCon2",map);
} catch (SQLException e) {
e.printStackTrace();
}
return stuList;
}
}
总结
通过学习我们会发现,Hibernate体系中的内容真的很多,而ibatis更容易上手,小巧灵活。本文有关ibatis搭建Java项目的介绍就到这里,希望对大家有所帮助。
# ibatis
# ibatis搭建Java项目
# struts2+spring+ibatis框架整合实现增删改查
# 在Spring使用iBatis及配置讲解
# ibatis结合oracle批量插入三种方法的测评
# java~springboot~ibatis数组in查询的实现方法
# ibatis迁移到mybatis3的注意事项
# 通过ibatis解决sql注入问题
# Mybatis报错: org.apache.ibatis.exceptions.Persistenc
# Mybatis与Ibatis的区别
# Ibatis配置xml文件CDATA使用方法详解
# 的是
# 是这样
# 该用
# 是一个
# 几个
# 这一
# 是一种
# 会有
# 放在
# 多个
# 的说
# 不可以
# 这就
# 掉了
# 可以直接
# 实体类
# 不需
# 更容易
# 就到
# 用在
相关文章:
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
建站之星如何助力网站排名飙升?揭秘高效技巧
c++ stringstream用法详解_c++字符串与数字转换利器
测试制作网站有哪些,测试性取向的权威测试或者网站?
招贴海报怎么做,什么是海报招贴?
,在苏州找工作,上哪个网站比较好?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何通过IIS搭建网站并配置访问权限?
贸易公司网站制作流程,出口贸易网站设计怎么做?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何在自有机房高效搭建专业网站?
建站之星备案是否影响网站上线时间?
香港服务器租用费用高吗?如何避免常见误区?
宝塔面板如何快速创建新站点?
七夕网站制作视频,七夕大促活动怎么报名?
建站主机是什么?如何选择适合的建站主机?
网站制作员失业,怎样查看自己网站的注册者?
建站之星安装后如何自定义网站颜色与字体?
建站主机选择指南:服务器配置与SEO优化实战技巧
建站之星ASP如何实现CMS高效搭建与安全管理?
济南网站制作的价格,历城一职专官方网站?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
javascript中的try catch异常捕获机制用法分析
如何通过二级域名建站提升品牌影响力?
C++中引用和指针有什么区别?(代码说明)
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站之星2.7模板快速切换与批量管理功能操作指南
高端企业智能建站程序:SEO优化与响应式模板定制开发
建站之星如何实现PC+手机+微信网站五合一建站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何在IIS中新建站点并解决端口绑定冲突?
已有域名如何免费搭建网站?
如何在阿里云域名上完成建站全流程?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何选购建站域名与空间?自助平台全解析
高端建站三要素:定制模板、企业官网与响应式设计优化
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
建站之星后台密码如何安全设置与找回?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何用狗爹虚拟主机快速搭建网站?
图册素材网站设计制作软件,图册的导出方式有几种?
如何用y主机助手快速搭建网站?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何在云指建站中生成FTP站点?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
*请认真填写需求信息,我们会在24小时内与您取得联系。