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 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> MyBatis -> 正文阅读

[Java知识库]MyBatis

MyBatis相关的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5QP9muU-1629555012796)(C:\Users\14496\AppData\Roaming\Typora\typora-user-images\image-20210820211708241.png)]

一、什么是MyBatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。(官方定义),自我感觉就是对JDBC进行封装处理

二、安装MyBatis

2.1 安装JAR包

jar包官方下载地址:https://mybatis.org/mybatis-3/zh/index.html(从apache迁移到github可能访问有点慢)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nsEQ703L-1629555012798)(C:\Users\14496\AppData\Roaming\Typora\typora-user-images\image-20210820211954680.png)]

其中mybatis为核心包,其中lib中还有依赖包,一起导入到IDEA中使用,特别注意还要有数据库驱动包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DKFkY3i2-1629555012801)(C:\Users\14496\Desktop\MyBatis.assets\image-20210821085108665.png)]

三、XML配置

3.1 properties配置

这些属性可以在外部进行配置,并可以进行动态替换

driver=oracle.jdbc.driver.OracleDriver //加载驱动	
url=jdbc:oracle:thin:@localhost:1521:XE  // url
username=SCOTT   //自己的账号
password=TIGER   //自己的密码
3.2 mybatis.config.xml配置

在【src】目录下创建 MyBaits 的主配置文件 mybatis-config.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>
    <!-- 加载外部的properties文件 -->
    <properties resource="db.properties" />

    <!--配置别名-->
    <typeAliases>
        <!--<typeAlias alias="Dept" type="com.yjxxt.pojo.Dept"/>-->
        <!--<typeAlias type="com.yjxxt.pojo.Dept"/> --> <!--默认类名,不区分大小写-->
        <package name="com.yjxxt.pojo"/> <!-- 包下所有的类默认类名,不区分大小写 -->
    </typeAliases>

    <!--
        default选择现在要使用的环境配置
            与对应environment的id属性值相同
    -->
    <environments default="dev">
        <!--环境的配置-->
        <environment id="dev">
            <!--事务管理 : type="JDBC" 与JDBC相同的事务管理机制-->
            <transactionManager type="JDBC"/>
            <!--数据源信息的配置 type="POOLED"选择连接池技术 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--扫描SQL映射文件-->
    <mappers>
        <mapper resource="com/yjxxt/mappers/DeptMapper.xml"/>
        <mapper resource="com/yjxxt/mappers/EmpMapper.xml"/>
        <mapper resource="com/yjxxt/mappers/EmpMapper2.xml"/>
    </mappers>
</configuration>
3.3 SQL的映射文件

在 Package【mapper】下新建一个【Deptmappers.xml】文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5gkDcEi-1629555012804)(C:\Users\14496\Desktop\MyBatis.assets\image-20210821084608446.png)]

  • 由于上面配置了 <typeAliases> 别名,所以在这里的 resultType 可以直接写 Dept,而不用写类的全限定名 mapper.dept
  • namespace 属性其实就是对 SQL 进行分类管理,实现不同业务的 SQL 隔离
  • 注意:不要忘记mybatis核心xml文件中的mapper配置
3.4 测试
public class TestUser {
public static void main(String[] args) throws IOException {
//1.加载mybatis全局核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//2.构建SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂获取会话SqlSession
SqlSession session = factory.openSession();
//4.通过session调用方法执行查询
//selectList() 查到的数据返回一个list集合,没查到返回空的list
//selectList 的第一个参数为statement: 命名空间+id
List<User> list =
session.selectList("com.xxxx.mappers.UserMapper.queryAll");
System.out.println(list);
//5.关闭会话资源
session.close();
}
}

四、常用的查询方法

4.1 selectList

selectList(“命名空间.id”) 用户查询多条数据情况,返回一个List集合, 没有查到数据返回空集合,不是
null

        //1.加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2.获取SqlSessionFactory实例
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3.获取回话
        SqlSession session = factory.openSession();
        //4.使用
        //selectList("命名空间.id")
        List<Dept> list=  session.selectList("com.liufeng.mappers.DeptMapper.selectAll");

        list.forEach(System.out::println);

        //5.关闭回话
        session.close();
