mybatis的介绍
mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。
Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。
Mybatis会将输入参数、输出结果进行映射。
1.分析jdbc的问题
1.1原生态的jdbc代码
public static void main(String[] args) {
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();
}
}
}
}
2.2问题总结
1、在创建连接时,存在硬编码
配置文件(全局配置文件)
2、在执行statement时存在硬编码
配置文件(映射文件)
3、频繁的开启和关闭数据库连接,会造成数据库性能下降。
数据库连接池(全局配置文件)
3入门程序
3.1需求
对订单商品案例中的用户表进行增删改查操作
1、根据用户ID查询用户信息
2、根据用户名称模糊查询用户列表
3、添加用户
4、删除用户(练习)
5、修改用户(练习)
3.2环境准备
Jdk:1.7
Ide:eclipse indigo
Mybatis:3.2.7
数据库:MySQL 5X
3.2.1下载mybatis
mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases
3.2.2数据库脚本初始化
3.2.2.1数据库脚本
1、执行sql_table.sql脚本,创建数据库表;
2、执行sql_data.sql初始化测试数据。
3.3工程搭建
Mybatis的核心包和依赖包
MySQl的驱动包
Junit(非必须)
3.4代码实现
3.4.1创建po类
3.4.2创建全局配置文件
在config目录下,创建SqlMapConfig.xml文件,该名称不是固定不变的。
3.4.3需求开发
3.4.3.1根据用户ID查询用户信息
3.4.3.1.1映射文件
在config目录下,创建User.xml(这种命名规范是由ibatis遗留下来)
3.4.3.1.2在全局配置文件中加载映射文件
3.4.3.1.3测试代码
3.4.3.2根据用户名称模糊查询用户列表
3.4.3.2.1映射文件
3.4.3.2.2测试代码
3.4.3.3添加用户
3.4.3.3.1映射文件
3.4.3.3.2测试代码
3.4.3.3.3主键返回之自增主键
3.4.3.3.4主键返回值UUID
UUID函数是mysql的函数
3.4.3.3.5主键返回值序列
序列也就是sequence,它是Oracle的主键生成策略
3.4.4小结
#{}和
{}表示拼接符,
{}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)
${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名
parameterType和resultType
parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。
resultType指定输出结果的java类型(是单条记录的java类型)
selectOne和selectList
selectOne查询单个对象
selectList查询集合对象
over~~~