zoukankan      html  css  js  c++  java
  • 深入浅出Mybatis(四)增删改

    添加

    添加需

    • 添加用户,返回添加的用户信息,包括(id,address,sex,username,birthday)

    在User.xml添加insert的sql语句

          这次我们使用的是添加用户,所以要使用insert标签。

    <?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="test"><!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
        <!-- id:statement的id 或者叫做sql的id-->
        <!-- parameterType:声明输入参数的类型 -->
        <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
        <!-- #{}:输入参数的占位符,相当于jdbc的? -->
        <!-- 根据id获取用户信息 -->
        <select id="findUserById" parameterType="int"
                resultType="com.dtt.mybatis.pojo.User" >
     select *  from user where id = #{id}
      </select>
        <!-- 根据用户名,查询用户列表,支持模糊查询 -->
        <select id="findUserByUsername" parameterType="java.lang.String"
                resultType="com.dtt.mybatis.pojo.User">
     select *  from user where username like '%${value}%'
      </select>
        <insert id="insertUser" parameterType="com.dtt.mybatis.pojo.User">
            <!-- 将插入数据的主键返回,返回到user对象中。 select LAST_INSERT_ID():得到刚insert进行的记录的主键,只适用于自增主键
                keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性。 order:select LAST_INSERT_ID()执行顺序,相对insert语句来说他的执行顺序
                resultType:指定select LAST_INSERT_ID()的返回数据的类型 -->
            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    
                select LAST_INSERT_ID()
            </selectKey>
    
            INSERT  into user(username,birthday,sex,adderss) VALUES (#{username},#{birthday},#{sex},#{adderss})
        </insert>
    
    </mapper>
    

       这里有几点是需要我们要留意的:
          1.因为要插入的是用户实体,所以我们的输入格式parameterType=”com.dtt.mybatis.pojo.User”;

          2.需求中说返回添加的用户信息,包括(id,address,sex,username,birthday),再怎么数据库中的id字段是自增长的,我们可以通过select LAST_INSERT_ID()语句来得到刚insert进行的记录的主键的值。

          3.在selectKey标签中,keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性。 order:select LAST_INSERT_ID()执行顺序,相对insert语句来说他的执行顺序 。

          4.插入语句我们使用的是#{}占位符,可以在括号内直接写User的属性值。且不能有‘’,以下两种是错误的写法:

     INSERT into user (username ,birthday,sex,address)VALUES (#{User.username},#{User.birthday},#{User.sex},#{User.address}) 
    INSERT into user (username ,birthday,sex,address)VALUES ('#{username}','#{birthday}','#{sex}','#{address}') 
    INSERT into user (username ,birthday,sex,address)VALUES ('#{User.username}','#{User.birthday}','#{User.sex}','#{User.address}')
    

       当然我们也可以使用${}来拼接字符串,但是可能会遇到数据格式的问题,最常见的就是时间格式问题。

     INSERT into user (username ,birthday,sex,address)VALUES ('${username}','${birthday}','${sex}','${address}') 
    

    测试程序

          在UserTest.java测试类中添加测试方法testinsertUser:

     @Test
        public void testInsertUser(){
    
            //数据库会话
             SqlSession sqlSession=null;
             try {
                 sqlSession=  sqlSessionFactory.openSession();
                 //添加数据信息
                 User user = new User();
                 user.setSex("1");
                 user.getAddress("东京");
                 user.getBirthday(new Date());
                 user.setUsername("fenyan");
                 sqlSession.insert("test.insertUser", user);
                 sqlSession.commit();
                 System.out.println("添加成功)");
                 System.out.println(user.getId());
             }catch( Exception e){
                 e.printStackTrace();
             }
            finally{
                 if(sqlSession!=null){
                     sqlSession.close();
                 }
    
            }
        }
    

     

    删除的需求

    • 根据id删除用户信息

     在User.xml添加delete的sql语句

      <delete id="delUserById" parameterType="int">
            delete from user where id=#{id}
        </delete>
    
    // 根据id删除用户
    @Test
    public void testDelete() {
            // 数据库会话实例
        SqlSession sqlSession = null;
        try {
            // 创建数据库会话实例
            sqlSession = sqlSessionFactory.openSession();
            // 删除用户
            sqlSession.delete("test.delUserById",55);
            // 提交事务
            sqlSession.commit();
            System.out.println("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
        }
    

     

    修改的需求

    • 根据id修改用户信息

     在User.xml添加update的sql语句

    <update id="updateUserById" parameterType="com.dtt.mybatis.pojo.User">
            update user set username=#{username} where id=#{id}
        </update>
    
     @Test
        public void testUpateUser(){
             // 数据库会话实例
             SqlSession sqlSession = null;
             try {
                 // 创建数据库会话实例
                 sqlSession = sqlSessionFactory.openSession();
                 // 添加用户
                User user =new User ();
                user.setId(20);
                user.setSex("1");
                user.setAddress("浙江");
                user.setBirthday(new Date());
                user.setUsername("凤凰女");
                sqlSession.update("test.updateUserById",user);
                sqlSession.commit();
                 System.out.println(user.getId());
                 System.out.println(user.getUsername());
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
                 if (sqlSession != null) {
                     sqlSession.close();
                 }
             }
    
    
         }
    

     

    增删改查就完成了,这个些功能仅仅是使用了一个映射文件完成的,可以感觉到系统变的非常的灵活,而且使用的也很方面,把封装发挥到了很好的地步。

  • 相关阅读:
    mysql详解9:触发器和事件
    mysql详解7:视图
    mysql详解6:字符串函数 日期函数 IF CASE
    mysql详解5:复杂查询
    [转]Kubernetes网络组件之Calico策略实践(BGP、RR、IPIP)
    Springcloud 学习笔记05-Mybatis-Plus
    Git学习笔记04--tortoisegit的clone、pull、commit操作、分支的新增、合并、删除
    Git学习笔记03--Git客户端(TortoiseGit)安装与基本使用
    Java 项目bug记录过程--Failed to configure a DataSource
    TiDB学习笔记02-场景案例综述
  • 原文地址:https://www.cnblogs.com/mtime2004/p/9890801.html
Copyright © 2011-2022 走看看