您当前的位置: 首页 >  mybatis

杨林伟

暂无认证

  • 2浏览

    0关注

    3337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

23MyBatis - 原始Dao开发方法

杨林伟 发布时间:2019-04-03 14:43:25 ,浏览量:2

MyBatis原始Dao开发方法

原始Dao开发方法需要程序员编写Dao接口和Dao实现类。

映射文件

编写映射文件如下:(也可以使用入门程序完成的映射文件)







	
	
		select * from user where id = #{id}
	

	
	
		select * from user where username like '%${value}%'
	

	
	
		
			SELECT LAST_INSERT_ID()
		

		insert into user(username,birthday,sex,address)
		values(#{username},#{birthday},#{sex},#{address})

	


Dao接口

先进行DAO的接口开发,编码如下:

public interface UserDao {
    /**
     * 根据id查询用户
     *
     * @param id
     * @return
     */
    User queryUserById(int id);

    /**
     * 根据用户名模糊查询用户
     *
     * @param username
     * @return
     */
    List queryUserByUsername(String username);

    /**
     * 保存用户
     *
     * @param user
     */
    void saveUser(User user);
}
Dao实现类

编写的Dao实现类如下

public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        super();
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public User queryUserById(int id) {
        // 创建SqlSession
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        // 执行查询逻辑
        User user = sqlSession.selectOne("queryUserById", id);
        // 释放资源
        sqlSession.close();

        return user;
    }

    @Override
    public List queryUserByUsername(String username) {
        // 创建SqlSession
        SqlSession sqlSession = this.sqlSessionFactory.openSession();

        // 执行查询逻辑
        List list = sqlSession.selectList("queryUserByUsername", username);
        // 释放资源
        sqlSession.close();
        return list;
    }

    @Override
    public void saveUser(User user) {
        // 创建SqlSession
        SqlSession sqlSession = this.sqlSessionFactory.openSession();

        // 执行保存逻辑
        sqlSession.insert("saveUser", user);
        // 提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }
}
Dao测试

创建一个JUnit的测试类,对UserDao进行测试,测试代码如下:

public class UserDaoTest {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws Exception {
        // 创建SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建SqlsessionFactory
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }

    @Test
    public void testQueryUserById() {
        // 创建DAO
        UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
        // 执行查询
        User user = userDao.queryUserById(1);
        System.out.println(user);
    }

    @Test
    public void testQueryUserByUsername() {
        // 创建DAO

        UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
        // 执行查询
        List list = userDao.queryUserByUsername("张");
        for (User user : list) {
            System.out.println(user);
        }
    }

    @Test
    public void testSaveUser() {
        // 创建DAO
        UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);

        // 创建保存对象
        User user = new User();
        user.setUsername("刘备");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setAddress("蜀国");
        // 执行保存
        userDao.saveUser(user);

        System.out.println(user);
    }
}
问题

原始Dao开发中存在以下问题:

  1. Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法
  2. 调用SqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不便于开发维护。
关注
打赏
1662376985
查看更多评论
立即登录/注册

微信扫码登录

0.1216s