MyBatis学习笔记——05MyBatis开发原始dao
完整学习路线:https://blog.csdn.net/qq_40163148/article/details/89668242
今天我们讲mybatis开发原始的持久层(dao)
原始的dao由两部分组成接口和实现类
项目架构同样是我们上一节讲到的入门程序的架构
我们在com.lipengge.mybatis.dao里实现了dao的接口和实现类映射文件使用的是User.xml(入门程序的映射文件)
UserDao接口
package com.lipengge.mybatis.dao;
import java.util.List;
import com.lipengge.mybatis.bean.User;
public interface UserDao {
public User findUserById(int id) throws Exception;//根据id查找用户
public List<User> findUserByName(String name) throws Exception;//根据姓名模糊查询用户
public void insertUserById(User user) throws Exception;//插入用户
public void deleteUserById(int id) throws Exception;//根据id删除用户
}
UserDaoImpl
这里我们使用单例模式注入SqlSessionFactory(常用手法)
为什么不注入SqlSession因为它线程不安全
package com.lipengge.mybatis.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.lipengge.mybatis.bean.User;
public class UserDaoImpl implements UserDao{
private SqlSessionFactory sfb;
public UserDaoImpl(SqlSessionFactory sfb) {
this.sfb=sfb;
}
//根据id查找用户
@Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = sfb.openSession();
User selectOne = sqlSession.selectOne("test.findUserById",id);
sqlSession.close();
return selectOne;
}
@Override
//根据姓名模糊查询用户
public List<User> findUserByName(String name) throws Exception {
SqlSession sqlSession = sfb.openSession();
List<User> selectList = sqlSession.selectList("test.findUserByName",name);
sqlSession.close();
return selectList;
}
@Override
插入用户
public void insertUserById(User user) throws Exception {
SqlSession sqlSession = sfb.openSession();
sqlSession.insert("test.insertUserById", user);
sqlSession.commit();//提交
sqlSession.close();
}
@Override
///根据id删除用户
public void deleteUserById(int id) throws Exception {
SqlSession sqlSession = sfb.openSession();
sqlSession.delete("test.deleteUserById",id);
sqlSession.commit();
sqlSession.close();
}
}
测试类
package com.lipengge.mybatis.first;
import static org.junit.Assert.*;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.lipengge.mybatis.bean.User;
import com.lipengge.mybatis.dao.UserDaoImpl;
public class TestUserDaoImpl {
private SqlSessionFactory ssf;
@Before
//这里使用JUnit测试所以设置单例模式而是在测试之前生成SqlSessionFactory
public void setUp() throws Exception {
String resource="SqlMapConfig.xml";//全局配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
ssf=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() throws Exception {
UserDaoImpl udi=new UserDaoImpl(ssf);
System.out.println(udi.findUserById(6));
System.out.println(udi.findUserByName("振川"));
User user=new User();
user.setUser_name("小刘");
user.setUser_age(22);
user.setUser_sex("女");
udi.insertUserById(user);
System.out.println(user.getId());
udi.deleteUserById(20);
}
}