2021-05-03 10:59  阅读(201)
文章分类:MyBatis 教程 文章标签:MyBatisMyBatis 教程
©  原文作者:一点教程 原文地址:http://www.yiidian.com/springmvc/

接下来,我们看看MyBatis如何完成常见的增删改查(CRUD)操作。

1 增加操作

1.1 Dao接口添加save方法

    
    /**
      * 添加
     */
    public void save(Customer customer);

1.2 配置save方法

    
    <!--1.添加方法-->
    <insert id="save" parameterType="com.yiidian.domain.Customer">
       INSERT INTO t_customer(NAME,gender,telephone) VALUES(#{name},#{gender},#{telephone})
    </insert>

上面的映射信息中#{name}这个语法有两层意思:

  1. 作为参数的占位符
  2. 取传递的参数对象的属性值

还有parameterType代表输入参数类型。

1.3 编写Junit测试方法

    
    /**
     * 添加
     */
    @Test
    public void testSave(){
        //1.获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
    
        //2.生成Dao代理对象
        CustomerDao customerDao = session.getMapper(CustomerDao.class);
    
        //3.调用save方法
        Customer customer = new Customer();
        customer.setName("小苍");
        customer.setGender("女");
        customer.setTelephone("15755556666");
        customerDao.save(customer);
    
        //4.关闭连接
        session.close();
    }

1.4 运行测试

测试类执行完毕后,发现程序没有报错,但是数据插入不了数据库!为什么呢?是因为MyBatis在执行增删改操作时,默认情况下事务在方法执行后自动回滚啦!通过控制台的log4j日志可以清楚地看到:

202105031059368131.png

怎么办呢?有以下两种办法

1.5 事务控制-方式一

202105031059370592.png

1.6 事务控制-方式二

第二种方式是修改事务提交方式为:自动提交。

202105031059374163.png

2 修改操作

2.1 Dao添加update方法

    
    /**
     * 修改
     */
    public void update(Customer customer);

2.2 配置update方法

    
    <!--2.修改方法-->
    <update id="update" parameterType="com.yiidian.domain.Customer">
        UPDATE t_customer SET 
        NAME = #{name},
        gender = #{gender},
        telephone = #{telephone} 
        WHERE id = #{id}
    </update>

2.3 编写Junit测试方法

    
    /**
     * 修改
     */
    @Test
    public void testUpdate(){
        //1.获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
    
        //2.生成Dao代理对象
        CustomerDao customerDao = session.getMapper(CustomerDao.class);
    
        //3.调用update方法
        Customer customer = new Customer();
        customer.setId(5);
        customer.setName("小泽");
        customer.setGender("女");
        customer.setTelephone("15755556666");
        customerDao.update(customer);
    
        session.commit();
    
        //4.关闭连接
        session.close();
    }

2.4 运行测试

202105031059375234.png

数据库的数据已经成功被更新!

3 查询所有操作

3.1 Dao添加findAll方法

    
    /**
     * 查询所有用户
     */
    public List<Customer> findAll();

3.2 配置findAll方法

    
    <select id="findAll" resultType="com.yiidian.domain.Customer">
         select * from t_customer
    </select>

这里的resultType代表方法返回值类型,如果是List集合,只需要指定List的元素类型即可!

3.3 编写Junit测试方法

    
    /**
     * 查询所有
     */
    @Test
    public void testFindAll(){
        //1.获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
    
        //2.生成Dao代理对象
        CustomerDao customerDao = session.getMapper(CustomerDao.class);
    
        //3.调用findAll方法
        List<Customer> list = customerDao.findAll();
    
        for(Customer cust:list){
            System.out.println(cust);
        }
        
        //4.关闭连接
        session.close();
    }

3.4 运行测试

202105031059380735.png

4 查询一个操作

4.1 Dao添加findById方法

    
    /**
     * 查询一个
     */
    public Customer findById(Integer id);

4.2 配置findById方法

    
    <!--查询一个-->
    <select id="findById" parameterType="integer" resultType="com.yiidian.domain.Customer">
        select * from t_customer where id = #{id}
    </select>

注意:如果方法只有一个参数的情况,那么#{id}里面的名称可以随意命名。

4.3 编写Junit测试方法

    
    /**
     * 查询一个
     */
    @Test
    public void testFindById(){
        //1.获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
    
        //2.生成Dao代理对象
        CustomerDao customerDao = session.getMapper(CustomerDao.class);
    
        //3.调用findById方法
        Customer customer = customerDao.findById(5);
    
        System.out.println(customer);
    
        //4.关闭连接
        session.close();
    }

4.4 运行测试

202105031059384716.png

5 条件查询操作

5.1 添加findByName方法

    
    /**
     * 条件查询
     */
    public List<Customer> findByName(String name);

5.2 配置findbyName方法

    
    <!--条件查询-->
    <select id="findByName" parameterType="string" resultType="com.yiidian.domain.Customer">
        select * from t_customer where name like #{name}
    </select>

5.3 编写Junit测试方法

    
    /**
     * 条件查询
     */
    @Test
    public void testFindByName(){
        //1.获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
    
        //2.生成Dao代理对象
        CustomerDao customerDao = session.getMapper(CustomerDao.class);
    
        //3.调用findByName方法
        List<Customer> list = customerDao.findByName("%小%");
    
        for(Customer cust:list){
            System.out.println(cust);
        }
    
        //4.关闭连接
        session.close();
    }

5.4 运行测试

202105031059386997.png

6 删除操作

6.1 Dao添加delete方法

    
    /**
     * 删除
     */
    public void delete(Integer id);

6.2 配置delete方法

    
    <!--删除-->
    <delete id="delete" parameterType="integer">
        delete from t_customer where id = #{id}
    </delete>

6.3 编写Junit测试方法

    
    /**
     * 删除
     */
    @Test
    public void testDelete(){
        //1.获取SqlSession对象
        SqlSession session = MyBatisUtils.getSession();
    
        //2.生成Dao代理对象
        CustomerDao customerDao = session.getMapper(CustomerDao.class);
    
        //3.调用findByName方法
        customerDao.delete(5);
    
        // 提交事务
        session.commit();
    
        //4.关闭连接
        session.close();
    }

6.4 运行测试

202105031059392388.png

源码下载:https://pan.baidu.com/s/14ISxK70kyYX5tw6cMpciPQ

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> MyBatis 开发CRUD
上一篇
MyBatis 工具类抽取
下一篇
MyBatis 获取自增主键值