保存用户信息
填写"保存"操作的SQL语句:
在User对应的配置文件IUserDao.xml中填写SQL语句,文件位置为:
保存用户部分的代码为:
<!--保存用户-->
<insert id="saveUser" parameterType="com.learning.domain.User">
insert into user(last_name,gender,email)values(#{last_name},#{gender},#{email});
</insert>
填写保存操作的测试方法:
测试文件的位置为:
"保存"操作部分的代码为:
// 1.读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
// 3.使用工厂生产SqlSession对象
SqlSession session=factory.openSession();
// 4.使用SqlSession创建dao接口的代理对象
IUserDao userDao=session.getMapper(IUserDao.class);
// 5.使用代理对象执行方法
userDao.saveUser(user);
session.commit();
// 6.释放资源
session.close();
in.close();
如果每个对DAO操作的方法都需要上述过程的话有些繁琐,可以将上述1-4步简化为一个初始化的过程,同时将第六步释放资源的过程单独拎出来处理。
修改后的整个测试文件为:
package com.learning.test;
import com.learning.dao.IUserDao;
import com.learning.domain.User;
import jdk.internal.util.xml.impl.Input;
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 java.io.InputStream;
import java.util.List;
public class MyBatisTest {
private InputStream in;
private SqlSession session;
private IUserDao userDao;
@Before // 在测试方法运行前运行
public void init()throws Exception{
// 1.读取配置文件
in= Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.创建SqlSessionFactory工厂
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
// 3.使用工厂生产SqlSession对象
session=factory.openSession();
// 4.使用SqlSession创建dao接口的代理对象
userDao=session.getMapper(IUserDao.class);
}
@After
public void destroy() throws Exception{
session.close();
in.close();
}
@Test
public void testFindAll(){
// 5.使用代理对象执行方法
List<User> users=userDao.findAll();
for(User user: users){
System.out.println(user);
}
}
@Test
public void testSave(){
User user=new User();
user.setLast_name("Mary");
user.setGender(1);
user.setEmail("Mary@123.com");
// 执行保存方法
userDao.saveUser(user);
// 递交事务
session.commit();
}
}
- 添加before注解的初始化方法会在程序执行之前执行
- 添加after注解的方法会在程序执行之后执行
- 对数据库进行添加和更新操作时必须进行
session.commit()
,否则数据就不会更新
修改用户信息:
在DAO接口文件中添加修改用户信息的方法:
void deleteUser(Integer id);
然后在配置文件中写修改用户信息相关的SQL语句:
<!--更新用户-->
<insert id="updateUser" parameterType="com.learning.dao.IUserDao">
update user set last_name=#{last_name},gender=#{gender},email=#{email} where id=#{id}
</insert>
最后写一下修改用户信息的测试类:
@Test
public void testUpdate(){
User user=new User();
user.setId(2);
user.setLast_name("Tom");
user.setGender(1);
user.setEmail("Tom@123.com");
userDao.updateUser(user);
}
运行该测试类,在数据库中可以看到结果。原来表中的数据为:
执行完修改之后表中的数据为:
删除用户信息:
在接口中添加删除用户信息的方法:
void deleteUser(Integer id);
在DAO对应的配置文件中写删除用户的SQL语句:
<!--删除用户-->
<insert id="deleteUser" parameterType="int">
delete from user where id=#{id}
</insert>
- 这里参数的类型可以是"int"或者"Integer"
- 由于传递过来的之后一个id参数,因此SQL语句还可以写为:
delete from user where id=#{whatever}
,就是随便写个名字都可以
在测试文件中写测试删除用户的方法:
@Test
public void testDelete(){
userDao.deleteUser(1);
}
数据库中原来的表为:
运行该方法后,表中的数据变为:
总结
对用户的CRUD操作流程是:
写接口的实现方法----在DAO配置文件中写对应的SQL语句—测试验证