黑马程序员--对ibatis框架的理解和…
2015-12-24 10:27
435 查看
ibatis原理:将sql语句封装成了对象;是对jdbc进行封装。类加载和类对象的实例化有区别;优点:与JDBC相比较:1 减少了61%的代码量;2 简单3 架构性能增强4 sql语句与程序代码分离5 简化项目中的分工6 增强了可移植性使用ibatis的开发步骤:1 导入相关jar包2
准备相应配置文件;总配置文件,SqlMapConfig.xml3 使用Ibatis提供的api进行开发,不用说下载的开发包中肯定有示例,我们可以照着抄就是;ibatis中的配置 <dataSource
type="SIMPLE">数据源类型有几种? 简单数据源,还有什么???在javabean和数据库中表的映射过程中,javabean中定义的id号是用int
还是Integer,有没有什么讲究,或者说用哪个更加优雅???ibatis对于开发者来说,要求对sql语句有一个比较好的掌握,因为我们说ibatis是半自动化的,就是说简化了jdbc的许多操作,或者说对jdbc进行了简单封装简化了开发,但是对于核心的sql语句还是要开发者自己去写,写出高效的sql语句,以及对sql语句进行性能调优;这是hibernate无法比拟的,hibernate灵活性不够;因为我们输ibatis是简单灵巧,易上手;不多说,直接上示例。总配置文件SqlMapConfig.xml:
WokerDao是一个接口。转发至微博
转发至微博阅读(16)|
评论(0)|
用微信 “扫一扫”将文章分享到朋友圈。 用易信 “扫一扫”将文章分享到朋友圈。 喜欢 推荐 0人 |
转载
关闭玩LOFTER,免费冲印20张照片,人人有奖! 我要抢>
b:2,
loftPermalink:'',
id:'fks_087065092082081074093084087071072084080068086081080065084095',
blogTitle:'黑马程序员--对ibatis框架的理解和总结',
blogAbstract:'
ibatis原理:将sql语句封装成了对象;是对jdbc进行封装。\r\n
类加载和类对象的实例化有区别;优点:与JDBC相比较:1 减少了61%的代码量;2 简单3 架构性能增强4 sql语句与程序代码分离5 简化项目中的分工6 增强了可移植性\r\n
使用ibatis的开发步骤:1 导入相关jar包2
准备相应配置文件;总配置文件,SqlMapConfig.xml3 使用Ibatis提供的api进行开发,不用说下载的开发包中肯定有示例,我们可以照着抄就是;\r\n
ibatis中的配置 <dataSource
type="SIMPLE">数据源类型有几种? 简单数据源,还有什么???在javabean和数据库中表的映射过程中,', blogTag:'', blogUrl:'blog/static/21727620920134652018594',
isPublished:1, istop:false, type:0, modifyTime:1400160336356,
publishTime:1367832496064,
permalink:'blog/static/21727620920134652018594', commentCount:0,
mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0,
recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[],
vote:{}, groupInfo:{}, friendstatus:'none',
followstatus:'unFollow', pubSucc:'', visitorProvince:'',
visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000',
mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'JAVA软件工程师,有扎实的Java基础,熟悉JavaEE技术,对框架的底层原理熟悉,学习能力强。',
hmcon:'0', selfRecomBlogCount:'0', lofter_single:'' }{list a as x}
{if !!x}
{if
x.visitorName==visitor.userName}
{else}
{/if}
{if x.moveFrom=='wap'} {elseif
x.moveFrom=='iphone'} {elseif
x.moveFrom=='android'} {elseif
x.moveFrom=='mobile'} {/if}
${fn(x.visitorNickname,8)|escape}{/if} {/list}{if !!a}
${fn(a.nickname,8)|escape}
${a.selfIntro|escape}{if
great260}${suplement}{/if}
{/if}
准备相应配置文件;总配置文件,SqlMapConfig.xml3 使用Ibatis提供的api进行开发,不用说下载的开发包中肯定有示例,我们可以照着抄就是;ibatis中的配置 <dataSource
type="SIMPLE">数据源类型有几种? 简单数据源,还有什么???在javabean和数据库中表的映射过程中,javabean中定义的id号是用int
还是Integer,有没有什么讲究,或者说用哪个更加优雅???ibatis对于开发者来说,要求对sql语句有一个比较好的掌握,因为我们说ibatis是半自动化的,就是说简化了jdbc的许多操作,或者说对jdbc进行了简单封装简化了开发,但是对于核心的sql语句还是要开发者自己去写,写出高效的sql语句,以及对sql语句进行性能调优;这是hibernate无法比拟的,hibernate灵活性不够;因为我们输ibatis是简单灵巧,易上手;不多说,直接上示例。总配置文件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 签 --> <properties resource="cn/itcast/ibatis/sqlMap.properties"/> <!-- 指定使用JDBC的事务管理器 --> <transactionManager type="JDBC"> <!-- 指定数据源类型为简单类型 --> <dataSource type="SIMPLE"> <!-- 从jdbc连接信息所在的文件中取出具体消息,作为各键所对应的值--> <property name="JDBC.Driver" value="${driverClassName}"/> <property name="JDBC.ConnectionURL" value="${url}"/> <property name="JDBC.Username" value="${username}"/> <property name="JDBC.Password" value="${password}"/> </dataSource> </transactionManager> <!-- 指定javabean的 射文件 --> <sqlMap resource="cn/itcast/ibatis/Worker.xml"/> </sqlMapConfig>
sqlMap.properties配置文件:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc username=root password=123456
Worker.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="Worker"> <!-- 定义一个类型别名,省得每次使用都得用完整类名 --> <typeAlias alias="Worker" type="cn.itcast.domain.Worker" /> <!-- 这是为了和数据库中字段的命名规则相匹配的选项,这里先不涉及 <resultMap id="AccountResult" class="Account"> <result property="id" column="ACC_ID"/> <result property="firstName" column="ACC_FIRST_NAME"/> <result property="lastName" column="ACC_LAST_NAME"/> <result property="emailAddress" column="ACC_EMAIL"/> </resultMap> --> <!-- 定义一条select语句,取名为selectAllWorkers,得到的结果类型为Worker --> <select id="selectAllWorkers" resultClass="Worker"> select * from Worker </select> <!-- 定义一条select语句,取名为selectById,得到的结果类型为Worker , 递的参数类型为 int,即id,需要参数时要用#号进行封装; --> <select id="selectById" parameterClass="int" resultClass="Worker"> select * from Worker where id=#id# </select> <select id="selectByName" parameterClass="String" resultClass="Worker"> select * from Worker where name like '%$name$%' </select> <!-- #id#及name等顺序要对,名称也要对, 为这是要利用反射机制调用其set方法的, 此需要Worker满足JavaBean规则 --> <insert id="insertWorker" parameterClass="Worker"> insert into Worker(id,name,age) values(#id#,#name#,#age#) </insert> <!-- #id#这里面的id可以改变, 为只有一个参数;而且顺序对了就可以 --> <delete id="deleteById" parameterClass="int"> delete from Worker where id=#id# </delete> <update id="updateWorker" parameterClass="Worker"> update Worker set name=#name#, age=#age# where id=#id# </update></sqlMap>
Worker对象:
package cn.itcast.domain;public class Worker { private Integer id; private String name; private int age; public Worker() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
WorkerDaoImpl;
package cn.itcast.dao;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;import cn.itcast.domain.Worker;public class WorkerDaoImpl implements WorkerDao { private static SqlMapClient sqlMapper; static { try { // 将配置文件以流的形式返回; Reader reader = Resources .getResourceAsReader("cn/itcast/ibatis/SqlMapConfig.xml"); // sql语句 射器工厂从流中取出所需数据,创建sql语句 射器对象; sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); // 关闭流,这个要不要放在finally语句块中呢?原则上需要,但是考虑到是在静态代 块中, // 实现起来有点困难,要讲流定义成静态的, 此为了避免麻烦,不放在finally语句块中 reader.close(); } catch (IOException e) { // 如果上面初始化都出问题了,下面就没有必要继续下去了, 此抛出一个初始化错误; throw new ExceptionInInitializerError(e); } } @Override public void add(Worker worker) { try {//调用 射文件中的select语句对象; sqlMapper.insert("insertWorker", worker); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public void deleteById(int id) { try {//调用 射文件中的select语句对象; sqlMapper.delete("deleteById", id); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public void update(Worker worker) { try {//调用 射文件中的select语句对象; sqlMapper.update("updateWorker", worker); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public List<Worker> getAllWorker() { List<Worker> workers = null; try {//调用 射文件中的select语句对象; workers = sqlMapper.queryForList("selectAllWorkers"); } catch (SQLException e) { throw new RuntimeException(e); } return workers; } @Override public Worker findById(int id) { Worker worker = null; try {//调用 射文件中的select语句对象; worker = (Worker) sqlMapper.queryForObject("selectById", 1); } catch (SQLException e) { throw new RuntimeException(e); } return worker; } @Override public Worker findByName(String name) { return null; } @Override public List<Worker> findByLikeName(String name) { List<Worker> workers = null; try {//调用 射文件中的select语句对象; workers = sqlMapper.queryForList("selectAllWorkers", name); } catch (SQLException e) { throw new RuntimeException(e); } return workers; }}
WokerDao是一个接口。转发至微博
转发至微博阅读(16)|
评论(0)|
用微信 “扫一扫”将文章分享到朋友圈。 用易信 “扫一扫”将文章分享到朋友圈。 喜欢 推荐 0人 |
转载
历史上的今天
最近读者
热度
在LOFTER的更多文章
关闭玩LOFTER,免费冲印20张照片,人人有奖! 我要抢>评论
this.p={ m:2,b:2,
loftPermalink:'',
id:'fks_087065092082081074093084087071072084080068086081080065084095',
blogTitle:'黑马程序员--对ibatis框架的理解和总结',
blogAbstract:'
ibatis原理:将sql语句封装成了对象;是对jdbc进行封装。\r\n
类加载和类对象的实例化有区别;优点:与JDBC相比较:1 减少了61%的代码量;2 简单3 架构性能增强4 sql语句与程序代码分离5 简化项目中的分工6 增强了可移植性\r\n
使用ibatis的开发步骤:1 导入相关jar包2
准备相应配置文件;总配置文件,SqlMapConfig.xml3 使用Ibatis提供的api进行开发,不用说下载的开发包中肯定有示例,我们可以照着抄就是;\r\n
ibatis中的配置 <dataSource
type="SIMPLE">数据源类型有几种? 简单数据源,还有什么???在javabean和数据库中表的映射过程中,', blogTag:'', blogUrl:'blog/static/21727620920134652018594',
isPublished:1, istop:false, type:0, modifyTime:1400160336356,
publishTime:1367832496064,
permalink:'blog/static/21727620920134652018594', commentCount:0,
mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0,
recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[],
vote:{}, groupInfo:{}, friendstatus:'none',
followstatus:'unFollow', pubSucc:'', visitorProvince:'',
visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000',
mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'JAVA软件工程师,有扎实的Java基础,熟悉JavaEE技术,对框架的底层原理熟悉,学习能力强。',
hmcon:'0', selfRecomBlogCount:'0', lofter_single:'' }{list a as x}
{if !!x}
{if
x.visitorName==visitor.userName}
{else}
{/if}
{if x.moveFrom=='wap'} {elseif
x.moveFrom=='iphone'} {elseif
x.moveFrom=='android'} {elseif
x.moveFrom=='mobile'} {/if}
${fn(x.visitorNickname,8)|escape}{/if} {/list}{if !!a}
${fn(a.nickname,8)|escape}
${a.selfIntro|escape}{if
great260}${suplement}{/if}
{/if}
相关文章推荐
- 黑马程序员---对JPA的理解与回顾总…
- 黑马程序员--银行业务调度系统笔记…
- 黑马程序员---用阻塞队列实现三个…
- 黑马程序员---用可阻塞队列实现两…
- 黑马程序员--交通灯管理系统的心得…
- 黑马程序员--关于注解的理解
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员---关于枚举的理解
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--用户注册管理系统(Sp…
- 黑马程序员--用户注册登录管理系统…
- 黑马程序员--JAVA中23种设计模式(-…
- [JAVA面试算法] 用代码体现“水仙花数”
- StackOverflow程序员推荐:每个程序员都应读的30本书
- 一道面试题引发的对android中context的研究(二)
- 一道面试题引发的对android中context的研究(一)-SharedPreference是否可以将文件保存在SD卡上
- 看顶级高手如何编程--从带程序员新手想到的