文章目录
一. 前言:SqlSession使用范围:
- SqlSessionFactoryBuilder:工具类
- SqlSessionFactory:单例模式
- SqlSession:
- 线程不安全:在SqlSesion实现类中除了有操作数据库的方法,还有数据域属性
- 最佳应用场合:方法,定义成局部变量
二. 实现步骤:
思路:
编写dao接口和dao实现类;
向dao实现类中注入SqlSessionFactory;
在方法体内通过SqlSessionFactory创建SqlSession
1.po类创建:
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
}
2.xml文件Sql语句编写:
<mapper namespace="test">
<select id="findById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
select * from user where id=#{id}
</select>
</mapper>
3.SqlMapConfig.xml配置
<mapper resource="Sqlmap/User.xml"/> </mappers>
4.创建dao接口:
public interface UserDao {
public User findUserById (int id);
}
5.dao接口实现类:
public class UserDaoImpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory)
{
this.sqlSessionFactory=sqlSessionFactory;
}
@Override
public User findUserById(int id) {
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findById", 1);
return user;
}
}
6.测试代码:
public class UserDaoImplTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setup() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws IOException {
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
User user = userDao.findUserById(1);
System.out.print(user);
}
}
三. 缺点总结:
- dao接口实现类存在大量模板方法;
- dao接口实现类statement的id硬编码;
- sqlsession方法使用泛型,无法校验传入参数类型