1.什么是Mybatis
MyBatis是持久层框架,它支持SQL。避免了几乎所有的JDBC代码和手动设置参数,简化了开发。MyBatis可以用XML文件、注解来进行配置。
2.JDBC的执行流程
1.加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver"); //反射
2.建立连接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称","用户名称","密码");
//例如:用户名称 root 密码123456
3.发送SQL语句(对数据库发出请求)
String sql="select id,username,pwd from t_user where id>?";
PrepareStatement ps=conn.prepareStatement(sql);
ps.setObject(1, 2); //第一个"问号",传入2. -->把id大于2的记录都取出来
rs=ps.executeQuery();
4.返回查询结果并打印
ResultSet rs=ps.executeQuery(); //执行查询请求,并返回"结果集"
while(rs.next()) {//rs.next()指向第一条
//传入的参数是列索引-->数据库中的第1列,第2列,第3列
//System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getString(3));
System.out.println(rs.getSInt("id")+"---"+rs.getString("username")+"-"+rs.getString("pwd")
}
5.关闭连接
if(rs!=null){ //RsultSet rs
rs.close();
}
if(ps!=null){ //PreparedStatement ps
ps.close();
}
if(conn!=null){ //connection conn
conn.close();
}
3.JDBC开发存在的问题
1.连接时需要频繁的连接,释放数据库连接对象,十分繁琐
2.sql语句是写在java中,耦合性太大
3.使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,不便于维护
故mybatis的优点:
1.可以配置数据库连接池,使用连接池管理数据库
2.sql语句与java分开,解耦
3.MyBatis根据ORM,自动将java对象映射到数据库数据
4.ORM
对象关系映射,即将关系型数据库映射到java的pojo类
5.mybatis的运行原理
1.编写mybatis的配置文件,里面是mybatis的一些配置信息,如数据库的url,账号密码,连接池等
2.编写mapper.xml的映射文件,在里面编写sql语句,也可以使用注解
3.创建SqlSessionFactory
4.通过SqlSessionFactory创建sqlSession
5.通过SqlSession中的getMapper方法,加载mapper接口,执行数据库操作,在执行数据库的操作中,还要提到Executor执行器,它会根据SqlSession传递的参数动态地生成需要执行的SQL语句
6.sqlsession.commit提交事务,close关闭
6.#{}与${}的区别
#{}是一个占位符,本质上是使用了preparstatement进行了预编译,在预编译时会把参数部分用一个占位符 ? 代替,这样就有效防止了sql注入的问题
{}
将传入的数据直接显示生成在sql中,接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击。