您的位置:首页 > 其它

MyBatis(5)MyBatis DAO接口开发

2015-11-05 15:54 627 查看

SqlSessionFactory, SqlSession范围和生命周期

《MyBatis(1)框架原理》 中提到, SqlSessionFactory的作用是加载MyBatis的配置文件并创建SqlSession,而SqlSession的作用则是操作数据库并返回相应的结果。因此:

* SqlSessionFactory

SqlSessionFactory由SqlSessionFactoryBuilder加载配置文件创建。一旦被创建就应该在应用的运行期间一直存在,不需要重复加载配置文件来重新创建它。因此,其生命周期为从应用开始直至应用停止。

* SqlSession

SqlSession的实例在MyBatis中不是线程安全的,因此在每一次请求时,都需要新建一个SqlSession来响应请求。其生命周期为方法范围内。但是在每一次请求结束后,都需要关闭此SqlSession。

DAO接口开发

以下程序是在《 MyBatis(4)MyBatis入门程序 》 的基础上修改而来的。如果你没有从前面博客看过来,可以去《 MyBatis(4)MyBatis入门程序 》 中下载代码然后对照修改即可。

需求分析

对数据库中的用户表进行按ID查询、按用户名模糊查询、插入新用户、按ID删除用户、更新指定用户信息。

需求设计

《 MyBatis(4)MyBatis入门程序 》 中,我们已经完成了以上需求的简单设计。在此,直接设计DAO接口以及实现DAO接口。

DAO接口

public interface UserDao {
public List<UserPojo> selectUser () throws Exception;

public UserPojo selectUserByID (int id) throws Exception;

public List<UserPojo> selectUserByName (String name) throws Exception;

public int insertUser (UserPojo user) throws Exception;

public void delUserByID (int id) throws Exception;

public void updateUser (UserPojo user) throws Exception;
}


DAO接口实现

1、注入SqlSessionFactory

public class UserDaoImpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;

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


2、根据ID查询用户

@Override
public UserPojo selectUserByID(int id) throws Exception {
//创建SqlSession
SqlSession sqlSession = null;

try {
sqlSession = sqlSessionFactory.openSession();

//通过sqlSession操作数据库
return sqlSession.selectOne("mybatisDemo1.selectUserByID", id);
} finally {
if (null != sqlSession) {
//释放资源
sqlSession.close();
}
}
}


3、根据用户名模糊查找

@Override
public List<UserPojo> selectUserByName(String name) throws Exception {
//创建SqlSession
SqlSession sqlSession = null;

try {
sqlSession = sqlSessionFactory.openSession();

//通过sqlSession操作数据库
return sqlSession.selectList("mybatisDemo1.selectUserByName", name);
} finally {
if (null != sqlSession) {
//释放资源
sqlSession.close();
}
}
}


4、新增加用户

@Override
public int insertUser(UserPojo user) throws Exception {
//创建SqlSession
SqlSession sqlSession = null;

try {
sqlSession = sqlSessionFactory.openSession();
//通过sqlSession操作数据库
sqlSession.insert("mybatisDemo1.insertUser", user);

sqlSession.commit();

return user.getId();
} finally {
if (null != sqlSession) {
//释放资源
sqlSession.close();
}
}
}


5、按ID删除用户

@Override
public void delUserByID(int id) throws Exception {
//创建SqlSession
SqlSession sqlSession = null;

try {
sqlSession = sqlSessionFactory.openSession();

//通过sqlSession操作数据库
sqlSession.delete("mybatisDemo1.delUserByID", id);

sqlSession.commit();
} finally {
if (null != sqlSession) {
//释放资源
sqlSession.close();
}
}
}


6、更新指定用户信息

@Override
public void updateUser(UserPojo user) throws Exception {
//创建SqlSession
SqlSession sqlSession = null;

try {
sqlSession = sqlSessionFactory.openSession();
sqlSession.update("mybatisDemo1.updateUser", user);

sqlSession.commit();
} finally {
if (null != sqlSession) {
//释放资源
sqlSession.close();
}
}
}


测试

见代码(代码地址在最下面)

DAO接口开发总结

1、在每一个需求设计的过程中,可以看到有很多的模板代码。如:

sqlSession = sqlSessionFactory.openSession();
sqlSession.commit();

if (null != sqlSession) {
//释放资源
sqlSession.close();
}


2、在SqlSession调用各个方法操作数据库时,由于MyBatis是采用泛型的设计,在传入参数时,如果类型与SQL映射语句中的参数类型不一致,在编译阶段也不会有提示错误,一定要等到运行阶段。

代码

1、git@code.csdn.net:xl890727/mybatisdemo.git

2、https://code.csdn.net/xl890727/mybatisdemo.git

中得dao分支
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: