临时笔记2
数据库设计
-
有哪些表
-
表里有哪些字段
-
表和表之间是什么关系
JDBC
(全称:JAVA DATABASE CONNECTIVITY
)
本质是官方定义的一套操作所有关系型数据库的规则,即接口。每个数据库厂商去实现这一接口,写出实现类,即驱动,集合称数据库驱动JAR
包。
事务的四大特征:A
原子性:是操作数据的最小单位
C
一致性:事务提交前后数据保持一致。
I
隔离性:不同的事务操作同一个数据时的隔离
D
持久性:事务提交后的数据将永久保存
JDBC
快速入門
public static void main(String[] args) throws Exception {// 注冊驅動Class.forName("com.mysql.jdbc.Driver");// 獲取鏈接String url = "jdbc:mysql://127.0.0.1:3306/mydb2";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);// 定義sqlString sql = "select eid,ename,manager_id from t_sanguo";Statement stmt = conn.createStatement();ResultSet resultSet = stmt.executeQuery(sql);// 處理結果集ResultSetMetaData metaData = resultSet.getMetaData();int columnCount = metaData.getColumnCount();while (resultSet.next()){for(int i=1;i<=columnCount;i++){System.out.print(resultSet.getObject(i)+"\t");}System.out.println();}// 釋放資源 resultSet.close();stmt.close();conn.close();}
釋放資源順序:越先獲得,越先釋放。
API
詳解
DriverManager:connection:
createstatement
preparedstatement
Druid
// 数据库连接池 是一个容器,是一个集合,申请连接资源,
// 1,导入jar包druid-1.1.12.jar
// 2,定义配置文件
// 3,加载配置文件
// 4,获取数据库连接池对象
// 5,获取连接
useSSL=false
配置在getconnection
後可以禁止安全連接。因爲安全連接配置很麻煩,而且速度下降2成左右
注意:preparedstatement
需要开启使用,才能使用预编译功能。
alt
+鼠标左键,整列修正,还有替换
MAVEN
是专门用于管理和构建JAVA
项目的工具
包括:
- 提供了一套标准的项目结构
- 提供了一套标准化的构建流程
- 提供了一套依赖管理机制(导入第三方资源)
依赖管理
如果在本地仓库有,就在pom.xml
中按alt+insert
,选择Dependency
,搜索对应坐标即可。
<!--MyBatis是一个简化JDBC的持久层框架
框架:是一个半成品软件,即模板。
JDBC的缺点
1,硬编码:既有一些易变动的字符串。
解决方案:写在配置文件中
2,操作繁琐:即处理结果集是重复对结果赋值
解决方案:使其自动完成-->
MyBatis
快速入门
Mapper
代理开发
MyBatis
核心配置文件
核心配置原则
configuration
配置
properties
属性
settings
设置
typeAliases
类型别名
typeHandlers
类型处理器
objectFactory
对象工厂
plugins
插件
environments
环境配置
envrionment
环境变量transactionManger
事务管理器dataSource
数据源
databaseIdProvider
数据库厂商标识
mappers
映射器
如果Mapper
接口名称和SQL
映射文件名称相同,并在同一目录下,则可以使用package
简化SQL
映射文件的加载
配置文件完成增删改查
在mapper
查询中,如果数据库的字段名称和实体类的属性名,不一致,则封装不上,列如:company_id
,companyId
解决方案:
- 起别名:给字段名称在查询句中起别名
- 缺点:每次查询都要定义一次别名
sql
片段:是mapper
标签- 缺点:不灵活
<sql id="brand_column">pid,pname,price,category_id as categoryId</sql><select id="selectAll" resultType="Brand">select <include refid="brand_column"></include>from product;</select>
-
resultMap
:是Mapper
标签<!--id:完成主键字段的映射result:完成一般字段的映射--><resultMap id="brandResultMap" type="brand"><result column="category_id" property="categoryId"/></resultMap><select id="selectAll" resultMap="brandResultMap">select *from product;</select>
查询详情:
<!--查询详情--><!--参数占位符:#{}:替换成?,防止SQL注入${}: 直接拼SQL,有SQL注入的危险使用时机:参数传递 #{}参数类型:parameterType="int" 可以不加特殊字符的处理:转义字符:< <CDATA区:--><select id="selectByPid" resultMap="brandResultMap">select * from product where pid = #{pid};</select>
注解完成增删改查
动态SQL
<!--添加slf4j日志api -->
<dependcy>
<groupId></groupId><artifactId></artifactId><version></version>
</dependcy>
<!--添加logback-classic依赖 -->
<dependcy>
<groupId></groupId><artifactId></artifactId><version></version>
</dependcy>
<!--添加logback-core依赖 -->
<dependcy>
<groupId></groupId><artifactId></artifactId><version></version>
</dependcy>