.MyBatis 接口绑定方案及多参数传递
使用方法:
1.在myBatis.xml中加入package标签,包名必需和mapper.xml文件的包相同
<mappers> <!-- <mapper resource="com/bank/mapper/accountMapper.xml"/> <mapper resource="com/bank/mapper/LogMappery.xml"/> --> <package name="com.bank.mapper"/> </mappers>
2.在com.bank.mapper下创建一个接口
public interface LogMappery { List<Log> selectAll(); }
3.创建一个LogMappery.xml文件,文件名必需和接口名一样,id和方法名一样
<mapper namespace="com.bank.mapper"> <select id="selectAll" resultType="account"> select * from account </select>
</mapper>
4.使用方法
public class TestMyBaits { public static void main(String[] args) throws IOException { InputStream is=Resources.getResourceAsStream("myBatis.xml"); SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); SqlSession session=factory.openSession(); LogMappery logMappery=session.getMapper(LogMappery.class); List<Log> list=logMappery.selectAll(); for (Log l : list) { System.out.println(l); } } }
创建带参数的查询方法:(多参数时不用写parameterType)
接口中:
List<Log> selectPage(int pageStart,int pageSize);
mapper.xml中:
<select id="selectPage" resultType="log"> select * from log limit #{0},#{1} </select>
<!-- #{}中使用0,1,2 或param1,param2 -->
使用注解方式 :
List<Log> selectPage(@Param("pageStart")int pageStart,@Param("pageSize")int pageSize);
myBaits底层将参数转化为map , @Param("内容"),内容为key,传入参数为value;
<select id="selectPage" resultType="log"> select * from log limit #{pageStart},#{pageSize} </select>
动态Sql:
if标签的使用 :
<select id="selectWhereId" resultType="log"> select * from log where 1=1 <if test="id!=null and id!=''"> and id=#{id} </if> </select>
where标签的使用 :自动去除第一个and,where中有内容才会在sql语句用生成where关键字,比起直接 用if少更方便
<select id="selectWhereInOut" resultType="log"> select * from log <where> <if test="accountIn!=null and accountIn!=''"> and accountIn=#{accountIn} </if> <if test="accountOut!=null and accountOut!=''"> and accountOut=#{accountOut} </if> </where>
</select>
choose,when,otherwise的使用:类似于java中的switch 当第一个when成立后不再执行剩下的语句,
当所有when中没有成立的条件时,将采用otherwise.otherwise可以不写
<select id="testChoose" resultType="log"> select * from log <where> <choose> <when test="accountIn!=null and accountIn!=''"> and accountIn=#{accountIn} </when> <when test="accountOut!=null and accountOut!=''"> and accountOut=#{accountOut} </when> <otherwise> accountIn="123456" </otherwise> </choose> </where> </select>
set标签的使用:"id=#{id},"是为了防止set关键字中没有语句出错
<update id="testSet"> update log <set> id=#{id}, <if test="accountIn!=null and accountIn!=''"> accountIn=#{accountIn}, </if> <if test="accountOut!=null and accountOut!=''"> accountOut=#{accountOut}, </if> </set> where id=#{id} </update>
Trim的使用:
1 prefix 在前面添加内容
2 prefixOverrides 去掉前面内容
3 suffix 在后面添加内容
4 suffixOverrieds 去掉后面内容
<update id="testTrim"> update log <trim prefix="set" suffixOverrides=","> <if test="accountIn!=null and accountIn!=''"> accountIn=#{accountIn}, </if> <if test="accountOut!=null and accountOut!=''"> accountOut=#{accountOut} </if> </trim> where id=#{id} </update>
bind的使用:对输入的查询条件进行修改(使用实例:模糊查询等)
<select id="testBind" resultType="log"> select * from log where <bind name="accountIn" value="'%'+accountIn+'%'"/> accountIn=#{accountIn} </select>
<sql> 和<include>:某些SQL 片段如果希望复用,可以使用<sql>定义这个片段
<sql id="mysql"> id,accin,accout,money </sql>
<select id=""> select <include refid="mysql"></include> from log </select>