zoukankan      html  css  js  c++  java
  • mybatis之增删改

    前面三小节内容主要是针对查询操作进行讲解,现在对mybatis增删改进行演示。

    由于每次建立工程比较复杂,可以参考第一节:mybatis入门来搭建一个简单的工程,然后来测试本节内容。

    1、增


    1、新增mapper接口方法,增加一个保存Person对象的方法savePerson。

    public interface PersonMapper
    {
       Boolean savePerson(Person person);
    }

    2、修改mapper映射文件,添加如下内容:

    <insert id="savePerson">
        insert into person(first_name,last_name,age,email,address) VALUES(#{firstName},#{lastName},#{age},#{email},#{address})
    </insert>

    3、测试

    public static void main(String[] args)
            throws IOException
        {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
            Person person = new Person();
            person.setFirstName("tom");
            person.setAge(10);
            Boolean isSucceed = mapper.savePerson(person);
            sqlSession.commit();
            System.out.println(isSucceed);
            System.out.println(person);
            sqlSession.close();
        }

    4、结果:

    true
    Person{id=null, firstName='tom', lastName='null', age=10, email='null', address='null'}

    注意:

    • 首先需要执行sqlSession.commit()保证在插入数据时提交事务,另一种方式是在获取SqlSession实例的时候可以加上参数表示自动提交,就不需要手动commit。
    SqlSession sqlSession = sqlSessionFactory.openSession(true);
    • 其次打印的person实例的时候,在数据库已经生成了主键id,但是在此打印中却没有获取到,这个就关联到主键如何获取的问题。

    5、主键获取

    mysql支持自增主键,自增主键值的获取,mybatis是利用statement.getGenreatedKeys();在mapper映射文件进行如下配置即可。
    useGeneratedKeys="true":使用自增主键获取主键值策略
    keyProperty:指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性

    下面修改mapper映射文件,新增:useGeneratedKeys="true" keyProperty="id",表示使用自增主键获取主键值策略,并且将主键值赋予javaBean的id字段。

    <insert id="savePerson" useGeneratedKeys="true" keyProperty="id">
        insert into person(first_name,last_name,age,email,address) VALUES(#{firstName},#{lastName},#{age},#{email},#{address})
    </insert>
    测试结果如下,可以看出id已经有数值。
    true
    Person{id=19, firstName='tom', lastName='null', age=10, email='null', address='null'}

    2、删


    1、新增mapper接口方法deletePerson:
    public interface PersonMapper
    {
       Boolean deletePerson(Integer id);
    }

    2、编写对应的mapper映射文件

    <delete id="deletePerson">
        delete from person where id = #{id}
    </delete>

    由于删除操作十分简单,就不过多演示测试过程。

    3、改


    1、新增mapper接口方法updatePerson:

    public interface PersonMapper
    {
       Boolean updatePerson(Person person);
    }

    2、编写对应的mapper映射文件

    <update id="updatePerson">
        update person set first_name = #{firstName} where id = #{id}
    </update>

    注意:上面的sql语句主要是根据person的id来更新该实例的其它属性,为了演示方便,目前只更新一个firtName字段。

    3、测试

    public static void main(String[] args)
        throws IOException
    {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
        //首先查询一条数据
         Person person = mapper.getPerson(2);
        System.out.println(person);
        person.setFirstName("tom");
        //更新查询的数据的字段
         Boolean isSucceed = mapper.updatePerson(person);
        sqlSession.commit();
        System.out.println(isSucceed);
        System.out.println(person);
        sqlSession.close();
    }

    结果如下,可以看出数据已经被更改。

    Person{id=2, firstName='King', lastName='Jean', age=36, email='Jean@163.com', address='beijing'}
    true
    Person{id=2, firstName='tom', lastName='Jean', age=36, email='Jean@163.com', address='beijing'}

    4、总结


    1、增删改可以在接口方法中定义返回值:Integer、Long、Boolean、void;

    2、其次使用sqlSessionFactory.openSession()获取SqlSession需要自动提交。当然如果SqlSession获取使用sqlSessionFactory.openSession(true),则是自动提交,不必手动提交。

    3、新增数据可以获取主键,通过useGeneratedKeys="true" keyProperty="id"

    4、SQL映射文件有多少标签?

    cache –命名空间的二级缓存配置

    cache-ref –其他命名空间缓存配置的引用。

    resultMap–自定义结果集映射

    parameterMap –已废弃!老式风格的参数映射

    sql –抽取可重用语句块。

    insert –映射插入语句

    update –映射更新语句

    delete –映射删除语句

    select –映射查询语句

  • 相关阅读:
    网络流 学习笔记
    回文自动机PAM 学习笔记
    后缀自动机SAM 学习笔记
    题解 CF1207G Indie Album
    题解 CF163E e-Government
    AC自动机 学习笔记
    CCF冬令营Day1上午
    不编译AC记录
    生成函数 抄写笔记
    FFT NTT 学习笔记
  • 原文地址:https://www.cnblogs.com/ye-feng-yu/p/10995268.html
Copyright © 2011-2022 走看看