在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;}@Overridepublic List<User> findAll() {
// 1、根据factory获取Sqlsession对象SqlSession sqlSession = factory.openSession();
// 2、调用SqlSession中的方法,实现查询列表List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findAll");//参数就是能获取配置信息的keyfor (User use : user) {System.out.println(use);}
// 3、释放资源sqlSession.close();return user;}@Overridepublic void saveUser(User user) {SqlSession sqlSession = factory.openSession();sqlSession.insert("com.itheima.dao.IUserDao.saveUser",user);sqlSession.commit();sqlSession.close();}@Overridepublic void updateUser(User user) {SqlSession sqlSession = factory.openSession();sqlSession.update("com.itheima.dao.IUserDao.updateUser",user);sqlSession.commit();sqlSession.close();}@Overridepublic void deleteUser(Integer userId) {SqlSession sqlSession = factory.openSession();sqlSession.update("com.itheima.dao.IUserDao.deleteUser",userId);sqlSession.commit();sqlSession.close();}@Overridepublic User findById(Integer userId) {SqlSession sqlSession = factory.openSession();User user = sqlSession.selectOne("com.itheima.dao.IUserDao.findById", userId);sqlSession.commit();sqlSession.close();return user;}@Overridepublic 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;}@Overridepublic int findUserCount() {SqlSession sqlSession = factory.openSession();Integer count = sqlSession.selectOne("com.itheima.dao.IUserDao.findUserCount");return count;}@Overridepublic 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、获取sqlSessionfactorySqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);// 3、使用工厂对象,创建dao对象userDao = new UserDaoImpl(factory);}@After //用于在测试方法之后执行public void destory() throws Exception {in.close();}/*** 测试查询所有*/@Testpublic void findAll() {// 5、执行查询所有方法List<User> users = userDao.findAll();for (User user : users) {System.out.println(user);}}/*** 测试保存操作*/@Testpublic 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);}/*** 测试更新操作*/@Testpublic void testUpdate() {User user = new User();user.setId(52);user.setUsername("张XXABC");user.setAddress("北京 海淀区");user.setSex("男");user.setBirthday(new Date());userDao.updateUser(user);}/*** 测试删除操作*/@Testpublic void testDelete() {userDao.deleteUser(51);}/*** 测试id查询一个用户*/@Testpublic 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());}/*** 测试模糊查询*/@Testpublic void testFindByName() {// 5、执行查询所有方法List<User> users = userDao.findByName("%王%");for (User user : users){System.out.println(user);}}/*** 查询用户总个数*/@Testpublic void testFindUserCount(){int count = userDao.findUserCount();System.out.println(count);}@Testpublic 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);}}
}