Mybatis步步进阶(二)——SQL的基本配置与执行

 Mybatis使用过程中,相对于hibernate更为灵活、简洁之处就在于它利用mybatis封装的标签配置sql语句,在代码中加载配置文件执行sql。咱采取“先做,再总结”方针,方便大家理解。诸位客官请往下看。

 现对一个Message实体类进行操作:

1、创建实体类

/**  
 * @author Max1209  
 * 实体类  
 *  
public class Message {  
    private int id;  
    private String command;  
    private String description;  
    private String content;  
  
    //此处省略getter setter 方法  
}  

2、创建配置文件,通过xml文件对该实体进行查询、删除、批量删除的相关配置:
<?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="Message">  
     <!-- TYPE message类路径 -->  
  <resultMap type="cn.max.domain.Message" id="MsgResult">  
    <id column="Id" jdbcType="INTEGER" property="id"/>  
    <result column="command" jdbcType="VARCHAR" property="command"/>  
    <result column="content" jdbcType="VARCHAR" property="content"/>  
    <result column="description" jdbcType="VARCHAR" property="description"/>  
  </resultMap>  
  
  <select id="queryMsgList" parameterType="cn.max.domain.Message"  
    resultMap="MsgResult">  
    select Id,command,content,description from message where 1=1  
    <if test="command !=null and !"".equals(command.trim())">   
        and command=#{command}  
    </if>  
        <!--等同于 command!=null && !"".equals(command.trim()) -->  
    <if test="description !=null and !"".equals(command.trim())">  
        and description  like '%' #{description} '%'  
    </if>   
</select>  
  
    <delete id="deleteOne" parameterType="int">  
        delete from message where Id='{_parameter}'  
    </delete>  
      
    <delete id="deleteBatch" parameterType="java.util.List">  
        delete from massage where Id in(  
        <foreach collection="list" item="item" separator=",">  
            #{item}  
        </foreach>  
        )  
    </delete>  
</mapper>  

配置文件详解:


3、在配置文件【Configuration.xml】中添加Message实体配置文件【同hibernate原理】

<mappers>  
   <mapper resource="config1/Message.xml"/>  
 </mappers>  
4、程序中读取配置,以传参的方式【namespace.标签id】加载配置文件执行数据操作 

/**通过mybatis创建数据库连接  
     * @param command  
     * @param description  
     * @return List<Message>  
     */  
public class MessageDao {  
      
    DBAccess dbAccess=new DBAccess();  
    SqlSession sqlSession=null;  
      
    public List<Message> queryMsgList(String command,String description)  
    {  
        List<Message> msgList=new ArrayList<Message>();  
        try{  
            Message msg=new Message();  
            msg.setCommand(command);  
            msg.setDescription(description);  
      
            //读取配置,创建sqlSession对象  
            sqlSession=dbAccess.getSqlSesion();   
            //通过sqlsession执行sql语句-----配置文件已包含  
            //namespace.select 标签的id  
            msgList=sqlSession.selectList("Message.queryMsgList",msg);  
              
        }catch(IOException e)  
        {  
            e.printStackTrace();  
        }finally  
        {  
            if(sqlSession!=null)  
            {  
                sqlSession.close();  
            }  
        }  
        return msgList;  
    }  
  
      
    /*  
     * 单条删除  
     */  
    public void deleteOne(int id)  
    {  
        try{  
            //获得数据库和对应实体表  
            sqlSession=dbAccess.getSqlSesion();  
            //执行sql语句   参数  (配置文件namespace.标签id ,传参)  
            sqlSession.delete("Message.deleteOne",id);  
            sqlSession.commit();  
        }catch (Exception e) {  
            e.printStackTrace();  
        }finally  
        {  
            sqlSession.close();  
        }  
          
    }  
      
    public void deleteBatch(List<Integer> ids)  
    {  
        try{  
            //获取sqlsession对象              
            //执行sql语句  
            sqlSession=dbAccess.getSqlSesion();  
              
            sqlSession.delete("Message.deleteBatch", ids);  
            sqlSession.commit();  
        }catch (Exception e) {  
            e.printStackTrace();  
        }finally{  
            sqlSession.close();  
        }  
    }  

所有MyBatis执行增删改查,都不再是通过在程序中嵌入sql,或是类似于hibernate封装一套hql面向对象进行查询,而是整体通过mybatis标签,将对实体进行所有的数据sql都配置到select\delete\insert标签中,并通过方法读取配置文件,加载标签id便可执行查询。这种基于XML映射配置文件配置来实现更利于管理优化。而且程序通过获取sqlSession对象的crud方法,传入配置文件的【命名空间+查询标签ID】参数进行调用,非常方便,十分灵活。

 同时这也要求学习者对OGNL表达式和EL使用熟练,才能使用mybatis标签灵活配置满足复杂需求的sql拼接。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值