前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用注解开发

利用注解开发

作者头像
愷龍
发布2023-01-01 10:51:06
1480
发布2023-01-01 10:51:06
举报
文章被收录于专栏:愷龍的Blog愷龍的Blog

目录

在JSP中使用servlet的时候需要先在web.xml中配置相关的servlet类才能正常使用,然后还有一种快捷的方式就是使用@WebServlet的快速开发。在之前的MyBatis中也都是使用的xml文件的配置,然后这个是说说用注解的方式使用Mybatis。

利用注解开发

  • sql 类型主要分成 :
    • @select ()
    • @update ()
    • @Insert ()
    • @delete ()

使用了注解开发后就不再需要mapper.xml的配置文件了。

注解开发步骤

  1. 在我们的接口中添加注解
代码语言:javascript
复制
    /**
     * 查询全部用户
     * @return
     */
    @Select("select * from user")
    public List<User> getAllUser();
  1. 在mybatis的核心配置文件中注入
代码语言:javascript
复制
<!--使用class绑定接口-->
<mappers>
   <mapper class="com.kailong.mapper.UserMapper"></mapper>
</mappers>
  1. 测试
代码语言:javascript
复制
    @Test
    public void testGetAllUser(){
        SqlSession sqlSession = MybatisUtils.getSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getAllUser();
        for (User user:users){
            System.out.println(user);
        }
        sqlSession.close();
    }
  1. 测试结果
image
image
  1. 利用Debug查看本质
image
image
  1. 本质上利用了jvm的动态代理机制
image
image
  1. Mybatis详细的执行流程
image
image

注解增删改

改造MybatisUtils工具类的getSession( ) 方法,重载实现。

代码语言:javascript
复制
//获取SqlSession连接
  public static SqlSession getSession(){
      return getSession(true); //事务自动提交
  }
 
  public static SqlSession getSession(boolean flag){
      return sqlSessionFactory.openSession(flag);
  }

注意:确保实体类和数据库字段对应

查询

  1. 编写接口方法注解
代码语言:javascript
复制
    /**
     * 根据Id查询用户
     * @param id
     * @return
     */
    @Select(" select * from user where id = #{id}")
    User selectUserById(@Param("id")int id);
  1. 测试
代码语言:javascript
复制
@Test
public void testSelectUserById() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = mapper.selectUserById(1);
   System.out.println(user);

   session.close();
}
  1. 测试结果
image
image

新增

  1. 编写接口方法注解
代码语言:javascript
复制
/**
 * 添加用户
 * @param user
 * @return
 */
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);
  1. 测试
代码语言:javascript
复制
@Test
public void testAddUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = new User(5,"愚生浅末","123456");
    int i = mapper.addUser(user);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
}
  1. 测试结果
image
image
image
image

修改

  1. 编写接口方法注解
代码语言:javascript
复制
/**
 * 根据ID修改用户的信息
 * @param user
 * @return
 */
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
  1. 测试
代码语言:javascript
复制
@Test
public void testUpdateUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);

    User user = new User(5, "愷龍test", "kailong");
    mapper.updateUser(user);

    session.close();
}
  1. 测试结果
image
image
image
image

删除

  1. 编写接口方法注解
代码语言:javascript
复制
/**
 * 根据Id删除用户
 * @param id
 * @return
 */
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);
  1. 测试
代码语言:javascript
复制
@Test
public void testDeleteUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    mapper.deleteUser(5);
    session.close();
}
  1. 测试结果
image
image
image
image

注意:增删改一定记得对事务的处理!

关于@Param

@Param注解用于给方法参数起一个名字。以下是总结的使用原则:

  • 在方法只接受一个参数的情况下,可以不使用@Param。
  • 在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
  • 如果参数是 JavaBean , 则不能使用@Param。
  • 不使用@Param注解时,参数只能有一个,并且是Javabean。

#与$的区别

#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】

代码语言:javascript
复制
INSERT INTO user (name) VALUES (#{name});
INSERT INTO user (name) VALUES (?);

${} 的作用是直接进行字符串替换

代码语言:javascript
复制
INSERT INTO user (name) VALUES ('${name}');
INSERT INTO user (name) VALUES ('kailong');

使用注解和配置文件协同开发,才是MyBatis的最佳实践!

公众号本文地址:https://mp.weixin.qq.com/s/YsZgx7VtB18PsJkUgn7Ntg 欢迎关注公众号:愚生浅末。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用注解开发
    • 注解开发步骤
    • 注解增删改
      • 查询
        • 新增
          • 修改
            • 删除
            • 关于@Param
            • #与$的区别
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档