JDBC(Java Data Base Connection,java数据库连接)是一种用于执行 SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口, 使数据库开发人员能够编写数据库应用程序
优点:运行期:快捷、高效
缺点:编辑期:代码量大、繁琐异常处理、不支持数据库跨平台
jdbc核心api
1.DriverManager 连接数据库
2.Connection 连接数据库的抽象
3.Statment 执行SQL
4.ResultSet 数据结果集
DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
DBUtils三个核心功能介绍
1、QueryRunner中提供对sql语句操作的API
2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集
3、DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
ORM 对象关系映射
object java对象
relational 关系型数据
mapping 映射
Hibernate 是由 Gavin King 于 2001 年创建的开放源代码的对象关系 框架。它强大且高效的构建具有关系对象持久性和查询服务的 Java 应用程序。
Hibernate 将 Java 类映射到数据库表中,从 Java 数据类型中映射到 SQL 数据类型中,并把开发人员从 95% 的公共数据持续性编程工作中解放出 来。
Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基 于 O/R 映射机制和模式的那些对象。
- Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中,并
且不用编写任何代码。 - 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
- 如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
- 抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
- Hibernate 不需要应用程序服务器来操作。
- 操控你数据库中对象复杂的关联。
- 最小化与访问数据库的智能提取策略。
- 提供简单的数据询问。
Hibernate劣势
- hibernate的完全封装导致无法使用数据的一些功能。
- Hibernate的缓存问题。
- Hibernate对于代码的耦合度太高。
- Hibernate寻找bug困难。
- Hibernate批量数据操作需要大量的内存空间而且执行过程中需要的对象太多
JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选 用不同的模板方法.如果你的查询很简单,仅仅是传入相应SQL或者相关参数, 然后取得一个单一的结果,那么你可以选择如下一组便利的模板方法。
优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事 务
缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默 认没有缓存
2、什么是Mybatis?MyBatis 是一款优秀的持久层框架/半自动的ORM,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置 参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射 原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对 象)为数据库中的记录。
优点:
1、与JDBC相比,减少了50%的代码量
2、 最简单的持久化框架,简单易学
3、SQL代码从程序代码中彻底分离出来,可以重用
4、提供XML标签,支持编写动态SQL
5、提供映射标签,支持对象与数据库的ORM字段关系映射 支持缓存、连接池、数据库移植…
缺点:
1、SQL语句编写工作量大,熟练度要高
2、数据库移植性比较差,如果需要切换数据库的话,SQL语句会有很 大的差异
1、创建普通的maven项目
2、导入相关的依赖
pom.xml
1 25 4.0.0 6 7cn.tulingxueyuan 8mybatis_helloworld 91.0‐SNAPSHOT 10 1112 23 2413 17org.mybatis 14mybatis 153.5.4 1618 22mysql 19mysql‐connector‐java 205.1.47 21
3、创建对应的数据表
4、创建与表对应的实体类对象
emp.java
1 package cn.tulingxueyuan.pojo;
2
3
7 public class Emp {
8 private Integer id;
9 private String username;
10
11 public Integer getId() {
12 return id;
13 }
14
15 public void setId(Integer id) {
16 this.id = id;
17 }
18
19 public String getUsername() {
20 return username;
21 }
22
23 public void setUsername(String username) {
24 this.username = username;
25 }
26
27 @Override
28 public String toString() {
29 return "Emp{" +
30 "id=" + id +
31 ", username='" + username + ''' +
32 '}';
33 }
34 }
35
5、创建对应的Mapper接口
EmpMapper.java
1 package cn.tulingxueyuan.mapper;
2
3 import cn.tulingxueyuan.pojo.Emp;
4 import org.apache.ibatis.annotations.Select;
5
6
10 public interface EmpMapper {
11 // 根据id查询Emp实体
12 //@Select("select * from emp where id=#{id}")
13 Emp selectEmp(Integer id);
14
15 // 插入
16 Integer insertEmp(Emp emp);
17
18 // 更新
19 Integer updateEmp(Emp emp);
20
21 // 删除
22 Integer deleteEmp(Integer id);
23 }
24
6、编写配置文件
mybatisconfig.xml
1 2 56 7 178 169 10 1511 12 13 14 18 ‐‐> 19 2120
EmpMapper.xml
1 2 56 7 8
7、编写测试类
MyTest.java
1
2
18 public class MybatisTest {
19
20 SqlSessionFactory sqlSessionFactory;
21 @Before
22 public void before(){
23 // 从 XML 中构建 SqlSessionFactory
24 String resource = "mybatis.xml";
25 InputStream inputStream = null;
26 try {
27 inputStream = Resources.getResourceAsStream(resource);
28 } catch (IOException e) {
29 e.printStackTrace();
30 }
31 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
32 }
33
34
39 @Test
40 public void test01() {
41 try (SqlSession session = sqlSessionFactory.openSession()) {
42 Emp emp = (Emp) session.selectOne("cn.tulingxueyuan.pojo.EmpMapper.sele
ctEmp", 1);
43 System.out.println(emp);
44 }
45 }
46
47
61 @Test
62 public void test02(){
63 try (SqlSession session = sqlSessionFactory.openSession()) {
64 EmpMapper mapper = session.getMapper(EmpMapper.class);
65 Emp emp = mapper.selectEmp(1);
66 System.out.println(emp);
67 }
68 }
69
70
71
79 @Test
80 public void test03(){
81 try (SqlSession session = sqlSessionFactory.openSession()) {
82 EmpMapper mapper = session.getMapper(EmpMapper.class);
83 Emp emp = mapper.selectEmp(1);
84 System.out.println(emp);
85 }
86 }
87
88 }
89
该文章后续及配套资料+代码,关注我,免费领取



