zoukankan      html  css  js  c++  java
  • 3、MyBatis教程之CURD操作

    4、CURD操作

    1、查询

    • 根据用户 Id查询用户
    1. 在UserMapper中添加对应方法
    public interface UserMapper {
        List<User> getUserList();
    
        List<User> getUserListById(int id); 
    } 
    

    2、在UserMapper.xml中添加Select语句

     <select id="getUserListById" resultType="com.feng.pojo.User" parameterType="int">
          select * from User where id=#{id}
      </select>
    

    3、测试类中测试

        @Test
        public  void  testgetUserById()
        {
            SqlSession sqlSession = MyBatisUtil.getSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userMapper.getUserListById(1);
            for (User user : userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    
    • 根据用户名和密码获取用户

    思路一:直接在方法中传递参数(注解)

    1、在接口方法的参数前加 @Param属性

    2、Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型

    //通过密码和名字查询用户
    User selectUserByNP(@Param("username") String username,@Param("pwd") Stringpwd);
    
    /*
       <select id="selectUserByNP" resultType="com.feng.pojo.User">
         select * from user where name = #{username} and pwd = #{pwd}
       </select>
    */
    

    思路二:使用万能的Map

    1、在接口方法中,参数直接传递Map;

    User selectUserByMP(Map<String,Object> map);
    

    2、编写sql语句的时候,需要传递参数类型,参数类型为map

    <select id="selectUserByMP" parameterType="map" resultType="com.deng.pojo.User">
    select * from user where name = #{username} and pwd = #{pwd}
    </select>
    

    3、在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("username","小明");
    map.put("pwd","123456");
    User user = mapper.selectUserByNP2(map);
    

    总结:如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可

    2、增加

    1、在UserMapper接口中添加对应的方法

    //添加一个用户
    int addUser(User user);
    

    2、在UserMapper.xml中添加insert语句

    <insert id="addUser" parameterType="com.feng.pojo.User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>
    

    3、测试

    @Test
    public void testAddUser() {
       SqlSession session = MybatisUtils.getSession();
       UserMapper mapper = session.getMapper(UserMapper.class);
       User user = new User(5,"王五","zxcvbn");
       int i = mapper.addUser(user);
       System.out.println(i);
       session.commit(); //提交事务,重点!不写的话不会提交到数据库
       session.close();
    }
    

    注意点:增、删、改操作需要提交事务!

    3、更新

    我们一般使用update标签进行更新操作,它的配置和select标签差不多!

    需求:修改用户的信息

    1、同理,编写接口方法

    //修改一个用户
    int updateUser(User user);
    

    2、编写对应的配置文件SQL

    <update id="updateUser" parameterType="com.feng.pojo.User">
      update user set name=#{name},pwd=#{pwd} where id = #{id}
    </update>
    

    3、测试

    @Test
    public void testUpdateUser() {
       SqlSession session = MybatisUtils.getSession();
       UserMapper mapper = session.getMapper(UserMapper.class);
       User user = mapper.selectUserById(1);
       user.setPwd("asdfgh");
       int i = mapper.updateUser(user);
       System.out.println(i);
       session.commit(); //提交事务,重点!不写的话不会提交到数据库
       session.close();
    }
    

    4、删除

    我们一般使用delete标签进行删除操作,它的配置和select标签差不多!

    需求:根据id删除一个用户

    1、同理,编写接口方法

    //根据id删除用户
    int deleteUser(int id);
    

    2、编写对应的配置文件SQL

    <delete id="deleteUser" parameterType="int">
      delete from user where id = #{id}
    </delete>
    

    3、测试

    @Test
    public void testDeleteUser() {
       SqlSession session = MybatisUtils.getSession();
       UserMapper mapper = session.getMapper(UserMapper.class);
       int i = mapper.deleteUser(5);
       System.out.println(i);
       session.commit(); //提交事务,重点!不写的话不会提交到数据库
       session.close();
    }
    

    小结:

    • 所有的增删改操作都需要提交事务!
    • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
    • 有时候根据业务的需求,可以考虑使用map传递参数!
    • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!

    思考题

    模糊查询like语句该怎么写?

    第1种:在Java代码中添加sql通配符。

    string wildcardname = “%smi%”;
    list<name> names = mapper.selectlike(wildcardname);
    
    <select id=”selectlike”>
    select * from foo where bar like #{value}
    </select>
    

    第2种:在sql语句中拼接通配符,会引起sql注入

    string wildcardname = “smi”;
    list<name> names = mapper.selectlike(wildcardname);
    
    <select id=”selectlike”>
        select * from foo where bar like "%"#{value}"%"
    </select>
    

  • 相关阅读:
    Uva 10779 collector's problem
    poj 2728 最优比率树(最小生成树问题)
    LA 3126 二分图匹配 最小路径覆盖
    poj 1149 最大流构图
    Step By Step(Java XML篇)
    Step By Step(Java 输入输出篇)
    Step By Step(Java 集合篇)
    Step By Step(Java 线程篇)
    Step By Step(Java 反射篇)
    Step By Step(Java 国际化篇)
  • 原文地址:https://www.cnblogs.com/chenn/p/13345332.html
Copyright © 2011-2022 走看看