mybatis調用存儲過程(帶返回值)

mybatis xml文件設置:

  1. 配置調用存儲過程:select標籤中配置:statement=“CELLABLE”
  2. 標識參數:mode=IN/mode=OUT/mode=INOUT
  3. 參數類型:jdbcType=“mybatis數據庫對應格式”

mybatis註解配置:

  1. @Select(value=“”)
  2. 標識參數:mode=IN/mode=OUT/mode=INOUT
  3. 參數類型:jdbcType=“mybatis數據庫對應格式”
  4. 配置調用存儲過程:@Options(statementType = StatementType.CALLABLE)

帶返回值:

  1. 傳入Map<String,Object>對象,在配置文件設置對應返回參數,自動映射到map中

不帶返回值:

  1. 可以不聲明參數類型,類似select傳參

存儲過程創建1:

CREATE PROCEDURE `NewProc`(IN name VARCHAR(50),IN addr VARCHAR(100),IN contact VARCHAR(20),IN tel VARCHAR(12),IN  account VARCHAR(20),IN pwd VARCHAR(20), IN `character` TINYINT)
BEGIN
DECLARE loginid INT;
INSERT INTO 
t_login (login_account,login_pwd,login_character) VALUES(account,pwd,`character`);
SELECT login_id INTO loginid FROM t_login WHERE login_account = account AND login_pwd = pwd AND login_character = `character`;
INSERT INTO t_company (company_name,company_addr,company_contact,company_tel,company_login_id) VALUES (name,addr,contact,tel,loginid);
END;

存儲過程創建2:

CREATE PROCEDURE `NewProc`(IN `companyid` INT,OUT result INT)
BEGIN
	DECLARE loginid INT;
	SELECT company_login_id INTO loginid FROM t_company WHERE company_id = companyid AND flag=0;
	UPDATE t_login SET flag = 1 WHERE login_id = `loginid` AND flag=0;
	UPDATE t_company SET flag = 1 WHERE company_id = companyid AND flag=0;
SET result = 1;
END;

註解配置SQL語句(map中存儲輸入參數):

	@Select(value = "call add_company(" + "#{name,mode=IN,jdbcType=VARCHAR},"
			+ "#{addr,mode=IN,jdbcType=VARCHAR}," +
			"#{contact,mode=IN,jdbcType=VARCHAR}," +
			"#{tel,mode=IN,jdbcType=VARCHAR}," +
			"#{account,mode=IN,jdbcType=VARCHAR}," +
			"#{pwd,mode=IN,jdbcType=VARCHAR}," +
			"#{character,mode=IN,jdbcType=TINYINT}," +
			"#{reuslt,mode=OUT,jdbcType=TINYINT})")

	@Options(statementType = StatementType.CALLABLE)
	public Boolean insertCompanyBean(Map<String, Object> maop);

註解配置SQL語句(map中存入bean,bean中輸入作爲輸入參數)

	@Select(value = "call add_company("
			+ "#{bean.name,mode=IN,jdbcType=VARCHAR},"
			+ "#{bean.addr,mode=IN,jdbcType=VARCHAR},"
			+ "#{bean.contact,mode=IN,jdbcType=VARCHAR},"
			+ "#{bean.tel,mode=IN,jdbcType=VARCHAR},"
			+ "#{bean.account,mode=IN,jdbcType=VARCHAR},"
			+ "#{bean.pwd,mode=IN,jdbcType=VARCHAR},"
			+ "#{bean.character,mode=IN,jdbcType=TINYINT},"
			+ "#{result,mode=OUT,jdbcType=TINYINT})")

	@Options(statementType = StatementType.CALLABLE)
	public Boolean insertCompanyBean(Map<String, Object> map);

xml Mapper配置SQL2語句:

	<select id="deleteCompanyBean" parameterType="java.util.Map" statementType="CALLABLE">
	{
	call
	delete_company(
	#{bean.id,mode=IN,jdbcType=BIGINT},#{result,mode=OUT,jdbcType=TINYINT})
	}
	</select>

測試類:

public class CompanyTest {
	/**
	 * 測試註解配置存儲過程,map放輸入參數
	 * @throws IOException
	 */
	@Test
	public void insertCompany() throws IOException {
		ApplicationContext context = new ClassPathXmlApplicationContext("config/applicationContext.xml");
		ICompanyDao dao = context.getBean(ICompanyDao.class);
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "name");
		map.put("addr", "addr");
		map.put("contact", "contact");
		map.put("tel", "tel");
		map.put("account", "account");
		map.put("pwd", "pwd");
		map.put("character", 1);
		System.out.println(dao.insertCompanyBean(map));
		System.out.println(map.get("reuslt"));
	}

	/**
	 * 測試註解存儲過程:map中傳入bean,bean中存放輸入參數
	 * @throws IOException
	 */
	@Test
	public void insertCompany2() throws IOException {
		ApplicationContext context = new ClassPathXmlApplicationContext("config/applicationContext.xml");
		ICompanyDao dao = context.getBean(ICompanyDao.class);
		Map<String, Object> map = new HashMap<String, Object>();
		CompanyBean bean = new CompanyBean();
		bean.setName("name");
		bean.setAddr("addr");
		bean.setTel("tel");
		bean.setContact("contact");
		bean.setPwd("pwd");
		bean.setCharacter(1);
		map.put("bean", bean);
		System.out.println(dao.insertCompanyBean(map));
		System.out.println(map.get("reuslt"));
	}

	/**
	 * 測試xml配置mapper存儲過程:map中傳入bean,bean中存放輸入參數
	 * @throws IOException
	 */
	@Test
	public void insertCompany3() throws IOException {
		ApplicationContext context = new ClassPathXmlApplicationContext("config/applicationContext.xml");
		ICompanyDao dao = context.getBean(ICompanyDao.class);
		Map<String, Object> map = new HashMap<String, Object>();
		CompanyBean bean = new CompanyBean();
		bean.setId(1);
		map.put("bean", bean);
		System.out.println(dao.deleteCompanyBean(map));
		System.out.println(map.get("result"));
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章