• 初始MyBatis


     为什么使用框架

    框架的优势如下:
    1.不用再考虑公共问题,框架已经帮我们做好了。
    2.可以专心用于业务逻辑,保证核心业务逻辑的开发质量。
    3.结构统一,便于学习和维护。
    4.框架中继承了前人的经验,可以帮助新手写出稳定、性能优良而且结构优美的高质量程序。

    什么是框架
    框架(Framework)是一个提供了可重用的公共结构的半成品。
    框架就是应用程序的“骨架”,开发者可以在这个骨架上加入自己的东西。

    2.MyBatis介绍及其环境搭建

    MyBatis前身是iBatis,本是Apache的一个开源的项目
    ORM框架
    实体类和SQL语句之间建立映射关系
    特点
    基于SQL语法,简单易学
    能了解底层封装过程
    SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
    方便程序代码调试

    什么是数据持久化
    数据持久化就是将内存中的数据模型转换为存储模型,已经将存储模型转换为内存中的数据模型的统
    称。

    什么是ORM
    ORM(Object/Relational Mapping)即对象/关系映射,是一种持久化技术。
    在对象模型和关系数据库模型之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作
    数据库表中的数据。
    MyBatis通过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间建立映射,是一种半
    自动化的ORM实现。

    MyBatis环境搭建

    1.下载jar包
    进入官方网站下载:mybatis.org 或者 https://github.com/mybatis/mybatis-3

    下载好的jar包解压如图所示

    lib目录中存放着编译依赖包,各依赖文件说明如下:

    2.部署jar文件到项目中
    3.创建MyBatis核心配置文件mybatis-config.xml
    MyBatis核心配置文件主要用于配置数据库连接和MyBatis运行时所需的各种特性,包含了设置和影响
    MyBatis行为的属性。
    在项目工程下创建“Source Folder”类型的resources目录,将配置文件放入,一般将配置文件命名
    为"mybatis-config.xml"
    mybatis-config.xml文件的几个常用元素的作用如下:

    1.configuration:配置文件的根元素节点
    2.properties:通过resource属性从外部指定properties属性文件
    (database.properties),database.properties属性文件描述数据库连接的相关配置,包括数据库驱动
    (jdbc.driver)、连接数据库的url(jdbc.url)、数据库用户名(jdbc.user)、数据库密码(jdbc.pwd),位置也
    在/resoureces目录下。
    3.settings:设置MyBatis运行中的一些行为,比如此处设置MyBatis的log日志实现为LOG4J,即使用
    log4j实现日志功能。
    4.environments:表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节
    点下可以配置多个environment子元素节点,但是必须指定其中一个默认运行环境(通过default指
    定)。
    5.environment:配置MyBatis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等相关信
    息。
    6.mappers:作用是告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射sql语句),
    整个项目中可以有1个或多个SQL映射文件
    7.mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resource属性的值表述了sql
    映射文件的路径(类资源路径)

    示例1:

    <?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>
    <!--引入database.properties文件-->
    <properties resource="database.properties"/>
    <!--配置log的实现为LOG4J-->
    <settings>
    <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--配置运行环境-->
    <environments default="development">
    <environment id="development">
    <!--配置事务管理,采用JDBC的事务管理-->
    <transactionManager type="JDBC"></transactionManager>
    <!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源-->
    <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.pwd}"/>
    </dataSource>
    </environment>
    </environments>
    <!--将mapper文件加入到配置文件中-->
    <mappers>
    <mapper resource="com/ssms/dao/user/UserMapper.xml"/>
    </mappers>
    </configuration>
    注意:mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么XML文件
    会报错。
    database.properties
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.user=root
    jdbc.pwd=1234
    jdbc.url=jdbc:mysql://localhost:3306/ssms?
    useUnicode=true&characterEncoding=utf-8&useSSL=false
    
    
    
    

    4.创建持久化类(POJO)和SQL映射文件
    POJO(Plain Ordinary Java Object),即普通Java对象,POJO类可以简单理解为符合JavaBean规范的
    实体类,它不需要继承和实现任何特殊的Java基类或者接口。

    创建用户表POJO类
    示例2:

    public class User {
    private Integer id; //id
    private String userCode; //用户编码
    private String userName; //用户名称
    private String userPassword; //用户密码
    private Integer gender; //性别
    private Date birthday; //出生日期
    private String phone; //电话
    private String address; //地址
    private Integer userRole; //用户角色
    private Integer createdBy; //创建者
    private Date creationDate; //创建时间
    private Integer modifyBy; //更新者
    private Date modifyDate; //更新时间
    //省略getter&setter方法
    }
    注意:在MyBatis中,不需要POJO类名与数据库表名一致,因为MyBaits是POJO与SQL语句之间的映
    射机制,一般情况下,保证POJO对象的属性与数据库表的字段名一致即可。
    示例3:
    <?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="com.ssms.dao.user.UserMapper">
    <!--查询用户表记录-->
    <select id="count" resultType="int">
    SELECT count(1) AS COUNT FROM USER
    </select>
    </mapper>

    经验:
    SQL映射文件一般都对应于相应的POJO,所以一般都是采用POJO的名称+Mapper的规则来进行命
    名,当然该Mapper文件属于DAO层的操作,应该放置在dao包下,并根据业务功能进行分包放置。
    上述配置文件中各元素的意义:
    mapper:映射文件的根元素节点,只有一个属性namespace
    namespace:用于区分不同的mapper,全局唯一
    select:表示查询语句,是MyBatis最常用的元素之一,常用属性如下:
    id属性:该命名空间下唯一标识符
    resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int类型

    5.创建测试类
    在工程中加入JUnit4,创建测试类(UserMapperTest.java)进行测试,代码如下:
    public class UserMapperTest {
    public static void main(String[] args) throws Exception {
    //1.读取全局配置文件:mybatis-config.xml
    String resource="mybatis-config.xml";
    //获取mybatis-config.xml文件的输入流
    InputStream is= Resources.getResourceAsStream(resource);
    //2.创建SqlSessionFactory对象
    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
    //创建SqlSession
    int count=0;
    SqlSession sqlSession=null;
    sqlSession=factory.openSession();
    count=sqlSession.selectOne("com.ssms.dao.user.UserMapper.count");
    sqlSession.close();
    System.out.println(count);
    }
    }

    3.MyBatis的基本要素——核心对象

    SqlSessionFactoryBuilder

    1.build()方法使用三种形式的配置信息,分别是InputStream(字节流)、Reader(字符流)、
    Configuration(类)
    2.SqlSessionFactoryBuilder最大特点是用过即丢
    SqlSessionFactory
    1.openSession()方法获取SqlSession实例,openSession()传入参数true表示关闭事务控制,自动提
    交,false开启事务控制机制。默认为true。
    2.SqlSessionFactory一旦创建,就会在整个应用运行过程中始终存在。
    MyBatisUtil.java 示例:

    public class MyBatisUtil {
    private static SqlSessionFactory factory;
    static {
    try {
    InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
    factory=new SqlSessionFactoryBuilder().build(is);
    }catch (IOException e){
    e.printStackTrace();
    }
    }
    public static SqlSession createSqlSession(){
    return factory.openSession(false);
    }
    public static void closeSqlSession(SqlSession sqlSession){
    if (null!=sqlSession){
    sqlSession.close();
        }
      }

    }

    SqlSession

    1.SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。
    2.SqlSession对应一次数据库会话,SqlSession不是线程安全的。
    3.SqlSession有两种使用方式
    第一种使用方式:
    1).先在Mapper文件中添加一个select节点

    <!--查询用户列表-->
    <select id="getUserList" resultType="com.ssms.pojo.User">
    SELECT * FROM USER
    </select>
    2).编写测试
    SqlSession sqlSession=null;
    List<User> userList=new ArrayList<User>();
    try{
    sqlSession= MyBatisUtil.createSqlSession();
    userList=sqlSession.selectList("com.ssms.dao.user.UserMapper.getUserList");
    }catch (Exception ex){
    ex.printStackTrace();
    }finally {
    MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (User user : userList) {
    System.out.println(user.getUserName());
    }

    第二种使用方式:

    基于上面的Mapper配置文件

    1).编写接口
    public interface UserMapper {
    /**
    * 获取用户列表
    * @return
    */
    List<User> getUserList();
    }
    2).编写测试
    SqlSession sqlSession=null;
    List<User> userList=new ArrayList<User>();
    try{
    sqlSession= MyBatisUtil.createSqlSession();
    userList=sqlSession.getMapper(UserMapper.class).getUserList();
    }catch (Exception ex){
    ex.printStackTrace();
    }finally {
    MyBatisUtil.closeSqlSession(sqlSession);
    }
    for (User user :
    userList) {
    System.out.println(user.getUserName());
    }
    注意推荐使用第二种方式

    4.MyBatis的基本要素——核心配置文件

    1.properties元素
    描述的都是外部化,可替代的属性
    1).通过外部文件获取属性值
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.user=root
    jdbc.pwd=1234
    jdbc.url=jdbc:mysql://localhost:3306/
    <!--引入database.properties文件-->
    <properties resource="database.properties"/>
    ……
    <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.pwd}"/>
    </dataSource>
    2).直接配置为xml,再使用这些属性值
    <properties>
    <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
    ……
    </properties>

    ……

    <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>

    <property name="username" value="${jdbc.user}"/>

    <property name="password" value="${jdbc.pwd}"/>
    </dataSource>

    注意:两种方式同时使用,外部的同名属性会覆盖propertie节点的值

    2.settings元素

    这个此处省略了

    3.typeAliases元素
    typeAliases元素的作用是配置类型别名
    示例:
    <typeAliases>
    <!--给实体类起别名-->
    <typeAlias type="com.ssms.pojo.User" alias="user"/>
    </typeAliases>
    自动扫描JavaBean
    示例:
    <typeAliases>
    <package name="com.ssms.pojo.User"/>
    </typeAliases>
    那么UserMapper.xml修改如下
    <select id="getUserList" resultType="User">
    SELECT * FROM USER
    </select>
    4.environments元素
    用于配置多套环境,如开发环境、测试环境、生产环境等,需要明确选择当前唯一一个运行环境
    示例:
    <!--配置运行环境-->
    <environments default="development">
    <environment id="development">
    <!--配置事务管理,采用JDBC的事务管理-->
    <transactionManager type="JDBC"></transactionManager>
    <!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源-->
    <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.pwd}"/>
    </dataSource>
    </environment>
    <environment id="test">
    ……
    </environment>
    </environments>
    5.mappers元素
    用来定义SQL的映射语句,告诉MyBatis去哪里找
    1).使用类资源路径获取资源
    <mappers>
    <mapper resource="com/ssms/dao/user/UserMapper.xml"/>
    </mappers>
    2).使用URL获取资源
    <mappers>
    <mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
    </mappers>
  • 相关阅读:
    常用并发类
    线程基本知识
    java多线程基础
    volatile原理小结
    condition学习小结
    阻塞队列、线程池、异步
    Synchronized原理
    wait 和notify
    【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序
    在Centos8上配置Minio服务使用TLS
  • 原文地址:https://www.cnblogs.com/Djkang/p/9626708.html
Copyright © 2020-2023  润新知