zoukankan      html  css  js  c++  java
  • 07_MyBatis原始的Dao编写方法

    【UserDao.java 】

    package com.Higgin.Mybatis.dao;
    
    import com.Higgin.Mybatis.po.User;
    
    public interface UserDao {
        //根据id查询用户信息
        public User findUserById(int id) throws Exception;
        
        //添加用户信息
        public void insertUser(User user) throws Exception;
        
        //删除用户信息
        public void deleteUser(int id) throws Exception;
    }

    【UserDaoImpl.java】

    package com.Higgin.Mybatis.dao;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    
    import com.Higgin.Mybatis.po.User;
    
    public class UserDaoImpl implements UserDao{
        //需要向Dao实现类中注入SqlSessionFactory
        private SqlSessionFactory sqlSessionFactory;
        //这里通过构造方法注入
        public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
            this.sqlSessionFactory=sqlSessionFactory;
        }
        
        @Override
        public User findUserById(int id) throws Exception {
            SqlSession sqlSession=sqlSessionFactory.openSession();
            User user=sqlSession.selectOne("test.findUserById",id);
            //补充一个释放资源的代码
            sqlSession.close();
            return user;
        }
    
        @Override
        public void insertUser(User user) throws Exception {
            SqlSession sqlSession=sqlSessionFactory.openSession();
            sqlSession.insert("test.insertUser",user);
            //提交事务,必须!
            sqlSession.commit();
            //补充一个释放资源的代码
            sqlSession.close();
        }
    
        @Override
        public void deleteUser(int id) throws Exception {
            SqlSession sqlSession=sqlSessionFactory.openSession();
            sqlSession.delete("test.deleteUser",id);
            //提交事务
            sqlSession.commit();
            //补充一个释放资源的代码
            sqlSession.close();
        }
    }

    【UserDaoTest.java】

    【建立Junit测试方法流程】

    1.新建一个将要测试类,右击,选择Junit Test Case(最后会生成一个专门的测试类,不需自己新建一个test类)

    2.如下图选择,点击Next

    3.选出需要测试的方法

    4.会自动生成以下模板代码

    代码如下

    package com.Higgin.Mybatis.dao.test;
    
    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.Higgin.Mybatis.dao.UserDao;
    import com.Higgin.Mybatis.dao.UserDaoImpl;
    import com.Higgin.Mybatis.po.User;
    
    public class UserDaoTest{
        
        private SqlSessionFactory sqlSessionFactory; 
        
        //此方法在执行testFindUserById() 之前执行
        @Before
        public void setUp() throws Exception {
            //创建sqlSessionfactory
            //MyBatis配置文件
            String resource="SqlMapConfig.xml";
            //得到配置文件流
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //创建会话工厂,传入MyBatis的配置文件信息  
         //这里千万别写成SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        //不然会NullPointerException报错
    sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { //创建UserDao的对象 UserDao userDao =new UserDaoImpl(sqlSessionFactory); //调用UserDao的方法 User user =userDao.findUserById(4); System.out.println(user.toString()); } }

    【运行结果】

     【原始Dao方法的问题总结】

    1.dao接口实现类方法中存在大量的模板方法,应该设法将这些模板的代码提取出来,减少工作量。

    2.调用sqlSession方法时,将statement的id硬编码了

    3.调用sqlSession方法是传入的变量,由于sqlSession方法使用泛型,及时变量传入错误,在编译阶段也不会 报错,不利于开发。

  • 相关阅读:
    Silverlight入门:第四部分 数据绑定
    [Silverlight入门系列]使用MVVM模式(6):使用Behavior
    Silverlight入门:第二部分 定义界面布局和导航
    [Silverlight入门系列]使用MVVM模式(2):集合Model /ObservableCollection/ICollectionView
    建立可扩展的silverlight应用框架 step5:整理Module
    Silverlight入门:第六部分 美化用户界面的样式与模板
    [Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现
    Silverlight WCF RIA服务(五)使用SL商业应用模板
    Silverlight WCF RIA服务(四)如何添加和移除RIA Services Link
    Asymptote 学习记录(3) 画赵爽弦图练习
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5699938.html
Copyright © 2011-2022 走看看