原始Dao开发方式
理解步骤
1. 写xml文件;
2. 写dao接口
3. 写daoimpl数据库实现类
映射文件 user. xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<!-- 根据id获取用户信息 -->
<select id="findUserById" parameterType="int"resultType="cn.itcast.mybatis.po.User">
select * from user where id = #{id}
</select>
<!-- 添加用户 -->
<insert id="insertUser"parameterType="cn.hpu.mybatis.po.User">
<selectKey keyProperty="id"order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
Dao接口
Public interface UserDao {
public User getUserById(int id) throws Exception;
public void insertUser(User user) throws Exception;
}
Dao实现类
Public class UserDaoImpl implements UserDao {
//注入SqlSessionFactory
publicUserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.setSqlSessionFactory(sqlSessionFactory);
}
private SqlSessionFactory sqlSessionFactory;
@Override
public User getUserById(int id) throws Exception {
SqlSession session = sqlSessionFactory.openSession();
User user = null;
try {
//通过sqlsession调用selectOne方法获取一条结果集
//参数1:指定定义的statement的id,参数2:指定向statement中传递的参数
user = session.selectOne("test.findUserById", 1);
System.out.println(user);
} finally{
session.close();
}
return user;
}
@Override
Public void insertUser(User user) throws Exception {
SqlSession sqlSession =sqlSessionFactory.openSession();
try {
sqlSession.insert("insertUser", user);
sqlSession.commit();
} finally{
session.close();
}
}
}
测试类
*
* @author 杨 2015 7 21
*
*/
public class UserDaoImplTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception{
// TODO Auto-generated method stub
String resource="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
//创建会话工厂 传入mybatis的配置文件信息
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
}
@Test
public void testFindUserById() throws Exception{
UserDao userDao=new UserDaoImpl(sqlSessionFactory);
//userDao.deleteUser(28);
User user=userDao.findUserById(30);
System.out.println(user);
}
}
问题
原始Dao开发中存在以下问题:
u Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法
u 调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不得于开发维护。