Mybatis总结二

                 MyBatis 传递参数:从 java 代码中把参数传递到 mapper.xml 文件

六、一个简单参数:

                 Dao 接口中方法的参数只有一个简单类型(java 基本类型和 String),

        占位符 #{ 任意字符 },和方法的参数名无关。

6.1、sql映射文件,StudentDao.xml:
<!--namespace:命名空间,唯一值 ,推荐使用:dao 接口的全限定名称 -->
<mapper namespace="com.lifang.dao.StudentDao">
    <!--
   <select>: 表示查询操作, 标签中必须是 select 语句
    1、id: sql语句自定义的名称,唯一值,要求使用dao接口的方法名
    2、resultType: 推荐使用类的全限定名称
 -->
    <select id = "selectStudentById" resultType = "com.lifang.domain.Student">
        select id,name,email,age from student where id = #{studentId}
        <!--由mybatis创建Student对象给属性赋值-->
    </select>
6.2、StudentDao接口:
public interface StudentDao {
    //查询Student表中的所有数据:
    public List<Student> selectStudents();
    public int insertStudent(Student student);
    public  Student selectStudentById(Integer id);
}
6.3、测试代码及结果:
 @org.junit.Test
    public void test03(){
      SqlSession sqlSession = MybatisUtils.getSqlSession();
      StudentDao dao = sqlSession.getMapper(StudentDao.class);
      Student s = dao.selectStudentById(1002);
      System.out.println(s);
    }

七、parameterType介绍

        思考:如何表示Dao接口方法的形参id是整型类型的呢?:

        parameterType: 接口中方法参数的类型, 类型的完全限定名或者是Mybatis定义的别名。这个属性是可选的,因为 MyBatis 可以通过反射机制推断出Dao接口参数的数据类型,所以可以没有,我们一般不写:

 <!--
        parameterType : dao接口中方法参数的数据类型。可以不写
        parameterType它的值是java的数据类型全限定名称或者是mybatis定义的别名
        例如 :   parameterType="java,lang.Integer
                parameterType="int
    -->
    <select id = "selectStudentById" parameterType ="int" resultType = "com.lifang.domain.Student">
        select id,name,email,age from student where id = #{studentId}
    </select>


    <select id = "selectStudentById" resultType = "com.lifang.domain.Student">
        select id,name,email,age from student where id = #{studentId}
    </select>

         别名不是我创建的 是mybatis创建的 在mybatis文档有说明 中文官网 英文手册上也有

        int 或 java.lang.Integer

        hashmap 或 java.util.HashMap

        list 或 java.util.ArrayList ......

        

        <select>,<insert>,<update>,<delete>都可以使用 parameterType 指定类型。

#叫做占位符

Mybatis是封装的JDBC 增强版 内部还是用的jdbc

每遇到一个#号 这里就会变为?占位符

一个#{}就是对应一个问号 一个占位符

       用这个对象执行sql语句没有sql注入的风险 

八、多个参数-使用@Param

        当 Dao 接口方法有多个参数,需要通过名称使用参数:
                在方法形参前面加入@Param(“自定义参数名 ”)
                mapper 文件使用#{自定义参数名}

8.1、sql映射文件,StudentDao.xml: 
  <select id = "selectMulitParam" resultType="com.lifang.domain.Student">
        select id,name,email,age from student where name = #{myname} or age = #{myage}
  </select>
8.2、StudentDao接口:
   public List<Student> selectMulitParam(@Param("myname") String name,
                                         @Param("myage") Integer age);
8.3、测试代码及结果:
    @org.junit.Test
    public void test04(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        List<Student> students = dao.selectMulitParam("李四",23);
        students.forEach(student -> System.out.println(student));

    }

九、多个参数-使用对象

                使用 java 对象传递参数, java 的属性值就是 sql 需要的参数值。 灵活又方便

         语法格式: #{ property属性名,javaType=java 数据类型的全限定名称,jdbcType=Mybatis定义的数据库中类型的名称 }

         javaType, jdbcType 的类型 MyBatis 可以通过反射获取,一般不需要设置。

         常用格式 #{ property } 

9.1、代表数据的实体类:
public class QueryParam {
    private String queryName;
    private Integer queryAge;
9.2、sql映射文件,StudentDao.xml: 
 <select id = "selectMultiObject" resultType="com.lifang.domain.Student">
        select id,name,email,age from student where name = #{queryName} or age =#{queryAge}
 </select>
9.3、StudentDao接口:
 public List<Student> selectMultiObject(QueryParam queryParam);
9.4、测试代码及结果:
   @org.junit.Test
    public void test05(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        QueryParam queryParam = new QueryParam("王五",23);
        List<Student> students = dao.selectMultiObject(queryParam);
        students.forEach(student -> System.out.println(student));
    }
 9.5、总结:

        所以我们传参的时候灵活一点,参数可以是现成的java对象,如Student;或者用自定义的java对象QueryParam:

public List<Student> selectMultiObject(QueryParam queryParam);

public List<Student> selectMultiStudent(Student student);

    <select id = "selectMultiObject" resultType="com.lifang.domain.Student">
        select id,name,email,age from student where name = #{queryName} or age =#{queryAge}
    </select>


    <select id = "selectMultiStudent" resultType = "com.lifang.domain.Student">
        select id,name,email,age from student where  name = #{name} or age = #{age}
    </select>

十、(不推荐)多个参数-按位置传参

        参数位置从 0 开始, 引用参数语法 #{ arg 位置 } , 第一个参数是#{arg0}, 第二个是#{arg1}

注意:mybatis-3.3 版本和之前的版本使用#{0},#{1}方式, 从 mybatis3.4 开始使用#{arg0}方式:

十一、(不推荐)多个参数-使用Map传参

        Map 集合可以存储多个值,使用Map向 mapper 文件一次传入多个参数。Map 集合使用 String的 key, Object 类型的值存储参数。 mapper 文件使用 # { key } 引用参数值:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值