zoukankan      html  css  js  c++  java
  • 2.MyBatis的CRUD操作

    转载:https://blog.kuangstudy.com/index.php/archives/492/

    一.CRUD操作

    1.基本操作流程

    1.  在Mapper接口中添加一个方法

    2. 在Mapper.xml中添加一个xml语句与方法对应

    3. 在测试类中添加一个方法测试

    2.namespace

    配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!

    3.select

    (1)介绍

    • select标签是mybatis中最常用的标签之一
    • select语句有很多属性可以详细配置每一条SQL语句

      • id:对应namespace中的方法名

      • parameterType:传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】

      • resultType:SQL语句返回值类型。【完整的类名或者别名】

    (2)案例:根据id查询用户

    Mapper接口中添加方法

    1 //根据ID查询用户
    2 User getUserById(int id);

    Mapper.xml中添加xml语句

    1 <!--根据ID查询用户-->
    2     <select id="getUserById" parameterType="int" resultType="edu.ustc.wzh.pojo.User">
    3         select * from mybatis.user where id=#{id}
    4     </select>

    测试类中添加方法

     1 @Test
     2 public void getUserById() {
     3 
     4     SqlSession session = MybatisUtils.getSession();
     5 
     6 
     7     UserMapper mapper = session.getMapper(UserMapper.class);
     8     User user = mapper.getUserById(1);
     9     System.out.println(user);
    10 
    11     session.close();
    12 }

    3.insert

    Mapper接口添加方法

    1 //insert一个用户
    2 int addUser(User user);

    Mapper.xml中添加xml语句:对于对象的属性可以直接取出 values (#{id},#{name},#{pwd}) 

    1 <!--对象中的属性,可以直接取出来-->
    2     <insert id="addUser" parameterType="edu.ustc.wzh.pojo.User">
    3         insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    4     </insert>

    测试类添加方法:对于增删改都需要提交事务 session.commit(); 

     1 //增删改需要提交事务
     2 @Test
     3 public void addUser(){
     4     SqlSession session = MybatisUtils.getSession();
     5 
     6     UserMapper mapper = session.getMapper(UserMapper.class);
     7 
     8     int res = mapper.addUser(new User(4,"wzh","654321"));
     9     if (res>0){
    10         System.out.println("插入成功!");
    11     }
    12 
    13     //提交事务
    14     session.commit();
    15 
    16     session.close();
    17 }

    4.update

    Mapper接口中添加方法

    1 //更新用户信息
    2 int updateUser(User user);

    Mapper.xml中添加xml语句

    1 <update id="updateUser" parameterType="edu.ustc.wzh.pojo.User">
    2     update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
    3 </update>

    测试类中添加测试方法

     1 @Test
     2 public void updateUser(){
     3     SqlSession session = MybatisUtils.getSession();
     4 
     5     UserMapper mapper = session.getMapper(UserMapper.class);
     6 
     7     int res = mapper.updateUser(new User(4,"wzh","000000"));
     8     if (res>0){
     9         System.out.println("更新成功!");
    10     }
    11 
    12     //提交事务
    13     session.commit();
    14 
    15     session.close();
    16 }

    5.delete

    Mapper接口中添加方法

    1 //删除用户
    2 int deleteUser(int id);

    Mapper.xml中添加xml语句

    1 <delete id="deleteUser" parameterType="int">
    2     delete from mybatis.user where id=#{id};
    3 </delete>

    测试类中添加测试方法

     1 @Test
     2 public void deleteUser(){
     3     SqlSession session = MybatisUtils.getSession();
     4 
     5     UserMapper mapper = session.getMapper(UserMapper.class);
     6 
     7     int res = mapper.deleteUser(4);
     8     if (res>0){
     9         System.out.println("删除成功!");
    10     }
    11 
    12     //提交事务
    13     session.commit();
    14 
    15     session.close();
    16 }

    6.万能Map

    假设我们的实体类或数据库中的表,字段或参数过多,我们应当考虑使用Map!

    Mapper接口中添加方法

    1 //使用万能Map添加用户信息
    2 int addUser2(Map<String,Object> map);

    Mapper.xml中添加xml语句

    1 <!--使用万能Map,参数传递变为map,值传递map的key-->
    2 <insert id="addUser2" parameterType="map">
    3     insert into mybatis.user (id,name,pwd) values (#{userId},#{userName},#{password});
    4 </insert>

    测试类中添加测试方法

     1 @Test
     2 public void addUser2(){
     3     SqlSession session = MybatisUtils.getSession();
     4 
     5     UserMapper mapper = session.getMapper(UserMapper.class);
     6 
     7     Map<String,Object> map = new HashMap<>();
     8 
     9     map.put("userId",5);
    10     map.put("userName","ustc");
    11     map.put("password","098765");
    12     mapper.addUser2(map);
    13 
    14     session.commit();
    15     session.close();
    16 }

    注:

    • Map传递参数,直接在SQL中取出key即可【parameterType="map"】
    • 对象传递参数,直接在SQL中取出对象属性【parameterType="edu.ustc.wzh.pojo.User"】
    • 只有一个基本类型的情况下,可以省略xml的参数类型,直接在SQL中取到

    我们可以多用Map或者注解!

    7.模糊查询

    两种方式:

    (1)Java代码执行的时候,传递通配符 % (推荐使用)

    Mapper接口中添加方法

    1 //模糊查询:Java代码方式
    2 List<User> getUserLike(String value);

    Mapper.xml中添加xml语句

    1 <select id="getUserLike" parameterType="String" resultType="edu.ustc.wzh.pojo.User">
    2     select * from mybatis.user where name like #{value};
    3 </select>

    测试类中添加测试方法

     1 @Test
     2 public void getUserLike(){
     3 
     4     SqlSession session = MybatisUtils.getSession();
     5 
     6     UserMapper mapper = session.getMapper(UserMapper.class);
     7 
     8     List<User> userList = mapper.getUserLike("李%");
     9     for (User user : userList) {
    10         System.out.println(user);
    11     }
    12 
    13     session.close();
    14 }

    (2)在SQL中使用通配符拼接(可能会产生SQL注入)

    Mapper接口中添加方法

    1 //模糊查询:SQL拼接方式
    2 List<User> getUserLike2(String value);

    Mapper.xml中添加xml语句:直接在SQL代码处拼接  "%"#{value}"%" 可能产生SQL注入

    1 <select id="getUserLike2" parameterType="String" resultType="edu.ustc.wzh.pojo.User">
    2     select * from mybatis.user where name like "%"#{value}"%";
    3 </select>

    测试类中添加测试方法

     1 @Test
     2 public void getUserLike2(){
     3 
     4     SqlSession session = MybatisUtils.getSession();
     5 
     6     UserMapper mapper = session.getMapper(UserMapper.class);
     7 
     8     List<User> userList = mapper.getUserLike2("李");
     9     for (User user : userList) {
    10         System.out.println(user);
    11     }
    12 
    13     session.close();
    14 }
  • 相关阅读:
    DRF项目之视图获取路径参数
    DRF项目之层级关系
    DRF项目之序列化器和视图重写方法的区别
    DRF项目之自定义分页器
    DRF项目之实现用户密码加密保存
    DRF项目之通过业务逻辑选择数据集和序列化器
    DRF项目之自定义JWT认证响应数据
    PIP一次性导入所有环境和指定镜像源
    DRF项目之JWT认证方式的简介及使用
    DRF项目之解决浏览器同源策略问题
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12296451.html
Copyright © 2011-2022 走看看