第⼗三章 从Javaweb原⽣jdbc到快速掌握新版MyBatis3.X

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 缺点:
  • 每次要加载驱动,连接信息是硬编码
  • sqljava代码耦合⼀起,改动不易
  • 参数设置缺少灵活性
  • 处理结果集麻烦,不能⾃动映射到实体类
  • 连接资源不能复⽤,资源浪费
什么是 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&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;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 &gt; #{price,jdbcType = INTEGER}
       and create_time &lt; #{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();
        }



            }

运行结果:

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值