深入浅出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();
             }
         }


     }

 

 

 

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

posted @ 2018-10-27 21:32  palyer  阅读(179)  评论(0编辑  收藏  举报