IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Mybatis学习(1) -> 正文阅读

[开发工具]Mybatis学习(1)

MyBatis介绍:

在往常写后台数据库代码的时候,总是要写大量的代码,而且这些代码单调枯燥,且占用大量的开发时间,因此出现了一个ORM思想:

ORM(对象-关系映射):完成对象数据到关系型数据映射机制称为对象-关系映射。

Mybaits是一个半ORM框架,当然也是一个持久层框架。

它的出现,使得开发工作量变小了,可以将精力集中在业务逻辑的处理上。代码精简易读。

MyBatis最核心的功能:输入映射和输出映射。

Mybatis的特点:

  1. sql语句与代码分离,存放在xml配置文件中。
    1. 优点:解除sql语句和程序代码的耦合,便于维护。
    2. 缺点:降低了代码的可读性,不利于调试。
  2. 查询的结果集与java对象自动映射
    1. 优点:在保证名称相同的情况下,配置好映射关系即可自动映射;不配置映射关系。通过配置列名=字段名也可以完成自动映射。
    2. 缺点:对开发人员写的sql语句依赖性很强。
  3. 需编写原生sql语句
    1. 优点:接近jdbc,比较灵活
    2. 缺点:对sql语句有一定的依赖性,而且数据库移植比较麻烦。

Mybatis依赖:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

例子:

在resources 文件夹中创建 SqlMapConfig.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">
        <!-- 可以配置多个数据源环境,默认使用default中的值 -->
        <environment id="development">
            <!-- 使用jdbc的事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 配置数据源,并使用自带数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/test?ctestharacterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <!-- 配置映射文件,可配置多个 -->
    <mappers>
        <mapper resource="com/losoft/po/Emp.xml" />
    </mappers>
</configuration>
  1. transactionManager标签的type属性有两种取值:
    1. JDBC:全部使用jdbc的事务管理
    2. MANAGED:不使用事务管理,也从不提交
  1. dataSource标签的type属性有三种取值:
    1. POOLED:使用Mybatis自带的数据库连接池
    2. UNPOOLED:不使用任何数据库连接池
    3. JNDI:jndi形式使用数据库连接

创建 Emp.java类

package com.losoft.po;
public class Emp {
    private Integer empno;
    private String ename;
    private String job;
    private String hiredate;
    private Double sal;
    private Integer deptno;
    @Override
    public String toString() {
        return empno+"\t"+ename+"\t"+job+"\t"+hiredate+"\t"+sal+"\t"+deptno;
    }
    //get/set方法...
}

注意:po类属性名必须与数据库表的字段名一致。

在 po 类所在包下,创建相同名称的映射文件:Emp.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 namespace="emp">
    <select id="getEmpById" parameterType="int" resultType="com.losoft.po.Emp">
        select * from emp where empno = #{empno}
    </select>
</mapper>

mapper标签:映射文件的根标签。 mapper标签namespace属性:命名空间,对sql进行分类管理,可防止id重复

select标签:表示查询。 select标签id属性:此属性要唯一。这个id可称为statement的id。 select标签parameterType属性:sql参数的类型。 select标签resultType属性:sql语句执行后返回的类型。

sql语句:? {}:表示sql参数,一个占位符

当parameterType属性为对象类型时:#{} 中的参数名为对象的属性名。 当parameterType属性为单个值时,参数名可以任意。

测试:

package com.losoft;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.losoft.po.Emp;
public class Test {
    public static void main(String[] args) {
        try {
            //读取配置文件,获得配置文件信息
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            //通过配置信息创建SqlSessionFactory
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(input);
            //通过SqlSessionFactory打开数据库会话
            SqlSession sqlSession = ssf.openSession();
            //通过SqlSession的selectOne(返回一行记录时使用)方法执行sql语句
            Emp emp = sqlSession.selectOne("emp.getEmpById",7521);
            System.out.println(emp);
            //关闭数据库会话
            sqlSession.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Mybatis的核心接口和类:

SqlSessionFactoryBuilder()、SqlSessionFactory()、SqlSession()

  1. SqlSessionFactoryBuilder负责构建SqlSessionFactory,并且提供了多个build()方法的重载。也就是说:此对象可以从xml配置文件,或从Configuration对象来构建SqlSessionFactory。
  2. SqlSessionFactory就是创建SqlSession实例的工厂。通过openSession方法来获取SqlSession对象。而且,SqlSessionFactory一旦被创建,那么在整个应用程序期间都存在。
  3. SqlSession是一个面向程序员的接口,它提供了面向数据库执行sql命令所需的所有方法。SqlSession对应一次数据库会话,它是线程不安全的。

使用log4j输出日志

Mybatis默认使用log4j输出日志

添加log4j依赖

<!-- 使用log4j输出更多的日志信息 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

在resources文件夹中添加log4j配置文件(log4j.properties)

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
### direct messages to file mylog.log ###
### log4j.appender.file=org.apache.log4j.FileAppender
### log4j.appender.file.File=d:mylog.log
### log4j.appender.file.layout=org.apache.log4j.PatternLayout
### log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
### set log levels - for more verbose logging change 'debug?info?warn?error' ###
### log4j.rootLogger=debug,stdout,file
log4j.rootLogger=debug,stdout

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:45:49  更:2022-03-12 17:46:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:31:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码