封装持久层
一.原始dao方法
1.创建config代码文件夹
- 写入全局配置文件(SqlMapConfig.xml)
- 日志文件(log4j.properties)
- 映射文件(DeptMapper.xml)
2.准备javabean文件
3.编写dao层接口
public interface DeptDao {
//通过deptno查找dept部门信息
Dept findDeptById(int deptno) throws IOException;
//插入一条部门记录
void insertDept(Dept dept) throws IOException;
}
4.编写dao层实现类
public class DeptDaoImpl implements DeptDao {
// 注入sqlSessionFactory
private SqlSessionFactory sqlSessionFactory;
public DeptDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public Dept findDeptById(int deptno) throws IOException {
// 通过工厂创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过sqlSession操作数据库
Dept dept = sqlSession.selectOne("test.findDeptByid", 10);
System.out.println(dept);
// 释放资源
sqlSession.close();
return dept;
}
@Override
public void insertDept(Dept dept) throws IOException {
// 通过工厂创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过sqlSession操作数据库
sqlSession.insert("test.insertDept", dept);
// 提交事务,修改表数据时需要提交事务
sqlSession.commit();
// 关闭资源
sqlSession.close();
}
}
5.编写测试类
public class Test01 {
private SqlSessionFactory sqlSessionFactory;
@Before//junit注解,使该方法在test方法前执行
public void setup() throws IOException {
// 定义mybaties的配置文件路径
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybaties的配置文件流
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void selectTest() throws IOException {
// 创建dao对象
DeptDaoImpl dao = new DeptDaoImpl(sqlSessionFactory);
dao.findDeptById(10);
}
@Test
public void insertTest() throws IOException {
// 创建dao对象
DeptDaoImpl dao = new DeptDaoImpl(sqlSessionFactory);
Dept dept = new Dept();
dept.setDname("后勤保障");
dept.setLoc("大连");
dao.insertDept(dept);
}
}
二.mapper代理方式
1.创建xxxMapper.java接口
public interface DeptMapper {
//根据id查询部门信息
Dept findDeptById(int deptno);
//插入部门信息
void insertDept(Dept dept);
}
2.创建xxxMapper.xml映射文件
<!-- namespace值为xxxMapper接口全路径 -->
<mapper namespace="com.neuedu.mapper.DeptMapper">
<!-- id值为xxxMapper接口中的方法名须一致 -->
<select id="findDeptById" parameterType="int" resultType="com.neudeu.pojo.Dept">
select * from dept where deptno = #{deptno}
</select>
</mapper>