mybatis入门学习记录(一)
过硬的技术本领,可以给我们保驾护航,飞得更高。今天开始呢、我们就一起来探讨使用mybatis的好处。
首先我们一起来先看看原生的JDBC对于数据库的操作,然后总结其中的利弊,为学习mybatis奠定基础。
1、环境准备:统一使用JDK1.7版本,开发工具Myeclipse,数据库使用的是mysql。
2、数据库准备,创建一个test数据库,然后执行数据脚本,脚本如下:
创建一个user表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT '用户名称', `birthday` date DEFAULT NULL COMMENT '生日', `sex` char(1) DEFAULT NULL COMMENT '性别', `address` varchar(256) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
初始化数据
INSERT INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) VALUES (1,'王五',NULL,'2',NULL), (10,'张三','2014-07-10','1','北京市'), (16,'张小明',NULL,'1','河南郑州'), (22,'陈小明',NULL,'1','河南郑州'), (24,'张三丰',NULL,'1','河南郑州'), (25,'陈小明',NULL,'1','河南郑州'), (26,'王五',NULL,NULL,NULL);
3、创建工程,引入jdbc驱动包,编写程序代码,工程结构如下:
4、编程程序代码类 Mybatis01
package cn.ycy.mybatis; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Mybatis01 { 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://127.0.0.1:3306/test?characterEncoding=utf-8", "root", "123456"); // 3、定义sql语句 ?代表占位符 String sql = "select * from user where username = ?"; /** * 4、获取预处理Statement(预处理大致理解:preparedStatement向数据库发送sql语句,数据库需要对sql语句进行编译,然后进行执行 * 讲sql编译后存放于缓存中,如果下次还需进行同样的查询,直接从缓存中获取数据,提高数据库执行的效率 */ preparedStatement = connection.prepareStatement(sql); // 5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值 preparedStatement.setString(1, "张三丰"); // 6、向数据库发出sql执行查询,查询出结果集 resultSet = preparedStatement.executeQuery(); // 7、遍历查询结果集 while (resultSet.next()) { System.out.println("获取的用户ID:"+resultSet.getString("id")+",获取的用户地址称为:" +resultSet.getString("address")); } // 8、释放资源 closeFolw(connection,preparedStatement,resultSet); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void closeFolw(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){ 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(); } } } }
5、测试结果如下图
6、对于原生jdbc操作数据库的简要分析
6.1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
设想:使用数据库连接池管理数据库连接。
6.2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
6.3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
6.4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
人要耐得住寂寞,才能守得住繁华。人生最痛苦的就是拿不起放不下,不属于自己的快乐,及时放手也许是一种解脱,生活中没有谁对谁错,只有适不适合。当发现很多已经改变,更要面对的是事实。