本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

使用注解开发

  • 定义:Mybatis提供了一种方法来配置查询语句,就是在查询方法上增加注解。

    • 这个方法对于简单的语句能有效简化代码量,而且不需要配置xml文件。

    • 但是对于复杂的语句就无法实现了

  1. 注解在接口上实现,Mapper.xml就不需要配置了

    public interface UserMapper {
    @Select("select * from user")
    List<User> getUserList();
    }
  2. 主配置文件中配置的不再是Mapper.xml文件,而是Mapper接口

    • 使用Mapper接口的时候,还能启用xml文件,但是xml文件必须在同一个包下而且同名,见配置解析

        <mappers>
    <mapper class="com.rzp.dao.UserMapper"></mapper>
    </mappers>
  3. 测试方法

        @Test
    public void test(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    //底层其实就是通过反射,获取类方法名、返回值、注解
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userList = mapper.getUserList();
    for (User user : userList) {
    System.out.println(user.toString());
    }
    }
    • 在这个例子中,代码变得更加简单,但是如果出现实体类属性名和对应表的参数名不一致的时候就很难实现了。

  4. CRUD示例

  • 如果有需要传的参数,可以使用@Param来增加注解

  • 如果是基本数据类型或者String类型需要加上。

    //注意,取值是取Param中的值
//方法存在多个参数,所有参数前面必须加上@Param注解
@Delete("delete from user where id = #{uid}")
void deleteUser(@Param("uid") int id);
  • UserMapper

package com.rzp.dao;

import com.rzp.pojo.User;
import org.apache.ibatis.annotations.*;

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

public interface UserMapper {
@Select("select * from user")
List<User> getUserList();


//按id 查
//方法存在多个参数,所有参数前面必须加上@Param注解
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);


//插入
@Insert("insert into user(id,name,pwd) values(#{id},#{name},#{pwd})")
void addUser(User user);

//更新
@Update("update user set pwd = #{pwd}, name = #{name} where id = #{id}")
void update(User user); //注意,取值是取Param中的值
//删除
@Delete("delete from user where id = #{uid}")
void deleteUser(@Param("uid") int id);
}
  • 测试类

    //按id查询
@Test
public void test01(){
SqlSession autoSession = MybatisUtils.getAutoSession();
UserMapper mapper = autoSession.getMapper(UserMapper.class);
User user = mapper.getUserById(2);
System.out.println(user);
}

//插入
@Test
public void test02(){
SqlSession autoSession = MybatisUtils.getAutoSession();
UserMapper mapper = autoSession.getMapper(UserMapper.class);
User user = new User(6,"cyy","223");
mapper.addUser(user);

}

//更新
@Test
public void test03(){
SqlSession autoSession = MybatisUtils.getAutoSession();
UserMapper mapper = autoSession.getMapper(UserMapper.class);
User user = new User(6,"c121","222223");
mapper.update(user);

}

//删除
@Test
public void test04(){
SqlSession autoSession = MybatisUtils.getAutoSession();
UserMapper mapper = autoSession.getMapper(UserMapper.class);
mapper.deleteUser(4);

}
 

a

MyBatis(七):使用注解替代xml文件的更多相关文章

  1. mybatis使用注解替代xml配置,动态生成Sql

    mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectPr ...

  2. mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析

    序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟d ...

  3. mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?

    mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟dao 建立关系:然后 xml 中的每段 sql 会有一个id 跟 dao 中的接口进行关联. 那么 ...

  4. 【转】Mybatis 3.1中 Mapper XML 文件 的学习详解

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  5. Mybatis 3.1中 Mapper XML 文件 的学习详解(转载)

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  6. hibernate用注解替代映射文件

    1.首先把原来的映射文件删掉,给实体类添加注解: @Entity //声明当前类为hibernate映射到数据库中的实体类 @Table(name="news") //声明tabl ...

  7. 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结

    经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置 ...

  8. Mybatis Dao层注解及XML组合Dao的开发方式

    mybatis可以用xml进行数据操作,也可以在dao层用注解的方式,也可以采取xml和dao层接口组合使用的方法.显然 ,后者更加简单. 实体类Student   package com.zhao. ...

  9. Mybatis无法扫描到mapper.xml文件

    在Mybatis中默认扫描与mapper包同路径下的xml,resource文件的文件夹名称不能一次性创建,如com.baidu.mapper需要创建3次 这里如果是idea开发工具,一次创建与分开创 ...

随机推荐

  1. Android 版的多合一Office应用也正式向iOS开放了

    导读 在 Android 版的多合一 Office 应用「偷跑」不久后(官方证实上线时间比计划要早),为 iOS 准备的版本现在终于也结束 beta 测试正式上线了. 和只提供「有限」平板支持的 An ...

  2. 数据结构 - Collection接口

    简介 Collection继承自Iterable,Collection接口是Java集合两大分支中的一支,Queue.List.Set都是Collection的扩展:集合大类分为了Collection ...

  3. 深入理解JS引擎的执行机制

    深入理解JS引擎的执行机制 1.灵魂三问 : JS为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4 ...

  4. Java POI 实现Excel相同数据同一颜色,不同数据颜色交替显示

    目录 1.效果图 2.具体代码实现 excel 读取工具类 excel写入和测试类 1.效果图 2.具体代码实现 excel 读取工具类 package utils; import java.io.F ...

  5. CSRF和XSS区别和预防

    名词解释 CSRF(Cross-site request forgery)跨站请求伪造 XSS (Cross-site scripting)跨站脚本攻击,这里缩写css被前端层叠样式表(Cascadi ...

  6. 设计模式—建造者模式(Builder)

    title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...

  7. MySQL学习(4)

    一 视图 预先定义一种对应关系,如:temp_table <-----> select * from class where student_id >10,那么这种对应关系叫做视图. ...

  8. 题解 P6249 【神帖】

    这道题目我一看到就想起了经典题--关路灯 但是时间好像不太好搞啊! 我们可以枚举时间qwq 考虑 \(4\) 维 \(dp\) \(f_{i,j,t,0/1}\) 表示 \(zrl\) 看了第 \(i ...

  9. [dfs] 2019牛客暑期多校训练营(第十场) Coffee Chicken

    题目地址: https://ac.nowcoder.com/acm/contest/890/B   时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576 ...

  10. intern()方法的使用

    intern() intern方法的作用是:如果字符串常量池中已经包含一个字符串等于此String对象的字符串,则返回常量池中的这个String对应的对象, 否则将其添加到常量池并返回常量池中的引用. ...