MyBatis实际使用

使用动态代理,则在dao持久层接口中不要使用重载(sql.xml中语句的id)

动态代理

用getMapper不用写dao层接口的实现类了
在这里插入图片描述

传参

单个参数

在这里插入图片描述

    //根据id查学生
    Student selectStuFromId(int id);
	<select id="selectStuFromId" resultType="com.neuq.domain.Student">
        select * from student where id=#{stuId}
    </select>

多个参数

使用@Param(String value)取别名

List<Student> selectMultiStu(@Param("myId") int id,@Param("myAge") int age);
	<select id="selectMultiStu" resultType="com.neuq.domain.Student">
        select * from student where id>#{myId} and age>#{myAge}
    </select>

对象参数

直接用对象属性名
要求对象必须有无参构造、get、set方法

	//插入数据
    int insertStudent(Student stu);
	<insert id="insertStudent">
        insert
        into student (name,email,age)
        values (#{name},#{email},#{age})
    </insert>

#(占位符)和 $(拼接符) ★★★★★

#:会把传入的参数当成是一个字符串,自动添加双引号(能够防止sql注入)。mybatis会先对sql语句进行预编译
$:不做任何处理,直接将值拼接在sql语句中(不能避免注入攻击)。sql语句不进行预编译

在这里插入图片描述

resultType

1、返回的类型是查询出的每行数据的对象类型,与是不是以List返回没关系
2、但返回对象类型没有限制
在这里插入图片描述

注:建议使用全限定名称,不要使用别名。
3、可以是类的全限定名称,也可以是别名,如 java.lang.Integer 别名为 int

	<select id="selectCount" resultType="int">
        select count(*) from student
    </select>

在这里插入图片描述

4、< configuration >中定义别名
在这里插入图片描述

5、单行数据Map返回
在这里插入图片描述

resultMap

当数据库中表的列名与对应的Java类的属性名不相同时!!!
注意:当存在resultMap时就不用resultType
在这里插入图片描述
在这里插入图片描述

当然:在sql语句中可以使用别名的方式以达到匹配对象属性名

like模糊查询

@Test
    public void selectStuLike(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        String grep = "_2%";//建议直接在java中形成匹配字符串
        List<Student> students = dao.selectStuLike(grep);
        students.forEach(System.out::println);
    }
	<select id="selectStuLike" resultMap="studentMap">
        select * from student where stu_email like #{email}
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值