初识mybatis

          2012年12月13日到杭州xxx公司实习,这是我到公司后学习的第一个框架,由于以前已经有过学习几个框架的基础,学习mybatis应该也不会难倒哪里去,由于有前面的学习经验,对于学习的步骤我一般按照下面的几个步骤来学习,第一:先了解这个框架的一个作用。第二:看一片文档,大概了解框架的一个流程。第三:跟着文档做出第一个例子。第四:跟着文档学习特性。第五:如果有兴趣可以研究一下实现原理。

          mybatis原本是apache的一个开源项目ibatis,迁移到google code后改名mybatis。mybatis是一个基于java的持久层框架,支持普通sql查询,存储过程和映射,使用简单的xml或注解配置来映射,将接口和java的pojo映射为数据库中的记录。mybatis是对jdbc的封装,它隐藏了jdbc的API,把SQL语句放到了配置文件中去,能把不同的输入映射到SQL语句的动态参数上,自动的把SQL语句的执行结果映射为java对象。

       每个application主要通过SqlSessionFactory工厂实例来获取一个SqlSession对数据库操作,SqlSessionFactory通过SqlSessionFactoryBuilder的build方法来创建(需要应该流,即读取xml文件的流),SqlSessionFactoryBuilder的build方法可以从一个xml文件中获取一些预定义的配置信息。一个SqlSessionFactory的获取可以通过这样的方式sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);通过一个读取xml文件流来获取信息。下面是一个简单的mybatis的配置文件和映射文件(应该映射文件里面包含了select,insert,delete,update,resultMap等关键标签)。

<!--配置文件一   主配置文件-->

<configuration>
          <!-- 配置外在化  相信着个不需要太多的说明 -->
<properties resource="jdbc.properties"/>
<typeHandlers>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="相当路径/文件名.xml" />
</mappers>
</configuration>

        这里我将配置文件一方到了src目录下(名字和路径可以任意)

<!--配置文件二   映射配置文件-->

<mapper namespace="com.example.ExampleDao">

          <select id="selectEmp" parameterType="int" resultMap="com.model.Emp">
select * from emp where id = #{id}
</select>
</mapper>

        这里是一个简单辅助类的静态方法(在这此之前我们需要导入mybatis依赖的jar包),当然如果有使用了spring框架,则我们可以将其交给spring来管理而无需我们操心SqlSession线程安全和SqlSessionFactory被重复创建的担忧,后面在与spring整合的时候将会再说明,这里只为学习mybatis的特性。

private static SqlSessionFactory sqlSessionFactory;

private static String source="Configuration.xml";
public static  SqlSessionFactory getInstanceSF(){
synchronized (sqlSessionFactory) {
if (sqlSessionFactory == null) {
InputStream inputStream = SqlSessionFactoryUtil.class
.getClassLoader().getResourceAsStream(source);
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
}
}
return sqlSessionFactory;
}

       ok,做完这些之后我们就可以开始来使用mybatis了,看看Mybatis到底带给了我们那些方便呢。

      这里正好用到上面的两个配置文件并配合下面的程序代码和说明来学习使用mybatis吧。

       在此之前我们要准备定义一些类,如下

      Emp类

        private int id;
private String name;
private Date birthday;

    定义一个接口

     public interface ExampleDao {

        //@Select("select * from emp where id = #{id}")
 Emp selectEmp(int id);
     }

     首先用一个插入来说明mybatis的简单使用,正如上面的配置文件二   映射配置文件给出的信息那样,mapper是一个根元素,下面包含了若干子元素,这里先不一一说明,mapper有一个namespace属性(这里我们可以成对应操作实现的接口名),我们可以根据该属性的值加上子标签的id来调用下面的select标签的插入语句,正如你看到的那样有疑问,parameterType表示的是参数的类型,这里是一个实体类的类型(当然也可以是java的其他类型,如int,string等),where后面的参数是固定形式,mybatis将会根据#开头来对其赋值,并且根据paramterType的类型来自动处理,这里我们使用的是自己定义的实体类型,那么mybatis将会根据反射机制来获取你程序中传过来的参数进行相应的处理,这里会将对应的属性值赋值给#开头后的对应字符。(一个映射文件需要在主配置文件中注册,这样mybatis才能找到映射文件)

     做完上面的这些操作,那么让我们来看我们dao实现怎么写吧。

public class Example implements ExampleDao{
private SqlSession session;
@Override
public Emp selectEmp(int id){
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getInstanceSF();
session=sessionFactory.openSession();
/*ExampleDao ed=null;
Emp emp=null;
try{
 ed=session.getMapper(ExampleDao.class);
 emp=ed.selectEmp(id);
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
return emp;*/

          //return (Emp)session.selectOne("com.example.ExampleDao.selectEmp", id);
}
}

      相信到这里你已近看到mybatis的魅力了,我们不必面对jdbc那些繁琐的而没有营养的重复劳动,当然mybatis带给我们的远远不只这些,你可以使用两种注解里面的任意一种来实现你的功能,甚至你可以不用写映射文件二,直接在接口中使用annotation的方式(正如我在上面接口中注释掉的那部分一样,调用方式则只能用ExampleDao中的第一种了),如果在用上spring框架,我们可以想象我们的代码将会有多么的简洁,在dao层我们将只需要一行代码来实现我们的功能。其他的insert,delete,update这里我就不用多说了,赶紧动手见证一下吧。

         

  

     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值