一、接口加实现类
public class UserDaoImpl implements IUserDao {
@Override
public User findUserById(int id) {
//创建SqlSession
SqlSession sqlSession = MybatisUtil.getSqlSession();
User user = sqlSession.selectOne("test.findUserById", id);
//关闭资源
sqlSession.close();
return user;
}
@Override
public List<User> findUserByName(String name) {
//创建SqlSession
SqlSession sqlSession = MybatisUtil.getSqlSession();
List<User> list = sqlSession.selectList("test.findUserByName2", name);
//关闭资源
sqlSession.close();
return list;
}
@Override
public void insertUser(User user) {
//创建SqlSession
SqlSession sqlSession = MybatisUtil.getSqlSession();
sqlSession.insert("test.insertUser2",user);
sqlSession.commit(); //手动提交事务,什么时候开启的?
//关闭资源
sqlSession.close();
System.out.println(user.getUid()); //查看刚生成的记录的主键
}
}
写一个工具类产生sqlSession对象
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
String resource = "sqlMapConfig.xml"; //全局配置文件的路径
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
throw new ExceptionInInitializerError("初始化错误");
}
}
public static SqlSession getSqlSession(){
//SqlSession,它内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部。
return sqlSessionFactory.openSession();
}
}
测试代码
public class UserDaoImplTest {
private IUserDao userDao = new UserDaoImpl();
@Test
public void testFindUserById() {
User user = userDao.findUserById(2);
System.out.println(user);
}
@Test
public void testFindUserByName() {
List<User> list = userDao.findUserByName("jiang");
for(User u:list){
System.out.println(u);
}
}
网友评论