临时笔记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>