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}
这个语法有两层意思:
- 作为参数的占位符
- 取传递的参数对象的属性值
还有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 运行测试
热门文章
优秀文章