zoukankan      html  css  js  c++  java
  • Mybatis 3.CRUD

    继上篇文章:https://www.cnblogs.com/mytJava/p/13039871.html ,继续编写

    3、 CRUD

    1、namespace

    namespace中的包名要和 Dao/mapper 接口的 包名一致!

    image-20200603213925726

    2、select

    选择,查询语句;

    • id : 就是对应的namespace 接口中的方法名;
    • resultType:Sql语句执行的返回值!
    • parameterType : 参数类型!
    1. 编写接口

      //根据ID查询用户
      User getUserById(int id);
      
    2. 编写对应的mapper中的sql语句 --#{} 取值

      <select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
              select * from mybatis.user where id = #{id} 
      </select>
      
      
    3. 测试

          @Test
          public void getUserById() {
              SqlSession sqlSession = MybatisUtils.getSqlSession();
      
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      
              User user = mapper.getUserById(1);
              System.out.println(user);
      
              sqlSession.close();
          }
      
      

    3、Insert

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

    4、update

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

    5、Delete

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

    注意点:

    • 增删改需要提交事务!

    6、万能Map ---定制化sql参数

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

        //万能的Map
        int addUser2(Map<String,Object> map);
    
    
        <!--对象中的属性,可以直接取出来    传递map的key-->
        <insert id="addUser" parameterType="map">
            insert into mybatis.user (id, pwd) values (#{userid},#{passWord});
        </insert>
    
        @Test
        public void addUser2(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
    
            Map<String, Object> map = new HashMap<String, Object>();
    
            map.put("userid",5);
            map.put("passWord","2222333");
    
            mapper.addUser2(map);
    
            sqlSession.close();
        }
    
    

    Map传递参数,直接在sql中取出key即可! 【parameterType="map"】

    对象传递参数,直接在sql中取对象的属性即可!【parameterType="Object"】

    只有一个基本类型参数的情况下,可以直接在sql中取到! 【如int,parameterType也可以不写】

    多个参数用Map,或者注解!

    7、思考题

    模糊查询怎么写?---- 业务中,更安全

    1. Java代码执行的时候,传递通配符 % %

      List<User> userList = mapper.getUserLike("%李%");
      
    2. 在sql拼接中使用通配符!

      select * from mybatis.user where name like "%"#{value}"%"
      

    避免:

    select * from mybatis.user where id = ?
    select * from mybatis.user where id = 1 or 1=1
    

    完整代码如下:

    自第一个mybatis程序创建好后,目前只需要修改 dao层下的UserMapper.java 和 UserMapper.xml,以及 test下的 UserMapperTest.java,实现 增删改查 操作!

    UserMapper.java

    package com.dao;
    
    import com.pojo.User;
    
    import java.util.List;
    import java.util.Map;
    
    public interface UserMapper {
    
        //模糊查询
        List<User> getUserLike(String value);
    
        //查询全部用户
        List<User> getUserList();
    
        //根据id查询用户
        User getUserById(int id);
    
        //map示例
        int addUser2(Map<String,Object> map);
    
        //insert 一个用户
        int addUser(User user);
    
        //修改用户
        int updateUser(User user);
    
        //删除一个用户
        int deleteUser(int id);
    }
    
    

    UserMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--Mapper配置文件-->
    <!--namespace= 绑定一个对应的Dao/Mapper接口-->
    <mapper namespace="com.dao.UserMapper">
    
    
        <select id="getUserLike" resultType="com.pojo.User">
    -- select * from mybatis.user where name like #{value}; 问题:这个sql语句注释不管用??
            select * from mybatis.user where name like "%"#{value}"%"
        </select>
    
        <!--select查询语句-->
        <select id="getUserList" resultType="com.pojo.User">
           select * from mybatis.user
       </select>
    
        <select id="getUserById" parameterType="int" resultType="com.pojo.User">
            select * from mybatis.user where id = #{id}
        </select>
    
        <!--目前先写 全限定名-->
        <!--对象中的属性,可以直接取出来-->
        <!--idea 中没有连接数据库,就直接写表名,不要写数据库;连了才写-->
        <insert id="addUser" parameterType="com.pojo.User">
            insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd});
        </insert>
    
        <!--
            对象中的属性,可以直接取出来
            传递map中的key
        -->
        <insert id="addUser2" parameterType="map">
            insert into mybatis.user(id,pwd) values(#{userid},#{password});
        </insert>
    
        <update id="updateUser" parameterType="com.pojo.User">
            update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id};
        </update>
    
        <delete id="deleteUser" parameterType="int">
            delete from mybatis.user where id = #{id};
        </delete>
    </mapper>
    

    UserMapperTest.java:注意 增删改 需要提交事务!!!

    package com.dao;
    
    import com.pojo.User;
    import com.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class UserMapperTest {
    
        @Test
        public void getUserLike(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //List<User> users = mapper.getUserLike("%李%");
            List<User> users = mapper.getUserLike("李");
            for (User user : users) {
                System.out.println(user);
            }
    
            sqlSession.commit();
        }
    
        @Test
        public void test(){
            //①获得sqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            //②执行sql: getMapper--接口,都应该传入接口,来操作,而不是传入实现类
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.getUserList();
    
            for (User user : userList) {
                System.out.println(user);
            }
    
            //关闭 sqlSession
            sqlSession.close();
        }
    
        @Test
        public void getUserById(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            //获得接口
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //UserMapper mapper = new UserDaoImpl();  之前的操作
    
            User user = mapper.getUserById(1);
            System.out.println(user);
    
            sqlSession.close();
        }
    
    
        //增删改 必须提交事务
        @Test
        public void addUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            mapper.addUser(new User(4,"哈哈","12222"));
    
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void addUser2(){
    
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("userid",5);
            map.put("password","qwer");
    
            mapper.addUser2(map);
    
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void updateUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.updateUser(new User(4,"呵呵","111111"));
    
            sqlSession.commit();
    
            sqlSession.close();
        }
    
        @Test
        public void deleteUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.deleteUser(2);
    
            sqlSession.commit();
    
            sqlSession.close();
        }
    }
    
    
  • 相关阅读:
    Feign原理 (图解)
    纠错:Feign 没用 短连接
    【转】linux 查看哪些进程用了swap
    【转】交换分区SWAP
    【改】linux中分区的概念
    【转】SPI FLASH与NOR FLASH的区别 详解SPI FLASH与NOR FLASH的不一样
    【转】DDR3和eMMC区别
    ARP (地址解析协议)
    【转】一文搞懂C语言回调函数
    【改】shell 判断文件中有无特定子串方法(grep)
  • 原文地址:https://www.cnblogs.com/mytJava/p/13040270.html
Copyright © 2011-2022 走看看