MyBatis 新手上路

首先来分析一下JDBC一个SQL操作的主要的步骤:

第一步:连接数据库,获取连接

第二部:使用连接,封装SQL语句,进行操作

第三部:处理查询结果

第四部:关闭连接

 

MyBatis对上面的步骤进行了封装,封装的方式如下:

对待第一个步骤的封装

   使用的封装方式主要是使用一个XML文件进行封装,XML文件的格式如下:

 

<? xml version="1.0" encoding="UTF-8" ?>  
<! DOCTYPE sqlMapConfig 
      PUBLIC "-//iBATIS.com//DTD SQL Map Config 3.0/
      "[url]http://www.ibatis.com/dtd/[/url]sql-map-config-3.dtd" >

<sqlMapConfig>  
     <settings 
      cacheModelsEnabled ="true"   
      enhancementEnabled ="true" 
      lazyLoadingEnabled ="true"      
      errorTracingEnabled ="true"      
      maxRequests ="32"           
      maxSessions ="10"           
      maxTransactions ="5"          
      useStatementNamespaces ="false"    
       />  
      <!-- settings 设置控制是否开启下列的机制:
           缓存,字节码增强,延迟启动,错误处理机制;
           最大并发请求数,最大session数
           最大并发事务数,是否启用命名空间     
   -->
     <transactionManager type ="JDBC">
        <!--
           ibatis定义了数据库事务管理三种类型:JDBC,JTA,EXTERNAL
  --> 
     <dataSource type ="SIMPLE">  
     <!--
  type指定了数据源连接类型,类型有三种:SIMPLE,DBCP,JNDI
  -->
         <property    name ="JDBC.Driver"    value ="com.p6spy.engine.spy.P6SpyDriver" />  
         <property    name ="JDBC.ConnectionURL"    value ="jdbc:mysql://localhost/sample" />  
         <property    name ="JDBC.Username"    value ="user" />  
         <property    name ="JDBC.Password"    value ="mypass" /> 
        <!-- 配置数据库的基本信息,在jdbc情况下连接数据信息  -->  
         <property    name ="Pool.MaximumActiveConnections"    value ="10" />
        <!-- 数据库连接池的最大连接数目 -->  
         <property    name ="Pool.MaximumIdleConnections"    value ="5" /> 
        <!-- 数据库连接池挂起的最大连接数目 -->   
         <property    name ="Pool.MaximumCheckoutTime"    value ="120000" />  
   <!-- 连接一个任务所允许占用的虽大时间 -->
         <property    name ="Pool.TimeToWait"    value ="500" />  
   <!-- 线程允许等待连接的最大时间 -->
         <property    name ="Pool.PingQuery"    value ="select 1 from ACCOUNT" />  
         <property    name ="Pool.PingEnabled"    value ="false" />  
         <property    name ="Pool.PingConnectionsOlderThan"    value ="1" />  
         <property    name ="Pool.PingConnectionsNotUsedFor"    value ="1" />  
       </dataSource >  
     </transactionManager >  

     <sqlMap  resource ="com/ibatis/sample/User.xml" />  
     <!-- sqlMap 保存了SQL操作的语句文件,详细介绍请观察这个文件。 -->
</sqlMapConfig >

 

这个文件就是保存基础数据库连接和事务管理的配置文件了。 

 但是到这里为止,这个仅仅只是一个一些配置信息,怎么去根据这些信息生成在java代码体系中的对象呢?

下面是调用代码部分:

   String resource="mybatis_config.xml";

   Reader reader=Resource.getResourceAsReader(resource);

   SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);

同时还可以使用纯java代码来实现上面的配置和使用功能,代码如下所示:

DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver",   

                       "jdbc:mysql://localhost/mybatis?userUnicode=true&amp;characterEncoding=utf8""admin""123456");   

       Environment environment = new Environment("test"new JdbcTransactionFactory(), dataSource);   

        Configuration configuration = new Configuration(environment);   

        configuration.addMapper(TestDao.class);   

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); 

 

对于第二个步骤的封装操作:

首先是定义一个对一张表操作的接口,该接口中包含有对表操作的所有方法,例如:

public interface PersonMapper 
{
    Person getPersonById(int id);
}

然后让这个接口与表建立一个映射关系,使得java程序与数据库建立直接的联系,映射的关系表如下:

这个映射表的名称与存放位置是根据基本配置表当中sqlMap的resource建立的。映射表的内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
<mapper namespace="{interface name}">
 <select id="{method name}" parameterType="int" resultType="{return value type}">
       select * from person where personId=#{id}
 </select>
 <insert id="{method name}" parameterType="{Object}">
     insert into person (personId,name,age) values (#{personId},#{name},#{age})
 </insert>
</mapper> 

映射表当中保存的是接口与表SQL的关联,namespace表示对应的接口名称,包含package name在内的接口名称。

下面的操作<select>和<insert>表示对表操作的类型,id表示接口中对应的方法名称,parameterType表示这个方法中参数的类型,resultType表示接口中方法的返回值类型。SQL语句当中,引用java程序中的实际参数时,使用#{parameter}的方式进行写入。建立一个合适的POJO对象,对应表格当中的一行数据。

当前的这一个步骤直接封装完成了JDBC操作的第二个第三个步骤

 

第四个步骤的操作

很简单,就是在操作完成之后关闭session就可以了。

 

下面是对mybatis使用是的基本步骤:首先,完成上面的这些操作,

然后获取第一步骤的sqlMapper,建立session对象

SqlSession session=sqlMapper.openSession();

然后获取数据方式有下面的两种形式:

Person person = (Person) session.selectOne(
            "com.xiamen.mapper.PersonMapper.getPersonById", 1);
或者:

PersonMapper mapper = session.getMapper(PersonMapper.class);
            Person person = mapper.getPersonById(1);
然后接下来是数据的转发或者处理,

然后最后关闭session,

session.close();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值