JDBC 方式
下面是一个简单的通过 JDBC 数据库访问案例。
public class JdbcTest { public static final String URL = "jdbc:mysql://127.0.0.1/summer_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"; public static final String USER = "root"; public static final String PASSWORD = "root2020"; public static void main(String[] args) throws Exception { //1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); //2. 获得数据库连接 Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); //3.操作数据库,实现增删改查 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM student"); //如果有数据,rs.next()返回true while(rs.next()){ System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age")); } } }
使用思考
通过 JDBC 操作数据库具备一下问题:
- 数据库连接,使用时就创建,不使用就释放,对数据库进行频繁连接开关和关闭,造成数据库资源浪费,影响数据库的性能 解决:使用数据库连接池管理数据库的连接
- sql语句使用硬编码在java程序中,修改sql语句,就需要重新编译java代码,不利于系统维护 解决:把sql语句放在xml配置文件中,修改sql语句也不需要重新编译java代码
- 向预编译语句PreparedStatement中设置参数,对占位符位置和设置参数值,硬编码,修改sql语句也不需要重新编译java代码 解决:把sql语句和占位符设置参数值放在xml配置文件中
- 从result中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码 解决:将查询的结果集,自动映射成 java对象
什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 结构
MyBatis 的使用
配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!-- 和Spring整合后environment配置都会被干掉 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,目前由mybatis来管理 --> <transactionManager type="JDBC"/> <!-- 数据库连接池,目前由mybatis来管理 --> <dataSource type="POOLED"><!--有关于mysql数据库的各种信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1/summer_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root2020"/> </dataSource> </environment> </environments> <mappers> <!--将操作配置文件User.xml系添加进mapper--> <mapper resource="com/summer/test/mybatis/mapper/OrderMapper.xml"/> </mappers> </configuration>
Mapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.summer.test.mybatis.OrderMapper"> <select id="selectOne" resultType="int"> select 1 </select> </mapper>
Mapper 接口
package com.summer.test.mybatis; public interface OrderMapper { Integer selectOne(); }
测试文件
package com.summer.test.mybatis; 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.IOException; public class MyBaitsTest { public static void main(String[] args) throws IOException { SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession session = sqlSessionFactory.openSession(); OrderMapper orderMapper = session.getMapper(OrderMapper.class); orderMapper.selectOne(); } }