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);
一直想整理出一份完美的面试宝典,可是时间上一直腾不开,这套一千多道面试题宝典,结合今年金三银四各类大厂面试题,以及 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
须要的小伙伴,能够一键三连,点击这里获取免费领取方式!多线程