Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { //1. 加載驅動 Class.forName("com.mysql.jdbc.Driver"); //2. 獲取鏈接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC", "root", "123456"); //3. 建立PreparedStatement 【設置參數】 ps = conn.prepareStatement("select * from user"); //4. 執行sql ==》executeXxx() rs = ps.executeQuery(); //5. 遍歷結果集 while(rs.next()) { System.out.println(rs.getString(2)); // 數據庫第2列數據 } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { //6. 關閉鏈接 try { rs.close(); ps.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
問題1:頻繁的創建鏈接釋放鏈接,形成資源的浪費。java
數據庫鏈接池
,用來解決創建與釋放鏈接的問題。 可是數據庫鏈接池有dbcp鏈接池,c3p0鏈接池,druid鏈接池,不可能爲每個鏈接池實現一種鏈接方式。因此使用DataSource實現隔離解耦
。mysql
public static ComboPooledDataSource dataSource = new ComboPooledDataSource(); // 經過C3p0 配置數據源 DataSource,之後想要使用其它的鏈接池,只需改動如何獲取DataSource,不須要改動鏈接。 public static void dataSource(){ try { dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC"); dataSource.setUser("root"); dataSource.setPassword("123456"); dataSource.setInitialPoolSize(3); dataSource.setMaxPoolSize(10); dataSource.setMinPoolSize(3); dataSource.setAcquireIncrement(3); } catch (PropertyVetoException e) { e.printStackTrace(); } } // 經過數據源,獲取鏈接 Connection public static Connection conn() { Connection conn = null; dataSource(); try { conn = dataSource.getConnection(); //Unknown system variable 'tx_isolation' : 可能緣由是數據庫版本過高,mysql-connector-java版本過低 //conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ); } catch (SQLException e) { e.printStackTrace(); } return conn; }
在Mybatis中,配置druid數據源面試
<environments default="development-mysql"> <environment > <transactionManager type="JDBC"/> <dataSource type="com.config.DruidDataSourceFactory"> <property name="url" value="${jdbc.jdbcUrl}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
關鍵技術點SqlSession:執行Sqlsql
String resource = "conf/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //2. SqlSessionFactoryBuilder SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //1. 構建SqlSessionFactory SqlSessionFactory factory = builder.build(inputStream); //3. 構建session SqlSession session = factory.openSession(); /** 第一種方式:之前原生的方式 */ //Student s = session.selectOne("com.shang.mybatis.mapper.StudentMapper.queryStudentById", 1); //System.out.println(s); /** 第二種方式:演變出來的*/ StudentMapper mapper = session.getMapper(StudentMapper.class); // mapperProxyFactory ==> mapper的代理對象 Student s = mapper.queryStudentById(1); System.out.println(s);
5、最後一直想整理出一份完美的面試寶典,可是時間上一直騰不開,這套一千多道面試題寶典,結合今年金三銀四各類大廠面試題,以及 GitHub 上 star 數超 30K+ 的文檔整理出來的,我上傳之後,毫無心外的短短半個小時點贊量就達到了 13k,說實話仍是有點難以想象的。數據庫
內容涵蓋:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技術棧(485頁)設計模式
內容涵蓋:Java基礎、JVM、高併發、多線程、分佈式、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、數據庫、雲計算等session
因爲篇幅限制,詳解資料太全面,細節內容太多,因此只把部分知識點截圖出來粗略的介紹,每一個小節點裏面都有更細化的內容!mybatis
須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式!多線程