mybatis的dao接口实现小结

来源:互联网 发布:淘宝能寄到国外吗 编辑:程序博客网 时间:2024/05/21 19:28

原始Dao开发方式

系统 框架中,dao层的代码是被业务层公用的。

理解步骤

1.      写xml文件;

2.      写dao接口

3.      写daoimpl数据库实现类


映射文件 user. xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEmapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mappernamespace="test">

<!-- 根据id获取用户信息 -->

    <selectid="findUserById"parameterType="int"resultType="cn.itcast.mybatis.po.User">

       select * from user where id = #{id}

    </select>

<!--添加用户 -->

    <insertid="insertUser"parameterType="cn.hpu.mybatis.po.User">

    <selectKeykeyProperty="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 UserDaoImplimplements UserDao {

   

    //注入SqlSessionFactory

    publicUserDaoImpl(SqlSessionFactory sqlSessionFactory){

       this.setSqlSessionFactory(sqlSessionFactory);

    }

   

    private SqlSessionFactorysqlSessionFactory;

    @Override

    public User getUserById(int id)throws Exception {

       SqlSession session = sqlSessionFactory.openSession();

       User user = null;

       try {

           //通过sqlsession调用selectOne方法获取一条结果集

           //参数1:指定定义的statementid,参数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,这里存在硬编码,不得于开发维护。

0 0
原创粉丝点击