您的位置:首页 > 职场人生

黑马程序员--对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:
<?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}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: