一小时迅速入门Mybatis之Prepared Statement与符号的使用

2023-01-04 12:44:27 作者:admin

本文整理自网络,侵删。

目录
  • 一、用一用 PreparedStatement
  • 二、用一用 Statement
  • 三、Mybatis #{} ${} 的使用
  • 四、ResultMap ResultType的区别

引入Mysql的Jar包以及表结构前几篇已经有了这里就不赘述了

一、用一用 PreparedStatement

import java.math.BigDecimal;import java.sql.*;/** * 一个生活在互联网底层,做着增删改查的码农,不谙世事的造作 * @create 2021-08-25 21:26 */public class TestMain {    public static void main(String[] args) throws Exception {        Connection conn = null;        PreparedStatement stmt = null;        ResultSet result = null;        try {            // 1. 注册驱动            Class.forName("com.mysql.jdbc.Driver");            // 2. 打开连接 url 、 用户名、 密码            conn = DriverManager.getConnection(                    "jdbc:mysql://127.0.0.1:3306/test?useSSL=false",                    "root",                    "123456");            // 3. 创建Statenebt            stmt = conn.prepareStatement("select * from test where name = ?");            // 4. 设置参数 注意啦,参数下标是从1开始的 不是0哦            stmt.setString(1, "小强");            // 5. 执行查询            result = stmt.executeQuery();            // 6. 输出数据库获取的结果            while (result.next()){                // 根据列名称获取值                String name = result.getString("name");                BigDecimal salary = result.getBigDecimal("salary");                System.out.println(name+" 的工资是:"+salary);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            // 关闭资源            // 关闭资源            try{                if(result!=null) {                    result.close();                }            }catch(SQLException se2){                System.err.println("关闭result异常");            }            try{                if(stmt!=null) {                    stmt.close();                }            }catch(SQLException se2){                System.err.println("关闭stmt异常");            }            try{                if(conn!=null) {                    conn.close();                }            }catch(SQLException se){                System.err.println("关闭conn异常");            }        }    }}

二、用一用 Statement

import java.math.BigDecimal;import java.sql.*;/** * 一个生活在互联网底层,做着增删改查的码农,不谙世事的造作 */public class TestMain02 {    public static void main(String[] args) throws Exception {        Connection conn = null;        Statement stmt = null;        ResultSet result = null;        try {            // 1. 注册驱动            Class.forName("com.mysql.jdbc.Driver");            // 2. 打开连接 url 、 用户名、 密码            conn = DriverManager.getConnection(                    "jdbc:mysql://127.0.0.1:3306/test?useSSL=false",                    "root",                    "123456");            // 3. 创建Statenebt            stmt = conn.createStatement();            // 4. 执行查询            result = stmt.executeQuery("select * from test where name = '小强'");            // 5. 输出数据库获取的结果            while (result.next()){                // 根据列名称获取值                String name = result.getString("name");                BigDecimal salary = result.getBigDecimal("salary");                System.out.println(name+" 的工资是:"+salary);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            // 关闭资源            // 关闭资源            try{                if(result!=null) {                    result.close();                }            }catch(SQLException se2){                System.err.println("关闭result异常");            }            try{                if(stmt!=null) {                    stmt.close();                }            }catch(SQLException se2){                System.err.println("关闭stmt异常");            }            try{                if(conn!=null) {                    conn.close();                }            }catch(SQLException se){                System.err.println("关闭conn异常");            }        }    }}

三、Mybatis #{} ${} 的使用

#{}使用

// #{}  根据名称查询数据List<TestEntity> listByName01(String name);
<!--#{} 查询数据--><select id="listByName01" resultType="testentity">    select * from test where name = #{name}</select>
import dao.TestMapper;import entity.TestEntity;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;import java.util.List;/** * 一个生活在互联网底层,做着增删改查的码农,不谙世事的造作 */public class TestMain03 {    public static void main(String[] args) throws Exception {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        try (SqlSession session = sqlSessionFactory.openSession()) {            // 通过sesson获取Mapper 这个Mapper会编程Mybatis的代理Mapper            TestMapper mapper = session.getMapper(TestMapper.class);            // 1.#{}            List<TestEntity> res = mapper.listByName01("小强");            // 这个执行的sql : select * from test where name = '小强 '            System.out.println("第一次查询条数:"+res.size());            List<TestEntity> res02 = mapper.listByName01("小强  or 1=1");            // 这个执行的sql: select * from test where name = '小强  or 1=1'            System.out.println("第二次查询条数:"+res02.size());        }    }}

${}使用

// ${}  根据名称查询数据List<TestEntity> listByName02(@Param("name") String name);
<!--${} 查询数据--><select id="listByName02" resultType="testentity">    select * from test where name = ${name}</select>
import dao.TestMapper;import entity.TestEntity;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;import java.util.List;/** * 一个生活在互联网底层,做着增删改查的码农,不谙世事的造作 */public class TestMain04 {    public static void main(String[] args) throws Exception {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        try (SqlSession session = sqlSessionFactory.openSession()) {            // 通过sesson获取Mapper 这个Mapper会编程Mybatis的代理Mapper            TestMapper mapper = session.getMapper(TestMapper.class);            // 1.${} 这里还得自己加个单引号 要不然sql就不对了            List<TestEntity> res = mapper.listByName02("'小强'");            // 执行的sql: select * from test where name = '小强'            System.out.println("第一次:"+res.size());            List<TestEntity> res02 = mapper.listByName02("'小强 ' or 1=1 ");            // 执行的sql(可怕哦): select * from test where name = '小强 ' or 1=1            System.out.println("第二次:"+res02.size());        }    }}

#{} 使用的是PrepareStatment 用的是 ‘?' 占位符 不会被SQL注入 不管你输出什么都会给你用单引号包起来

阅读剩余部分

相关阅读 >>

hql和sql的区别是什么

利用navicat工具快速生成sql语句

在sql查询中group by的含义是什么

删除表字段的sql语句有哪些?

sql怎么删除某一行

插入sql语句怎么写

sql语句中含有乘号报错的处理办法

sql server是什么意思

ios sqlite对数据库的各种操作(日常整理全)

数据库操作中常用的sql命令

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



在线咨询 拨打电话