第1集 回顾javaweb通过原⽣jdbc访问数据库
简介:回顾基础使⽤原⽣jdbc访问数据库
注意:本地安装
Myql
务必使⽤
5.5
版本
原⽣jdbc访问数据库步骤
- 加载JDBC驱动程序
- 创建数据库的连接
- 创建preparedStatement
- 执⾏SQL语句
- 处理结果集
- 关闭JDBC对象资源
数据库中Video结构:
Springboot
项⽬测试原⽣
JDBC
连接
加载依赖包:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
Main实操代码:
public class NativeJDBC {
public static void main(String[] args) {
//使用JDBC驱动器
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mybatistest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false";
String name = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,name,password);
//获取对象
Statement statement = connection.createStatement();
//执行
ResultSet resultSet = statement.executeQuery("select * from video");
//循环查询结果
while (resultSet.next()){
System.out.println("视频标题:"+resultSet.getString("title"));
}
connection.close();
resultSet.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第2集 原⽣JDBC访问数据库的缺点和ORM框架介绍
简介:原⽣
jdbc
访问数据库缺点和
ORM
框架介绍
原⽣
jdbc
缺点:
- 每次要加载驱动,连接信息是硬编码
- sql和java代码耦合⼀起,改动不易
- 参数设置缺少灵活性
- 处理结果集麻烦,不能⾃动映射到实体类
- 连接资源不能复⽤,资源浪费
什么是
ORM
框架
- 对数据库的表和POJO(Plain Ordinary Java Object)Java对象的做映射的框架
市⾯上的ORM框架
hibernate (ssh)
- ⽐较笨重,sql调优麻烦
- 推荐指数:不推荐
JPA - Spring Data JPA
- Java Persistence API, 轻量级,部分中⼩项⽬适合
- 推荐指数:次之
mybatis:
- 半⾃动化(半ORM框架),便于写sql,轻量级,在阿⾥等⼤⼚⼴泛使⽤
- 推荐指数:推荐
第3集 新版ORM框架Mybatis3.X基础知识
- 什么是 MyBatis ?
Apahce的⼀个开源项⽬
⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射
免除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作
通过简单的
XML 或注解
来配置和映射
Java
对象 到 数据库中的记录
官⽅地址:
https://mybatis.org/mybatis-3/
新建⼀个测试的
maven
项⽬:
- 依赖地址 https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.4
核⼼流程: https://mybatis.org/mybatis-3/zh/getting-started.html
每个基于
MyBatis
的应⽤都是以⼀个
SqlSessionFactory
的实例为核⼼
SqlSessionFactory
的实例可以通过
SqlSessionFactoryBuilder
获得
SqlSessionFactoryBuilder
可以从
XML
配置⽂件或⼀个预先配置的
Confifiguration
实例来构
建出
SqlSessionFactory
实例
⼯⼚设计模式⾥⾯ 需要获取
SqlSession
,⾥⾯提供了在数据库执⾏
SQL
命令所需的所有⽅
法
第4集 新版Mybatis3.X快速⼊⻔实战《上》
简介:快速掌握新版
Mybaits3.X
实战,编写
mybatis-confififg.xml
和
mapper.xml
- 添加maven依赖
<dependencies><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><!-- 使⽤ JDBC 链接 mysql 的驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency></dependencies>
配置MybatisConfigure.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"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/mybatistest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="Xj/com/MybatisDemo/Mapper/VideoMapper.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.dtd是mybatis的规范化文件-->
<!--namespace是唯一的,每一个表创建一个mapper-->
<mapper namespace="Xj.com.MybatisDemo.dao.VideoMapper">
<!--id对应mapper接口中的方法-->
<select id="queryVideoList" resultType="Xj.com.MybatisDemo.domain.Video">
select * from video
</select>
</mapper>
注意如果你的mapper.xml不在resource目录下的话,需要在pom.xml文件中添加resource扫描文件的插件 :
<!--扫描mapper.xml文件--> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build>
mapper接口:
package Xj.com.MybatisDemo.dao;
import Xj.com.MybatisDemo.domain.Video;
import java.util.List;
public interface VideoMapper {
/**
* 查询所有的视频
*/
List<Video> queryVideoList();
}
测试类:
@Test
public void queryVideoListTest(){ //测试查询所有的视频
//使用Resources读取配置文件
InputStream is = null;
try {
//读取resources目录下的文件
is = Resources.getResourceAsStream("MybatisConfigure.xml");
} catch (IOException e) {
e.printStackTrace();
}
if (is != null){
//构建Session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);
List<Video> videos = mapper.queryVideoList();
Iterator<Video> iterator = videos.iterator();
while (iterator.hasNext()){
Video video = iterator.next();
System.out.println(video.toString());
}
sqlSession.close();
}
}
第5集 新版Mybatis3.X快速⼊⻔实战《下》
简介:快速掌握新版Mybaits3.X实战,SqlSession代码实战
- 获取参数中的值
- 注意 :取java对象的某个值,属性名⼤⼩写要⼀致
#{value} : 推荐使⽤ , 是 java 的名称 //添加到SQL语句时会自动加入引号${value} : 不推荐使⽤,存在 sql 注⼊⻛险 //不会加入引号,推荐要引用表名,或者列名时使用。
- 补⻬ Video 对象字段
- 编写代码 获取 SqlSession,以xml⽅式读取数据库
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.dtd是mybatis的规范化文件-->
<!--namespace是唯一的,每一个表创建一个mapper-->
<mapper namespace="Xj.com.MybatisDemo.dao.VideoMapper">
<select id="queryVideoList" resultType="Xj.com.MybatisDemo.domain.Video">
select * from video
</select>
<!--查询根据id来查询视频-->
<select id="queryVideoById" resultType="Video" parameterType="Integer">
select * from video
where id = #{id,jdbcType =INTEGER }
</select>
</mapper>
mapper接口:
Video queryVideoById(int id);
@Test
public void queryVideoByIdTest(){
//使用Resources读取配置文件
InputStream is = null;
try {
//读取resources目录下的文件
is = Resources.getResourceAsStream("MybatisConfigure.xml");
} catch (IOException e) {
e.printStackTrace();
}
if (is != null) {
//构建Session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);
Video video = mapper.queryVideoById(34);
System.out.println(video.toString());
sqlSession.close();
}
执行结果:
第六 用Map和List参数
List案例:
mapper.xml文件:
<select id="queryVideoContainId" resultType="Video" parameterType="java.util.List">
select * from video
where id in
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item,jdbcType=INTEGER}
</foreach>
</select>
mapper接口:
//查询包含arrays的所有id
List<Video> queryVideoContainId(List<Integer> arrays);
@Test
public void ListTest(){
ArrayList<Integer> arrayStr = new ArrayList<Integer>();
//查询包含数据以内的id
arrayStr.add(22); //数据库中没有22
arrayStr.add(44);
arrayStr.add(33);
arrayStr.add(55); //数据库中没有55
try {
//1、读取mybatis配置文件
InputStream is = Resources.getResourceAsStream("MybatisConfigure.xml");
//2、使用工厂模式创建SqlSession 使用build方法
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.打开SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.使用反射获得Mapper接口对象
VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);
//5.执行方法
List<Video> videos = mapper.queryVideoContainId(arrayStr);
//输出结果
System.out.println(videos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果:
Map案例:
mapper.xml文件:
<select id="queryVideoByPriceAndCreateTime" resultType="Video" parameterType="java.util.HashMap">
select * from video
where price > #{price,jdbcType = INTEGER}
and create_time < #{CreateTime,jdbcType =TIME}
</select>
mapper接口:
//查询price>10000 时间小于2019-08-16
List<Video> queryVideoByPriceAndCreateTime(Map<String,String> Map);
测试类:
@Test
public void MapTest(){
Map<String, String> Map = new HashMap<String, String>();
//使用map来判断价格大于10000 时间<2019-8-16 00:00:00
Map.put("price","10000");
Map.put("CreateTime","2019-8-16 00:00:00");
try {
//1、读取mybatis配置文件
InputStream is = Resources.getResourceAsStream("MybatisConfigure.xml");
//2、使用工厂模式创建SqlSession 使用build方法
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.打开SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.使用反射获得Mapper接口对象
VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);
//5.执行方法
List<Video> videos = mapper.queryVideoByPriceAndCreateTime(Map);
//输出结果
System.out.println("使用Map输出结果:"+videos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果: