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

本文介绍Mybatis如何通过XML配置文件执行SQL语句,包括实体类操作、配置文件创建以及通过sqlSession对象的crud方法执行增删改查操作。强调了这种方式的灵活性和便利性,同时也指出对OGNL和EL表达式的熟练掌握对于灵活配置SQL的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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拼接。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值