通过接口直接映射sql语句(注解)---里面含有一个重要的知识点--(selectKey)

这里使用的是注解  就不要带有sql语句的xml文件


1、定义一个接口  在接口上的方法直接使用注解  写sql语句

package cn.easytop.lesson02.annotion;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;

import cn.easytop.lesson02.Food;

public interface FoodMapper {
	/*
	 * 根据菜名查询
	 * 
	 * 
	 * 指定参数名
	 * @Select("select * from food where foodName=#{foodName}")
	 * public List<Map> queryFood1(@Param("foodName") String foodName); //使用了@Param注解了 就可以在#{使用param(里的参数)}
	 */
	
	//查询返回的是一个list集合
	@Select("select * from food where foodName=#{0}")
	public List<Map> queryFood1(String foodName);  //没有使用@Param注解就用下标填充  #{0}#{1}
	//使用#{键}方式 实际上是使用占位符 ?来替代
        //使用${键}方式 实际上是使用值直接替换对应的键 注意:如果是字符串 手工添加''
	
	//查询返回的是一个对象
	@Select("select * from food where foodName like '%${foodName}%'")
	public List<Food> queryFood(@Param("foodName") String foodName);
	
	/*
	 * 根据菜名id删除
	 * 
	 */
	@Delete("delete from food where foodid=#{0}")
	public void deleteFood1(String foodId);
	
	
         /*  
         * selectkey 
         *    before=true:会首先执行主键(设置keyProperty需要执行statement)在insert执行之前执行
         *    keyProperty:主键列
         *    resultType:statement执行返回的类型
         *    statement:oracle没有自动增长需要新建一个序列  执行序列
         * 新增
         * 对象新增
         */
	@SelectKey(before=true,keyProperty="foodId",resultType=int.class,statement="select food_sec.nextval from dual")
	@Insert("insert into food values(#{foodId},#{foodName},#{price})")
	public void saveFood(Food food);
}

2、mybatis-config.xml内容:  mybatis的核心配置文件

这里有个注意点  <mapper class="cn.easytop.lesson02.annotion.FoodMapper"/>

使用  .  隔开

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- mybatis的核心配置文件
		1.数据库的连接的信息(连接池)
	 -->
	<properties resource="oracle.properties"></properties>
  <environments default="development">
    <environment id="development">
    <!-- 事务管理器  默认使用jdbc事务 -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driverClass}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username1}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  	<!-- 不需要映射的xml文件   需要关联接口   
  			注意这里不是资源文件    是一个接口  写法需要不再使用 /  需要用. 
  				cn.easytop.lesson02.annotion.FoodMapper  
  	-->
  	<mapper class="cn.easytop.lesson02.annotion.FoodMapper"/>
  </mappers>
</configuration>

3、测试类

package cn.easytop.lesson02.annotion;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import cn.easytop.lesson02.Food;

public class Test {
	public static SqlSession getSession() throws IOException{
		String resource = "cn/easytop/lesson02/annotion/mybatis.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//工厂类
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession openSession = sqlSessionFactory.openSession();
		//session操作的是 指向sql语句的一个唯一表示符
		return openSession;
	}
	
	//查询
	@org.junit.Test
	public void testAnnoInterface() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		FoodMapper fm=session.getMapper(FoodMapper.class);
		List queryFood = fm.queryFood1("辣椒炒肉");
		session.commit();
		System.out.println(queryFood);
	}
	
	//删除
	@org.junit.Test
	public void deleteAnnoInterface() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		FoodMapper fm=session.getMapper(FoodMapper.class);
		fm.deleteFood1("3");
		session.commit();
	}
	
	
	//模糊查询
	@org.junit.Test
	public void deleteAnnoInterface1() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		FoodMapper fm=session.getMapper(FoodMapper.class);
		List<Food> queryFood = fm.queryFood("辣椒炒肉");
		System.out.println(queryFood);
	}
	
	
	//selectKey
	@org.junit.Test
	public void saveAnnoInterface() throws IOException{
		SqlSession session=getSession();
		//获取FoodMapper的实现类
		FoodMapper fm=session.getMapper(FoodMapper.class);
		Food food=new Food();
		food.setFoodName("油豆腐炒白豆腐");
		food.setPrice("12");
		fm.saveFood(food);
		session.commit();
		System.out.println(food.getFoodId());
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值