zoukankan      html  css  js  c++  java
  • MyBatis数据持久化(三)增删改查

    上篇文章中我们使用mybatis成功建立数据库会话,并从表中查询出相应的数据,本文在此基础上介绍MyBatis另外几种操作,即插入、修改、删除记录。
    1.修改User.xml文件,增加几条sql语句:

    <?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="User">
        <select id="queryUserInfoByName" parameterType="string"  resultType="com.mybatis.domain.User">
            select * from User where username = #{username}
        </select>
    
        <insert id="saveUser" parameterType="com.mybatis.domain.User">
            insert into user(username,password,phone) values(#{username},#{password},#{phone});
        </insert>
    
        <update id="updateUser" parameterType="com.mybatis.domain.User">
            update user set password=#{password} where username=#{username}
        </update>
    
        <delete id="deleteUser" parameterType="com.mybatis.domain.User">
            delete from user where username = #{username}
        </delete>
    </mapper>

    2.新建测试类com.mybatis.exam3.MyBatisCRUD

    package com.mybatis.exam3;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import com.mybatis.domain.User;
    
    public class MyBatisCRUD{
        private Reader reader = null;
        private SqlSessionFactory sessionFactory  = null;
        private SqlSession session = null;
        @Before
        public void before()
        {
            try {
                reader = Resources.getResourceAsReader("SqlMapConfig.xml");
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
                //创建一个数据库会话
                 session = sessionFactory.openSession();  
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        @Test
        public void testMybatisSelect()
        {           
                User user = (User)session.selectOne("User.queryUserInfoByName","小王");           
                //此处会调用user的toString方法
                System.out.println(user);   
        }
    
        @Test
        public void testMybatisInsert()
        {   
                User user = new User();
                user.setPassword("aaaa");
                user.setPhone("18909568934");
                user.setUsername("Jane");
                session.insert("User.saveUser", user);
                //mybatis事物默认不自动提交
                session.commit();   
        }
    
        @Test
        public void testMybatisUpdate()
        {   
                User user = new User();
                user.setPassword("bbbbb");
                user.setPhone("18909568934");
                user.setUsername("Jane");
                session.update("User.updateUser",user);
                //mybatis事物默认不自动提交
                session.commit();   
        }
    
        @Test
        public void testMybatisDelete()
        {   
                User user = new User();
                user.setPassword("bbbbb");
                user.setPhone("18909568934");
                user.setUsername("Jane");
                session.delete("User.deleteUser", user);
                //mybatis事物默认不自动提交
                session.commit();
    
        }
        @After
        public void after()
        {
            if(null != session)
            {
                session.close();
            }
        }
    }

    笔者对上节的代码进行了重构,把建立数据库会话的代码放到了before方法中,该方法是经过@Before注解修饰过的,会在执行每个测试方法之前自动执行。

    1.testMybatisSelect为数据查询测试方法,和上节相同。

    2.testMybatisInsert为数据插入测试方法,我们新建了一条插入sql语句:

    <insert id="saveUser" parameterType="com.mybatis.domain.User">
            insert into user(username,password,phone) values(#{username},#{password},#{phone});
    </insert>

    parameterType属性指定参数类型为User,因此session.insert方法的第二个参数必须为User类的对象,我们通过下面代码新建一个User对象,并为其属性赋值:

    User user = new User();
    user.setPassword("aaaa");
    user.setPhone("18909568934");
    user.setUsername("Jane");

    这些属性的值会自动同步到#{username},#{password},#{phone}占位符中。需要注意的是,通过sessionFactory.openSession()方法获取数据库会话,mybatis事务默认不自动提交,在对数据库做更新操作后要手动调用session.commit()提交事务。如果需要事务自动提交,我们需要调用openSession方法的重载形式,指定一个boolean类型变量作为参数:

    //事务自动提交
    sessionFactory.openSession(true);

    3.testMybatisUpdate和testMybatisDelete分别为数据更新和删除操作测试方法,和数据插入类似,也比较简单,读者可以参考上面的代码,这里不做介绍了。

    项目源码:https://github.com/rongbo-j/mybatis-blog

  • 相关阅读:
    MySQL5.7.17解压版安装
    autocomplete初步使用
    前端面试题:驼峰体与匈牙利语法的相互转换
    前端常用正则表达式
    解决npm报错:Module build failed: TypeError: this.getResolve is not a function
    vue实现对语言的切换,结合vue-il8n。
    大量数据处理的一个思路
    不同格式矢量数据源在MapServer上发布服务后切片缓存效率对比
    CentOS7使用yum安装PostgreSQL和PostGIS
    ArcGIS消除图斑重叠错误
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468739.html
Copyright © 2011-2022 走看看