一、DBUtils框架
mybatis、Hibernate、mybatis-plus、mybatis-fast这些框架都是别人封装好的对数据库进行增删改查的框架。
DButils封装的BaseDao比我们自己封装的好。
使用需要导包:
1.导包dbutils和 mysql druid为什么不导BeanUtils和longging?使用的BaseDao用框架替换了,所以不用这俩包了2.把druid.properties配置文件复制进来,3.创建utils工具包,把JdbcUtils.class复制过来
1.1增删改
@Testpublic void testAdd() throws SQLException {//1.获取connection对象Connection connection = JdbcUtil.getConnection();//2.实例化DBUtils的核心类 QueryRunnerQueryRunner queryRunner = new QueryRunner();//3.调用增删改的方法// int update = queryRunner.update(connection, "insert into work(name,age,info) values ('博儿',23,'呼叫博儿')");// System.out.println(update);//用预处理的方法写 uptate(connection,sql,赋值1,赋值2,……) 预处理的有几个?就赋几次值String sql = "insert into work(name,age,info) values (?,?,?)";int update1 = queryRunner.update(connection, sql,"哈哈",100,"哈哈哈");String sql2 = "delete from work where id = ?";int update2 = queryRunner.update(connection, sql2,10);String sql3 = "update work set name=?,age=?,info=? where id = ?";int update3 = queryRunner.update(connection, sql3,"路飞",11,"海贼王",9);}
1.2查询一条信息1
@Testpublic void testSelect1() throws SQLException {Connection connection = JdbcUtil.getConnection();QueryRunner queryRunner = new QueryRunner();String sql = "select * from work where id = ?";//query(Connection c,String sql,Object parameter,ResultSrtHandler<T> rsh)Work work = queryRunner.query(connection, sql, 9, new ResultSetHandler<Work>() {Work work = null;@Overridepublic Work handle(ResultSet resultSet) throws SQLException {while (resultSet.next()){int id = resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");String info = resultSet.getString("info");work = new Work();work.setId(id);work.setName(name);work.setAge(age);work.setInfo(info);}return work;}});System.out.println(work);}
1.3查询一条信息2
//查询一条数据@Testpublic void testSelectOne() throws SQLException {Connection connection = JdbcUtil.getConnection();String sql = "select * from work where id = ?";Object[] objects = {2};QueryRunner queryRunner = new QueryRunner();Work work = queryRunner.query(connection, sql, objects, new BeanHandler<Work>(Work.class));System.out.println(work);}
1.4查询,返回List集合
//查询多条数据 返回值是list集合@Testpublic void testSelectAll() throws SQLException {Connection connection = JdbcUtil.getConnection();String sql = "select * from work";QueryRunner queryRunner = new QueryRunner();List<Work> list = queryRunner.query(connection, sql, new BeanListHandler<Work>(Work.class));for (Work w:list) {System.out.println(w);}}
1.5查询,返回Map集合
//查询多条数据 返回值是map集合@Testpublic void testMapAll() throws SQLException {Connection connection = JdbcUtil.getConnection();String sql = "select * from work";QueryRunner queryRunner = new QueryRunner();//new BeanMapHandler<Integer, Work>(Work.class,"id")//"id" id作为map集合中的键Map<Integer, Work> workMap = queryRunner.query(connection, sql, new BeanMapHandler<Integer, Work>(Work.class,"id"));// keySet() values() entrySet()Set<Map.Entry<Integer,Work>> set = workMap.entrySet();for (Map.Entry<Integer,Work> m: set) {System.out.println(m);}}
1.6查询,返回数组
//查询多条数据 返回值是数组集合@Testpublic void testShuzuAll() throws SQLException {Connection connection = JdbcUtil.getConnection();String sql = "select * from work";QueryRunner queryRunner = new QueryRunner();List<Object[]> list = queryRunner.query(connection, sql, new ArrayListHandler());//iter 快捷键 出foreachfor (Object[] objects : list) {System.out.println(Arrays.toString(objects));}}
二、回顾JDBC
2.1JDBC前置知识点
1.如何操作数据库
使用可视化工具获取小黑屏访问数据库,需要手动建立连接,输入用户名和密码,编写SQL语句,点击执行查看执行的结果(结果集或者受影响的行数)
2.什么是JDBC
JavaDatabase connectivity 使用java代码对数据库进行增删改查的
3.JDBC的核心
1.由数据库厂商提供驱动连接数据mysql-connector-java-5.1.x.jar 适用于数据库服务器的版本 5.X<br />mysql-connector-java-8.0.x.jar 适用于数据库服务器的版本 8.X2.JDBC的核心类的和接口java.sql.DriverManaver 管理数据库驱动的类<br />java.sql.Conection 代表数据库连接对象的,如果是null证明没有连接上数据库<br />java.sqlStatement 发送SQL语句到数据库的工具(搬运工)<br />java.sql.ResultlSet 保存SQL语句查询数据库数据的一个接口<br />java.sql.SQLException 处理SQL异常的一个类3.关于JDBC环境搭建1.新建项目2.在src下创建lib文件夹3.将mysql的驱动文件mysql-conector-java-5.1.47.jar复制到lib文件夹中4.选中jar包,右键 add as library
4.JDBC开发步骤
1.注册驱动Class.forName(“com.mysql.jdbc.Driver”);2.连接数据库url = jdbc:mysql:[//localhost](//localhost):3306/库名?useSSL=falseuser = rootpassword = 123456通过DriverManager.getConnection(url,user,password)3.获取发送SQL搬用工对象connection.createStatement();4.执行SQL语句DML:数据操作语言 增删改 ==》返回值int 受影响的行数DQL:数据查询语言 查询 ==》 返回值ResultSet结果集5.处理结果执行完SQL结果1.受影响的行数2.查询的结果集迭代 依次获取数据resultSet.next();指针,第一个在第一列前面resultSet.getXXX(字段名字);根据列名回去数据6.释放资源遵循掀开开后关原则
5.SQL注入
当用户在书写SQL语句的时候,删和改的时候,写了一个条件or 1=1 恒成立的条件,对数据库影响极大,这就是SQL注入如何预防SQL注入:使用预处理的搬运工对象 PreparedStatement,可以预编译,效率高,防止SQL注入
6.封装的思想
当再写获取连接对象的时候,和数据库里面增删改查的时候,发现重复代码比较多。在实际开发中可以通过调用工具类来实现功能并减少冗余的代码。实现类具有重复利用的价值JdbcUtil工具类:1.获取Connection对象2.关闭资源BaseDao工具类:1.update 增删改2.query 查询
7.连接池
JDBC每次连接数据库的时候,都要获取连接数据库的Connection对象,重新连接和重新关闭,极大的浪费资源和容易内存益出。德鲁伊druid的好处:1.亚秒级的查询2.实时数据的注入3.可扩展内存4.多环境部署5.有丰富的社区druid的使用1.在src下面书写druid.properties2.导包 druid.jar
8.事务的处理
1.开启事务 setAutocommit(false)2.事务提交的两种方式提交 commit回滚 rollback
9.Apache组织的框架DBUtils
也是做增删改查的,已经停止更新了。
