Mybatis(九)注解操作CURD

之前的介绍中,我们大致了解了如何利用xml文档进行数据库的增删查插,这样虽然足够方便,但是利用注解可以进一步的简化操作。(在mybatis中,xml是主流,注解只可以解决简单的操作)

回顾之前利用xml文档进行数据库信息查询:

ex:查询所有的信息:

  1. UserMapper层设置接口:
//查询数据库全部信息,以一个list接收
    List<User> getUserList();

  1. UserMapper.xml配置查询语句:
<!--这里的resultType是我自己设置的别名,怎么设置看前面的文章介绍-->
<select id="getUserList" resultType="DIYname">
        select * from mybatis.user
    </select>
  1. 测试:
 @Test
    //查询全部用户
    public void SelectUsers() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.SelectUser();
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }

在这里插入图片描述

利用注解进行信息查询:

  1. 在mybatis-config.xml文件中捆绑接口
 <mappers>
        <mapper class="com.kuang.dao.UserMapper"/>
    </mappers>
  1. 利用注解就不需要xml文档了,这里删去之前创建的Usermapper.xml
  2. 创建接口
//查询全部信息
    @Select("select * from mybatis.user")
    List<User> SelectUser();

备注:之前xml文件在接口创建一个函数,然后在xml文档里面配置sql语句,这里的话直接添加 注释@select() 就可以,一步到位。

  1. 测试
 @Test
    //查询全部用户
    public void SelectUsers() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.SelectUser();
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }

在这里插入图片描述

注释操作解决其他简单的sql命令:

UserMapper.java 层

 //1. 根据id查询
    //使用@param,可以解决接口中的参数只可以有一个的困扰,可以传入多个参数
    @Select("select * from mybatis.user where id = #{id} and name = #{name}")
    User getUserById(@Param("id") int id,@Param("name")String name);

    //2. 根据name和psw查询
    @Select("select * from mybatis.user where psw = #{psw} and name = #{name}")
    List<User> getUserById2(@Param("psw") String psw,@Param("name")String name);

    //插入信息
    @Insert("insert into mybatis.user (id,name,psw) values (#{id},#{name},#{psw})")
    int InsertUser(Map<String,Object> map);

    //1.修改信息
    @Update("update mybatis.user set psw = #{psw} where id = #{id}")
    int UpdateUser(Map<String,Object> map);

    //2.修改信息
    @Update("update mybatis.user set psw = #{psw} where id = #{id} and name =#{name}")
    int UpdateUser2(User user);

    //删除
    @Delete("delete from mybatis.user where id = #{id}")
    int DeleteUser(@Param("id") int id);
}

测试:


    //根据 psw和name 查询用户。
    @Test
    public void GetUserById2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> user = mapper.getUserById2("22929", "查斗");
        System.out.println(user);
        sqlSession.close();
    }

    //根据 id和name 查询用户。
    @Test
    public void GetUserById() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        User user = mapper.getUserById(4, "赵朗");
        System.out.println(user);
        sqlSession.close();
    }

    //插入信息,已经在xml设置了自动提交事务,不需要sqlSession.commit()
    @Test
    public void InsertUsers() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<>();

        map.put("id", 8);
        map.put("name", "查斗");
        map.put("psw", "9029021");

        mapper.InsertUser(map);
        sqlSession.close();
    }

    //修改信息
    @Test
    public void UpdateUsers() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<>();
        map.put("id",9);
        map.put("psw","0033131");

        mapper.UpdateUser(map);
        sqlSession.close();
    }

    //每次必须输入全部的属性,比如我想根据id,修改密码,但是必须输入name的属性。
    @Test
    public void UpdateUsers2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.UpdateUser2(new User(9,"查斗","22929"));
        sqlSession.close();
    }

    //删除
    @Test
    public void DeleteUsers() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        mapper.DeleteUser(4);
        sqlSession.close();
    }

备注:理解@param:

1.什么是@param?

答:是注解的一种形式,可以对比@select,@update,@delete理解

2.为什么要使用@param?

答:以为一般情况下,如果创建接口方法的时候,只允许传一个参数,例:

 //根据id查询
    User getUserById(int id);

实际上规范的代码格式应该是这样(只有一个参数的时候@param可以省略):

User getUserById(@param("id")int id);

@param最大的作用是可以解决传入多个参数的问题。

3.怎么使用@param

但是如果我们想要给这个方法传入多个参数怎么办呢,例如根据name和psw共同查询,可以这样修改

 //2. 根据name和psw查询
    @Select("select * from mybatis.user where psw = #{psw} and name = #{name}")
    List<User> getUserById2(@Param("psw") String psw,@Param("name")String name);

测试代码:

    //根据 psw和name 查询用户。
    @Test
    public void GetUserById2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> user = mapper.getUserById2("22929", "查斗");
        System.out.println(user);
        sqlSession.close();
    }

结果显示:
(数据库信息)
在这里插入图片描述
查询结果:
在这里插入图片描述
4. @param使用的注意事项?
如果参数是 JavaBean , 则不能使用@Param。

上文使用的param的参数类型,都是简单的类型

//实体类
public class User {
    private int id;
    private String name;
    private String PASSWORD;

如果不是int,string,float等等类似的,而是Map,student,teacher之类的就不可以使用@param注解。

总结

本次我们初步了解并且应用了在mybati中注解的简单实用,也了解到了涉及的相关知识,比如@Param的使用,也尝试使用两种方法去增删改查,new一个实体类和map的形式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值