在Mybatis开发中,使用到的是代理Dao的方式实现增删改查,这样就不需要在写Dao的实现类
但是Mybatis也支持写Dao实现类!即DaoImpl
直接上DaoImpl,之前的代码可以参考前面几篇文章。
DaoImpl类
package com.itheima.dao.impl;
import com.itheima.dao.IUserDao;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
/**
* Created by Administrator on 2019/10/15.
*/
public class UserDaoImpl implements IUserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
@Override
public List<User> findAll() {
// 1、根据factory获取Sqlsession对象
SqlSession sqlSession = factory.openSession();
// 2、调用SqlSession中的方法,实现查询列表
List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findAll");//参数就是能获取配置信息的key
for (User use : user) {
System.out.println(use);
}
// 3、释放资源
sqlSession.close();
return user;
}
@Override
public void saveUser(User user) {
SqlSession sqlSession = factory.openSession();
sqlSession.insert("com.itheima.dao.IUserDao.saveUser",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void updateUser(User user) {
SqlSession sqlSession = factory.openSession();
sqlSession.update("com.itheima.dao.IUserDao.updateUser",user);
sqlSession.commit();
sqlSession.close();
}
@Override
public void deleteUser(Integer userId) {
SqlSession sqlSession = factory.openSession();
sqlSession.update("com.itheima.dao.IUserDao.deleteUser",userId);
sqlSession.commit();
sqlSession.close();
}
@Override
public User findById(Integer userId) {
SqlSession sqlSession = factory.openSession();
User user = sqlSession.selectOne("com.itheima.dao.IUserDao.findById", userId);
sqlSession.commit();
sqlSession.close();
return user;
}
@Override
public List<User> findByName(String username) {
SqlSession sqlSession = factory.openSession();
// 2、调用SqlSession中的方法,实现查询列表
List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findByName",username);//参数就是能获取配置信息的key
// 3、释放资源
sqlSession.close();
return user;
}
@Override
public int findUserCount() {
SqlSession sqlSession = factory.openSession();
Integer count = sqlSession.selectOne("com.itheima.dao.IUserDao.findUserCount");
return count;
}
@Override
public List<User> findUserByVo(QueryVo vo) {
return null;
}
}
单元测试
package com.itheima.test;
import com.itheima.dao.IUserDao;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
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.Date;
import java.util.List;
/**
* 测试Mybatis的crud操作
*/
public class mybatis {
private InputStream in;
private IUserDao userDao;
@Before //用于在测试方法之前执行
public void init() throws Exception {
// 1、读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2、获取sqlSessionfactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3、使用工厂对象,创建dao对象
userDao = new UserDaoImpl(factory);
}
@After //用于在测试方法之后执行
public void destory() throws Exception {
in.close();
}
/**
* 测试查询所有
*/
@Test
public void findAll() {
// 5、执行查询所有方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
/**
* 测试保存操作
*/
@Test
public void testSave() {
User user = new User();
user.setUsername("张XX");
user.setAddress("北京 海淀区");
user.setSex("男");
user.setBirthday(new Date());
System.out.println("保存之前"+user);
userDao.saveUser(user);
System.out.println("保存之后"+user);
}
/**
* 测试更新操作
*/
@Test
public void testUpdate() {
User user = new User();
user.setId(52);
user.setUsername("张XXABC");
user.setAddress("北京 海淀区");
user.setSex("男");
user.setBirthday(new Date());
userDao.updateUser(user);
}
/**
* 测试删除操作
*/
@Test
public void testDelete() {
userDao.deleteUser(51);
}
/**
* 测试id查询一个用户
*/
@Test
public void testFindById() {
// 5、执行查询所有方法
User user = userDao.findById(48);
System.out.println(user.getId());
System.out.println(user.getAddress());
System.out.println(user.getBirthday());
System.out.println(user.getUsername());
}
/**
* 测试模糊查询
*/
@Test
public void testFindByName() {
// 5、执行查询所有方法
List<User> users = userDao.findByName("%王%");
for (User user : users){
System.out.println(user);
}
}
/**
* 查询用户总个数
*/
@Test
public void testFindUserCount(){
int count = userDao.findUserCount();
System.out.println(count);
}
@Test
public void testFindByQueryVo(){
QueryVo queryVo = new QueryVo();
User user = new User();
user.setUsername("%王%");
queryVo.setUser(user);
List<User> users = userDao.findUserByVo(queryVo);
for(User use :users){
System.out.println(use);
}
}
}