JAVA数据库(JDBC/Mybatis)学习笔记

1. JDBC

1.1 操作流程

  1. 注册数据库
  2. 获取连接
  3. 获取数据库操作对象
  4. 执行语句
  5. 处理结果集
  6. 释放资源

1.2 DAO

DAO(Date Access Object)是用于对数据库进行操作的对象

具体流程

  1. 实现一个基础的统一BaseDAO的类,在类中定义增删改查的方法,update/delete/select等;
  2. 针对各个数据库表的不同针对性的定义CustomerDAO接口,在接口中定义一系列针对该数据库表的操作接口方法;
  3. 实现一个CustomerDAO接口的类CustomerDAOImpl,该类继承自BaseDAO,具体的类实现为:
class CustomerDAOImpl extends BaseDAO implements CustomerDAO{
	// 对CustomerDAO接口的实现
	@Override
	....
}
  1. 在对数据库进行操作时,实例化CustomerDAOImpl,使用其中覆写的方法完成业务逻辑。

2. MyBatis

2.1 环境搭建

  1. 创建数据库表
  2. maven项目配置pom.xml文件,加入MyBatis/MySQL等依赖
  3. 创建实体类entity,定义实体类属性,属性名和数据库表列名一致
  4. 创建DAO接口,定义操作数据库的方法
  5. 创建mapper.xml文件,将数据库操作的sql语句写入文件中,建议sql语句与java代码分开
  6. 创建MyBatis的主配置文件(xml),通常放置于resources目录下,定义创建连接实例的数据源对象并指定其他mapper文件的位置
  7. 测试代码

2.2 文件配置

2.2.1 xxxDao.xml(sql语句配置文件/mapper文件)

<?xml version="1.0" encoding="UTF-8" ?>
<!--通用部分,"http://mybatis.org/dtd/mybatis-3-mapper.dtd"是约束文件,
	包含了文件的限定标签和属性,以及标签出现顺序-->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace通常是Dao接口的全限定类名-->  
<mapper namespace="org.mybatis.example.BlogMapper">
<!--
	id:要执行的sql语句的唯一标识,是一个自定义字符串,
	推荐使用dao接口中的方法名称
-->
<!--
	resultType:告诉MyBatis执行sql语句完成后,把数据赋值给哪个类型的对象
	通常使用Java对象的全限定名称
-->
<!--
	#{id}是一个占位符,可以在执行sqlSession查询的时候进行替换,用于输入
-->
  <select id="selectBlog" resultType="com.xxx.xxx.Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

2.2.2 核心配置文件

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 XML 配置文件的详细内容,这里先给出一个简单的示例:

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <!--配置数据源,创建Connection对象-->
      <dataSource type="POOLED">
      	<!--驱动内容-->
        <property name="driver" value="${driver}"/>
        <!--数据库连接信息-->
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <!--指定其他mapper文件的位置,找到其中定义的sql语句-->
  <mappers>
  	  <!--
  	  使用mapper的resource属性来指定mapper文件的路径
  	  这个路径是从类路径的根目录开始的,也即target/classes
  	  一个mapper resource指定一个mapper文件
  	  -->
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

2.2.3 测试

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

// 1. 定义MyBatis主配置文件的位置
String resource = "org/mybatis/example/mybatis-config.xml";
// 2. 读取主配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 3. 创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 4. 获取SqlSession对象
SqlSession session = sqlSessionFactory.openSession()
// 5. 指定要执行的sql语句标识(id)
// sql的标识=namespace + "." + 标签的id属性值
String sqlId = "org.mybatis.example.BlogMapper" + "." + "selectBlog";
// 6. 通过SqlSession的方法来执行SQL语句
Blog blog = (Blog)session.selectOne(sqlId);
// 7. 关闭SqlSession对象
session.close();
// 上面的6和7两步可以写在一个try块中
/*try (SqlSession session = sqlSessionFactory.openSession()) {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}*/

注意:如果在运行时出现找不到xxxDao.xml文件的错误,可能是因为对应的mapper文件没有拷贝到相应的target/classes目录下的对应路径中,这个时候需要在pom.xml文件中配置资源插件,来对src/main/java目录中的xml文件经行处理在这里插入图片描述

2.2.4 sql插入语句流程示例

  1. 编写mapper文件中的插入语句
<?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="org.mybatis.example.StudentDao">
 <insert id="insertStudent">
   insert into student values(#{id}, #{name}, #{age})
 </insert>
</mapper>
  1. 在逻辑代码中编写插入语句
// sql语句
String sqlId = "org.mybatis.example.StudentDao" + "." + "insertStudent";

// 插入的实体类
Student student = new Student();
student.setId(1);
student.setName(Tom);
student.setAge(23);

// mybatis会自动解析student类中的数据并去赋值,根据的是getXXX()方法来获取对应属性
int res = session.insert(sqlId, student);
// 提交事务
session.commit();

3. JDK动态代理

3.1 什么是代理

代理也即中介,例如现实生活中的代理商、代理服务器以及一些留学中介机构都是代理的体现

代理也有一些特点:

  1. 代理和被代理的主体的目标是一致的,比如代理商和厂家都是为了卖东西;
  2. 通常,代理商被称作代理,厂家被称作目标;
  3. 代理需要收取一定的报酬
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值