JDBC存在问题
1、频繁的创建,打开,连接,关闭数据库,太耗资源。(连接池解决)
2、Sql语句存在硬编码,不利于维护
3、Sql参数设置硬编码,不利于维护
4、结果集获取,遍历复杂。
Mybadis的背景
ibatis前身,现在用Github管理代码。持久层开源框架。Github是目前全球最大的开源代码托管所,有空丢个hellword上去。目前国内主要是用Mybatis和Hibernate框架,Hibernate门槛高,入门难,特别是表的关系映射R/M设计,mybatis入门简单,sql容易优化,灵活方便。
创建一个Mybatis工程
1、创建一个普通的java Project。
2、导入jar包,包括mysql的驱动包(或者Oracle的),还有去官网下载的mybatis的jar包和依赖包。
3、创建mybatis的核心配置文件SqlMapConfig.xml文件,mybatis也没有自己的sql输出,所以也是依赖log4j。创建log4j.properties文件。
4、创建java bean ,再创建对应的数据库表。比如我创建一个user表。
5、然后创建user对应的usermapper.xml文件,将mapper文件映射到SqlMapConfig.xml文件中。
<!--namespace表示一个类的名字,因为有很多类,每个类都有增删改查,用来隔离sql。-->
<!-- id:statementId
resultType:查询结果集的数据类型
parameterType:查询的入参
-->
<select id="getUserById" parameterType="int" resultType="com.itheima.mybatis.pojo.User" >
SELECT * FROM USER WHERE id = #{id1}
</select>
6、编写Mybatis的操作java代码;
@Test
public void testGetUserByid() throws IOException {
// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
// 查找配置文件创建输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 加载配置文件,创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sfb.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询,参数一:要查询的statementId ,参数二:sql语句入参
User user = sqlSession.selectOne("user.getUserById", 1);
// 输出查询结果
System.out.println(user);
// 释放资源
sqlSession.close();
}
和hibernate兄弟非常类似
7、抽取SqlSessionFactoryUtils工具类,共享SqlSessionFactory创建过程
/**
* SqlSessionFactory工具类
*
* @author Steven
*
*/
public class SqlSessionFactoryUtils {
/**
* 单例SqlSessionFactory
*/
private static SqlSessionFactory sqlSessionFactory;
static {
// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
try {
// 查找配置文件创建输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 加载配置文件,创建SqlSessionFactory对象
sqlSessionFactory = sfb.build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取单例SqlSessionFactory
* @return
*/
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
以上是查询,添加修改删除同理。