Mybatis入门
程序员文章站
2022-03-10 17:18:26
...
jdbc原生态分析
原生态的jdbc代码问题总结:
1、在创建连接时,存在硬编码(1-2步) 解决办法:配置文件(全局配置文件)
2、在执行statement时存在硬编(3-7步) 解决办法:配置文件(映射文件)
3、频繁的开启和关闭数据库连接,会造成数据库性能下降(8步) 解决办法:数据库连接池(全局配置文件)
public static void main(String[] args) {//原生态的jdbc代码
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//1、加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2、通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
//3、定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
//4、获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
//6、向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//7、遍历查询结果集
while(resultSet.next()){
User user
System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//8、释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
mybatis框架原理
- 开发过程中通常对黄色区域进行编码。
- 面试时注意表达出executor执行器的作用。
配置文件中的一些问题
.#{}和${}的区别
- .#{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意。
- 后者表示拼接符模糊查询时常用,${}接收简单类型的参数时,里面的名称必须是value。
- ${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号,而.#{}会有)
- ${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名。
缓存
Mybatis的缓存,包括一级缓存和二级缓存一级缓存指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,同一级缓存。一级缓存是默认使用的。二级缓存需要手动开启。但是Mybatis本身是一个持久层框架,它不是专门的缓存框架,所以它对缓存的实现不够好,不能支持分布式。因此使用redis集群对缓存数据进行集中管理,使用分布式缓存框架redis、memcached、ehcache。
****
Mybatis提供来一个****工具,通过****,可以帮助程序员根据单表来生成po类、mapper映射文件、mapper接口。注意只是单表。