1.添加操作
2.删除操作
3.修改操作
4.查询操作
在IUserDao.java接口中添加saveUser()方法如下图:
/*
* 添加用户
* */
void saveUser(User user);
然后在IUserDao.xml配置文件中添加SQL语句以及相关配置,使用select标签
id为接口中的方法名称,paramerType全限定类名
<!-- 添加用户-->
<insert id="saveUser" parameterType="com.itheima.domain.User">
insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});
</insert>
由于每次取到dao对象的操作有的繁琐,且每次测试不同方法都要重复,所以就把要重复的操作抽取成两个方法init()和destroy(),分别在测试前和测试完成后执行,需要分别在方法上加@Before和@After注解
public class MybatisTest {
private IUserDao dao;
private InputStream in;
private SqlSession session;
@Before
public void init() throws IOException {
//1.读取配置文件
in= Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建工厂对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//3.创建SqlSession对象
session=factory.openSession();
//4.创建代理对象
dao=session.getMapper(IUserDao.class);
}
@After
public void destroy() throws IOException {
session.commit();
session.close();
in.close();
}
@Test
//1.查询所有的方法
public void testFindAll() throws IOException {
List<User> list=dao.findAll();
for(User user:list)
System.out.println(user);
}
//2.增加用户
@Test
public void saveUser(){
User user=new User();
user.setUsername("add User property");
user.setAddress("北京市顺义区");
user.setSex("男");
user.setBirthday(new Date());
System.out.println("操作之前"+user);
dao.saveUser(user);
System.out.println("操作之后"+user);
}
}
注意:在执行除查询外的所有操作时,需要提交事务,不然方法不能成功执行,所有这里才有session.commit()这一步。
在接口中添加deleteUser方法
/*
* 删除用户
* */
void deleteUser(int id);
在IUserDao.xml中配置,这里是根据用户id删除用户
只有一个参数的时候,参数的名字可以随便写,但是如果参数多于一个,那么必须严格按照数据库和实体类的命名写
与之前不同的是,这里传的参数不是User对象,是一个整数,所以不需要写实体类的全限定类名
<!-- 删除用户-->
<delete id="deleteUser" parameterType="Integer">
delete from user where id=#{uid};
</delete>
//删除用户
@Test
public void deleteUser(){
dao.deleteUser(50);
}
执行完此方法后,再去数据库查询,此条记录不存在,证明删除操作成功
在接口中添加修改方法
/*
* 更新用户
*
* */
void updateUser(User user);
到IUserDao.xml配置修改方法
<!-- 更新用户-->
<update id="updateUser" parameterType="com.itheima.domain.User" >
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{uid};
</update>
添加修改测试方法
//更新用户
@Test
public void updateUser(){
User user=new User();
user.setId(46);
user.setAddress("南京");
user.setSex("女");
user.setBirthday(new Date());
dao.updateUser(user);
}
执行完此方法后,再去数据库查询,若此条记录被修改,证明修改操作成功
接口中添加方法
//根据id查找用户
User findUserById(int id);
到IUserDao.xml配置
<!-- 根据id查询用户-->
<select id="findUserById" parameterType="Integer" resultType="com.itheima.domain.User">
select * from user where id=#{uid};
</select>
添加测试方法
//根据id查询用户
@Test
public void findUserById(){
User user=dao.findUserById(46);
System.out.println(user);
}
接口中添加方法,查询可能存在多条记录,所以返回值是List
//根据名字模糊查询用户
List<User> findUserByName(String username);
编辑配置文件
<!-- 根据名字模糊查询用户-->
<select id="findUserByName" parameterType="String" resultType="com.itheima.domain.User">
select * from user where username like #{username};
</select>
注意:虽然 IUserDao 中方法的返回值为 List,但是映射文件中 resultType写 User就行。因为如果有多条记录的话,Mybatis 会自动帮我们封装成一个 List 集合。
添加测试方法
//根据姓名模糊查询用户
@Test
public void findUserByName(){
List<User> list=dao.findUserByName("%王%");
for(User user:list)
System.out.println(user);
}
注意:由于映射文件中的 SQL 语句并没有对参数进行模糊查询处理,所以在调用方法的时候我们必须手动为查询的关键字进行%拼接
接口中添加方法
//查询记录条数
int countAll();
编辑配置文件
<!-- 查询记录条数-->
<select id="countAll" resultType="int">
select count(id) from user;
</select>
添加测试方法
//查询记录条数
@Test
public void countAll(){
System.out.println(dao.countAll());
}