mybatis与入门程序

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小结
#{}和 {}   #{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意 {}表示拼接符, v a l u e {}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)
${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名
parameterType和resultType
parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。
resultType指定输出结果的java类型(是单条记录的java类型)
selectOne和selectList
selectOne查询单个对象
selectList查询集合对象
这里写图片描述

over~~~

猜你喜欢

转载自blog.csdn.net/weixin_41653442/article/details/81739552