mybatis接口的使用方式

本文详细介绍了MyBatis的动态代理机制及SQL映射配置,包括Mapper接口的定义、XML配置文件的使用、参数传递方式及SQL占位符的区别。通过具体示例展示了如何实现增删改查等数据库操作。

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


Mybatis的SQL动态代理方式:

使用流程

1.在Mybatis.xml文件中配置Mapper文件扫描

<!-- 配置mapper路径 -->
  <mappers>
  	<!-- mapper配置文件的相对路径 ,便于统一加载解析 -->
  	<mapper resource="com/sxt/dao/IUserDao.xml"/>
  </mappers>

2.定义接口文件和SQL语句配置文件
注意:接口名和SQL语句的配置文件名字必须相同,
        方法名和SQL配置文件的标签 ID 名必须相同
目的:在将Mapper接口翻译成对应的实例化对象时,根据此规则可以找到对应的SQL语句

public interface IUserDao {

   //Mapper接口中,只需要声明方法名,方法参数、方法返回等信息

   public List<User> query();
   
   public Integer add(User user);
   
   public Integer update(User user);
   
   public Integer delete(Integer id);
}
<?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="com.sxt.dao.IUserDao">
	 <!-- 结果多条 -->
	 <select id="query" resultType="com.sxt.pojo.User">
	 	SELECT * FROM mybatis 
	 </select> 	 
	 
	 <!-- 删除 -->
	 <delete id="delete" parameterType="int">
	 	DELETE FROM mybatis WHERE userid=#{0}
	 </delete>
	 
	 <!-- 增加 -->
	 <insert id="add" parameterType="com.sxt.pojo.User">
	 	INSERT INTO mybatis(username,userage) VALUE(#{username},#{userage})
	 </insert>
	 
	 <!-- 修改 -->
	 <update id="update" parameterType="User">
	 	UPDATE mybatis SET username=#{username},userage=#{userage} WHERE userid=#{userid}
	 </update>
	 
	</mapper>

3.获取SqlSession对象,来获取Mapper对象的实例化对象

public class UserTest {

	private SqlSession session;
	private IUserDao dao;
	
	@Before 		//在所有@Test注解执行之前  执行
	public void before() throws IOException{
		InputStream in = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		session = factory.openSession();
		//getMapper():动态代理   传过去一个接口,返回一个代理对象
		dao = session.getMapper(IUserDao.class);
	}
	
	@After			//在所有@Test注解执行之后  执行
	public void After(){
		session.commit();
		session.close();
	}
	
	//查询
	@Test
	public void test() throws IOException {
		List<User> list = dao.query();
		for(User users:list){
			System.out.println(users);
		}
	}
	
	//增加
	@Test
	public void test2() throws IOException{
		//使用SqlSession对象完成对数据库的操作
		User user = new User();
		user.setUsername("张三");
		user.setUserage(13);
		
		int count = dao.add(user);
		System.out.println("增加的行数"+count);
	}

	//删除
	@Test
	public void test3() throws IOException{
		//使用SqlSession对象完成CRUD
		int count = dao.delete(15);
		System.out.println("删除行数"+count);
	}
	
	//更新
	@Test
	public void test4() throws IOException{
		//使用SqlSession对象完成CRUD操作
		User u = new User();
		u.setUserid(16);
		u.setUsername("李四");
		u.setUserage(88);
		int count = dao.update(u);
		System.out.println("修改的行数"+count);
	}
}

注意:使用mapper接口方式必须满足:
1.映射文件的namespace的值必须是接口的全路径名称
     比如:com.sxt.dao.UserMapper
2.接口中的方法名在映射文件中必须有一个和id值对应
3.映射文件的名称必须与接口的名称一致

Mapper接口方法的参数类型以及SQL语句占用

  1. 无参
  2. 单参数
       基本类型:在SQL语句中使用#{0}
       对象类型:在SQL语句中用#{属性名|键名}
  3. 多参数
       基本类型:在SQL语句中用#{角标}
       基本类型和对象类型混用:在SQL语句中用#{param1}

使用Mybatis的参数注解

  1. 在Mapper接口中,方法的形参声明中使用注解 @Param(“键名”) ,给形参添加别名
  2. 在Mapper配置文件中的SQL语句中使用#{注解键名}进行占位

面试题:
   问:Mybatis中SQL占位中的  #{ }  和  $ { }  有什么区别?
   答:
     #{ } 占位的底层用的时PreparedStatement对象进行数据库操作,#{ }占位会翻译成 ? 占位
     ${ } 占位的底层用的时Statementdx进行数据库操作,会将数据直接拼接在SQL语句中,有SQL注入风险

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值