MyBatis(动态SQL)

本文详细介绍了MyBatis中的动态SQL,包括parameterType属性的使用,#{ }和${ }的区别,以及动态SQL的各种应用场景,如foreach用于批量操作,if、choose(when, otherwise)、where和set元素在条件判断和更新语句中的应用,强调了#{}在防止SQL注入和提高效率上的优势。" 116425297,10132219,实体命名识别嵌套实体实验对比:GlobalPointer vs TPLinker vs Tencent Muti-head vs Deep Biaffine,"['自然语言处理', '实体命名识别', '深度学习', 'pytorch']
摘要由CSDN通过智能技术生成

1.Sql映射文件中的parameterType属性传入参数

     [ insert / update / delete / select元素的输入参数]

      parameterType属性传入参数

  1. String+基本类型  【String---java.lang.String,int/boolean,java.lang.Integer】
  2. POJO类型【对象型】  com.wangxing.bean.Student
  3. 集合类型【list,hashMap

            当数据访问接口的方法只有一个参数的时候【String+基本类型/POJO类型】,当有多个参数的时候通常都是使用【集合类型】

package com.wangxing.mybatis.mapper;

import com.wangxing.mybatis.bean.Person;

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

public interface PersonMapper {
    void insertPerson(Person person);
    void deletePerson(int perid);
    void deletePersonByName(String pername);
    void deletePersonByAge(int perage);
    List<Person> selectPerson(Map<String,Object> parameter);
}

           Sql映射文件

<?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.wangxing.mybatis.mapper.PersonMapper">
    <!--测试parameterType属性为POJO类型-->
  <insert id="insertPerson" parameterType="com.wangxing.mybatis.bean.Person">
      insert into t_person values(null,#{pername},#{perage},#{peraddress});
  </insert>
    <!--测试parameterType属性为基本类型-->
  <delete id="deletePerson"  parameterType="int">
      delete from  t_person where per_id = #{perid};
  </delete>
    <!--测试parameterType属性为String类型-->
  <delete id="deletePersonByName" parameterType="java.lang.String">
       delete from  t_person where per_name = #{pername};
  </delete>
    <!--测试parameterType属性为基本类型的封装类类型-->
  <delete id="deletePersonByAge" parameterType="java.lang.Integer">
       delete from  t_person where per_age = #{perage};
  </delete>
    <resultMap id="personMap" type="com.wangxing.mybatis.bean.Person">
        <id column="per_id" property="perid"></id>
        <result column="per_name" property="pername"></result>
        <result column="per_age" property="perage"></result>
        <result column="per_address" property="peraddress"></result>
    </resultMap>
    <!--测试parameterType属性为集合类型-->
    <select id="selectPerson" parameterType="hashMap" resultMap="personMap">
        select * from t_person where per_id=#{id} or per_name=#{name} or per_age=#{age};
    </select>
</mapper>

         测试类

package com.wangxing.mybatis.test;

import com.wangxing.mybatis.bean.Person;
import com.wangxing.mybatis.mapper.PersonMapper;
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 java.util.HashMap;
import java.util.List;

public class TestMain {
    /**
     * 得到SqlSession
     * @return
     */
    public static SqlSession  getSqlSession()throws  Exception{
        SqlSession sqlSession=null;
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        return sqlSessionFactory.openSession();
    }

    /**
     * 测试parameterType属性为POJO类型
     */
    public static  void testInsertPerson(){
        SqlSession  sqlSession=null;
        try{
            sqlSession=getSqlSession();
            PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
            Person person=new Person();
            person.setPername("java");
            person.setPerage(20);
            person.setPeraddress("西安");
            personMapper.insertPerson(person);
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }
    }
    /**
     * 测试parameterType属性为集合类型
     */
    public static  void testSelectPerson(){
        SqlSession  sqlSession=null;
        try{
            sqlSession=getSqlSession();
            PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
            HashMap<String,Object> parameter=new HashMap<String,Object>();
            parameter.put("id",3);
            parameter.put("name","wangwu");
            parameter.put("age",20);
            List<Person> personList=personMapper.selectPerson(parameter);
            sqlSession.commit();
            for(Person person:personList){
                System.out.println(person.getPerid()+"\t"+person.getPername());
            }
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }
    }

    /**
     * 测试parameterType属性为String+基本类型
     */
    public static  void testDeletePerson(){
        SqlSession  sqlSession=null;
        try{
            sqlSession=getSqlSession();
            PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
            //personMapper.deletePerson(5);
            //personMapper.deletePersonByName("wangwu");
            personMapper.deletePersonByAge(23);
            sqlSession.commit();
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }
    }
    public static void main(String[] args) {
        //testInsertPerson();
        //testSelectPerson();
        testDeletePerson();
    }
}

       2.#{}${}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值