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();
                 }
             }
    
    
         }
    

     

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

  • 相关阅读:
    系统维护相关问题
    Python环境维护
    哈希表解决字符串问题
    论文笔记二:《A Tutoral on Spectral Clustering》
    论文笔记之哈希学习比较--《Supervised Hashing with Kernels》《Towards Optimal Binary Code Learning via Ordinal Embedding》《Top Rank Supervised Binary Coding for Visual Search》
    Java中String、StringBuffer、StringBuilder的比较与源 代码分析
    浙大pat1040 Longest Symmetric String(25 分)
    浙大pat1039 Course List for Student(25 分)
    浙大pat---1036 Boys vs Girls (25)
    百炼oj-4151:电影节
  • 原文地址:https://www.cnblogs.com/mtime2004/p/9890801.html
Copyright © 2011-2022 走看看