MyBatis 开发CRUD

接下来,我们看看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日志可以清楚地看到:

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

1.5 事务控制-方式一

1.6 事务控制-方式二

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

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 运行测试

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

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 运行测试

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 运行测试

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 运行测试

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 运行测试

 

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