4.2 selectOne

selectOne(“命名空间.id”) 用于查询单条数据,返回一个数据, 如果没有查到返回null

//1.加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2.获取SqlSessionFactory实例
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3.获取回话
        SqlSession session = factory.openSession();
        //4.使用
        Dept dept = session.selectOne("com.liufeng.mappers.DeptMapper.queryDeptByDeptno",30);
        System.out.println(dept);
        //5.关闭回话
        session.close();
4.3 selectMap

selectMap(“命名空间.id”,key的字段名) 用于查询多条记录情况, 返回Map集合, 需要指定那个属性
作为key, sql查询结果作为value,指定的字段值作为key, 如果查不到, 返回一个空map集合,不是null

    //1.加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2.获取SqlSessionFactory实例
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3.获取回话
        SqlSession session = factory.openSession();
        //4.使用
        //    <K, V> Map<K, V> selectMap(String var1, String var2);
        //    <K, V> Map<K, V> selectMap(命名空间.id, sql语句的实参, 作为key的字段名);   注意: 作为key的字段应为是一个唯一性较高的字段
        Map<Integer,Dept> map = session.selectMap("com.liufeng.mappers.DeptMapper.queryDeptByName","xixi","dname");
        System.out.println(map);
        //5.关闭回话
        session.close();

五、通过properties简化配置

5.1 src下定义配置文件db.properties

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VHDdVaHT-1629555012805)(C:\Users\14496\Desktop\MyBatis.assets\MyBatis.assets\image-20210821211147882.png)]

5.2 properties标签

在核心的xml配置文件里面加载指定的外部properties文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vZKHk2oz-1629555012806)(C:\Users\14496\Desktop\MyBatis.assets\MyBatis.assets\image-20210821211351791.png)]

5.3 properties的作用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dxpd4Snz-1629555012808)(C:\Users\14496\Desktop\MyBatis.assets\MyBatis.assets\image-20210821211523515.png)]

通过对properties文件的配置,获取properties文件中数据时候,要通过${}的方式获取,这样更换数据库,或者修改数据库的密码后只用修改对应的properties文件

六、typeAliases的配置使用

6.1 给User类定义别名为a
<typeAliases>
<typeAlias type="com.liufeng.pojo.User" alias="a"/>
</typeAliases>
6.2 省略alias属性
<typeAliases>
<typeAlias type="com.xxxx.pojo.User"/> alias属性不写,默认类名,不区分大小写
</typeAliases>
6.3 package标签
<typeAliases>
<package name="com.xxxx.pojo"/> <!-- 包下所有的类默认类名 -->
</typeAliases>
<select id="queryAll" resultType="u">
select id,uname,upwd,birthday from t_user
</select>
<select id="queryById" resultType="User">
select id,uname,upwd,birthday from t_user where id=125
</select>

七、Log4J日志

7.1 Log4J日志的简介

日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日
志记录。在apache网站:https://logging.apache.org/log4j/2.x/ 可以免费下载到Log4j最新版本的软件包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OcpMKTYE-1629555012809)(C:\Users\14496\Desktop\MyBatis.assets\MyBatis.assets\image-20210821212718069.png)]

7.2日志级别

分为五个级别:
DEBUG(人为调试信息)、INFO(普通信息)、WARN(警告)、ERROR(错误)和FATAL(系统错误)
这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重
要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers
级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的
DEBUG则不会输出。

7.3 Lof4j的使用
7.3.1 导包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6d8Dmk9D-1629555012810)(C:\Users\14496\Desktop\MyBatis.assets\MyBatis.assets\image-20210821213109972.png)]

7.3.2 配置文件

可以使用properties或者xml进行配置,使用一个 log4j.properties 的配置文件, 会设定 log4j
的设置信息, 例如日志级别, 日志输出方式, 日志格式等等.

# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE
# log4j.rootCategory=INFO, CONSOLE, LOGFILE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m %c %l %d{yyyy-MMdd
HH:mm:ss}%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/test.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=- %m %l%n
7.4 Mybatis对Log4J的支持
7.4.1 通过settings标签开启 log4j 的支持

settings用于设置 MyBatis 在运行时的行为方式, 例如:缓存, 延迟加载, 日志等.

<!-- settings标签 -->
<settings>
<!-- 设置MyBatis使用log4j日志支持 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
7.4.2 局部调整日志级别, 定制日志的输出
# 提高整体日志级别
log4j.rootCategory=ERROR, CONSOLE
# 单独设置SQL语句的输出级别为DEBUG级别
# 方法级别
# log4j.logger.com.liufeng.mapper.UserMapper.selAll=DEBUG
# 类级别
# log4j.logger.com.liufeng.mapper.UserMapper=DEBUG
# 包级别
log4j.logger.com.liufeng.mapper=DEBUG

八、注解开发


8.1 Mybatis中注解的作用

使用注解一般用于简化配置文件. 但是, 注解有时候也不是很友好(有时候反而更麻烦), 例如动态 SQL等,所
以注解和配置文件可以配合使用

8.2 MyBatis 中常用的注解
8.2.1 CRUD 注解
  • @Select: 类似于select标签
  • @Insert: 类似于insert标签
  • @Update: 类似于update标签
  • @Delete: 类似于delete标签
package com.liufeng.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.liufeng.pojo.Student;
public interface StudentMapper {
@Select("select * from student")
List<Student> selAll();
@Insert("insert into student values (default, #{name}, #{age}, #{gender},
#{cid})")
int insStu(Student student);
@Update("update student set age=#{1} where id=#{0}")
int updStu(int id, int age);
@Delete("delete from student where id=#{0}")
int delStu(int id);
}
8.2.2其他注解
  • @Results: 类似于resultMap标签
  • @Result: 类似<resultMap的子标签
  • @One: 类似于association标签
  • @Many: 类似于collection标签
public interface StudentMapper {
@Select("select * from t_student")
@Results(
value = { @Result(column="id", property="id", id=true),
@Result(column="name", property="name"),
@Result(column="age", property="age"),
@Result(column="gender", property="gender"),
@Result(column="cid", property="cid"),
@Result(property="clazz",
one=@One(select="com.xxxx.mapper.ClazzMapper.selById"),
column="cid")
}
)
List<Student> sel();
}
public interface ClazzMapper {
  @Select("select * from t_class where id=#{0}")
  Clazz selById(int id);
}

九、逆向工程

mybatis-generator是一款mybatis自动代码生成工具,可以通过配置,快速生成pojo,mapper和xml文件.
官方网址:http://mybatis.org/generator/configreference/xmlconfig.html

generatorConfig.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration  PUBLIC "-//mybatis.org//DTD MyBatis Generator
Configuration 1.0//EN"  "http://mybatis.org/dtd/mybatis-generator-
config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动 -->
<context id="Tables" targetRuntime="MyBatis3">
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8" />
    <!-- JavaBean 实现 序列化 接口 -->
    <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false" />
</commentGenerator>
<!--数据库链接地址账号密码 -->
<jdbcConnection
driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@localhost:1521:xe"
userId="SCOTT"
password="TIGER">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true 时把
JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--生成 Model 类存放位置 -->
<javaModelGenerator targetPackage="com.xxxx.pojo"
targetProject="mybatis12\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成映射文件存放位置 -->
<sqlMapGenerator targetPackage="com.xxxx.mappers"
targetProject="mybatis12\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--生成接口类存放位置(Dao|Mapper) -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.xxxx.mappers" targetProject="mybatis12\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 参考数据库中需要生成的对应表信息 -->
<table tableName="dept" domainObjectName="Dept"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"></table>
<table tableName="emp" domainObjectName="Emp"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>

le=“false”
selectByExampleQueryId=“false”>

```
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:25:07  更:2021-08-22 13:26:44 
 
开发: 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/23 8:50:22-

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