当前位置: 代码迷 >> SQL >> 跟小弟我一起学Mybatis之(七)-sql、Parameters、String Substitution
  详细解决方案

跟小弟我一起学Mybatis之(七)-sql、Parameters、String Substitution

热度:192   发布时间:2016-05-05 11:50:05.0
跟我一起学Mybatis之(七)----sql、Parameters、String Substitution

?

首先,我把调用方法的方式换了一下,先提前说明,防止造成问题,具体如下:

?

	private SqlSession session = null;	private PersonDao dao = null;
	@Before	public void before(){		session = MybatisTool.getSession();		dao = session.getMapper(PersonDao.class);	}		@After	public void after(){		session.close();		dao = null;	}

??这种方式调用比较方便。

?

?

下面继续Mybatis的一些其他的语句:

1. sql---定义一个可重用的sql代码的片段

	<sql id="nameage">name,age</sql>	<sql id="table">person</sql>

?上面用sql定义可重用的代码片段

	<select id="selectPersons" parameterType="int" resultType="hashMap">		select <include refid="nameage" />		from <include refid="table" />		where id=#{id}	</select>

?使用已经定义的代码片段

?进行测试:

	@Test	public void testSelectPersons(){		Map<String, Object> map = dao.selectPersons(2);		System.out.println(map);	}	

输出结果:

{age=12, name=henushang}

??

2.?Parameters ----mybatis中的参数

? 对于简单的参数来说(比如刚才的语句中的id),你可以随意定义变量名;但是,对于复杂的一个对象来说,比如parameterType=Person,在使用的时候变量名就不能随便写了,必须是属性的名字,比如:

	<insert id="insertPerson" parameterType="Person">		insert into person (name,age) values (#{name},#{age}) 	</insert>

?而且,还可以详细定义参数的类型,比如

#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}

?在这个里面还可以使用mode来制定参数的类型,可选项有IN, OUT 或者 INOUT,如果你使用INOUT的话,那么在方法执行完后,参数的值将会改变。

?

3.?String Substitution ---- 直接把传过来的字符串拿来使用,并不替换为其值

?使用#{}的话,将会使用PreparedStatement获取值,但是使用${}的话,将会直接注入这个字符串,并不做任何的修饰。 但是,这样做是不安全的,并不推荐这样来做。这个有可能会导致SQL Injection attack。

?

?

?

?

?

  相关解决方案