MyBatis

MyBatis
什么是MyBatis?
MyBatis是一款优秀的持久层框架,用于简化JDBC开发
MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github官网: https://mybatis.org/mybatis-3/zh/index.html
持久层
负责将数据到保存到数据库的那一层代码JavaEE三层架构:表现层、业务层、持久层

主要是争对JDBC硬代码优化,方便后期的维护

 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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <!--这是数据库的连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/registeruser?characterEncoding=utf-8&amp;serverTimezone=GMT%2B8&amp;userSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql的映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
复制代码

logback.xml自定义日志文件:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!--详细介绍使用:https://icode.blog.csdn.net/article/details/88874162-->
<!--debug="true" : 打印 logback 内部状态(默认当 logback 运行出错时才会打印内部状态 ), 配置该属性后打印条件如下(同时满足):
    1、找到配置文件 2、配置文件是一个格式正确的xml文件 也可编程实现打印内部状态, 例如: LoggerContext lc = (LoggerContext)
    LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc); -->
<!-- scan="true" : 自动扫描该配置文件,若有修改则重新加载该配置文件 -->
<!-- scanPeriod="30 seconds" : 配置自动扫面时间间隔(单位可以是:milliseconds, seconds, minutes
    or hours,默认为:milliseconds), 默认为1分钟,scan="true"时该配置才会生效 -->
<configuration debug="true" scan="true" scanPeriod="30 seconds" packagingData="true">

    <!-- 设置变量。定义变量后,可以使“${}”来使用变量。 -->
    <property name="LOG_FILE_LOCATION" value="./log-file" />
    <property name="CONSOLE_LOG_PATTERN"
              value="%red(%date{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %red([%thread]) %boldMagenta(%logger{50}) %cyan(%msg%n)"/>


    <!-- 设置 logger context 名称,一旦设置不可改变,默认为default -->
    <contextName>myAppName</contextName>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder class为空时, 默认也为 ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 当前活动日志文件名:用日期命名 -->
        <file>${LOG_FILE_LOCATION}/MyLog%d{yyyy-MM-dd}.log</file>
        <!-- 文件滚动策略根据%d{patter}中的“patter”而定,此处为每天产生一个文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 归档文件名“.zip或.gz结尾”,表示归档文件自动压缩 -->
            <FileNamePattern>${LOG_FILE_LOCATION}/MyLog%d{yyyy-MM-dd}.log.zip</FileNamePattern>
            <!--日志文件保留天数-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志级别若没显示定义,则继承最近的父 logger(该logger需显示定义level,直到rootLogger)的日志级别-->
    <!-- logger 的 appender 默认具有累加性(默认日志输出到当前logger的appender和所有祖先logger的appender中),可通过配置 “additivity”属性修改默认行为-->
    <!--name: 用来指定受此 logger 约束的某一个包或者具体的某一个类-->
    <logger name="com.xpwi"  level="debug" additivity="false" >
        <appender-ref ref="FILE"/>
    </logger>

    <!-- 至多只能配置一个root -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>
复制代码

UserMapper.xml数据表sql方法映射文件:对应写一个数据表写一个类

复制代码
<?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">
<!--
       namespace:名称空间
-->
<mapper namespace="test">
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from user;
    </select>
    <select id="selectOne" resultType="com.itheima.pojo.User">
        select * from user where id=1;
    </select>
</mapper>
复制代码

 

包结构:

 

 

 

 

  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>
    <!--类型别名默认就是类的名称不分大小写-->
            <typeAliases>
                <package name="com.itheima.pojo"/>
            </typeAliases>
<!-- environments可以配置多个数据库连接环境信息,多个environments用id来区分-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <!--这是数据库的连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/registeruser?characterEncoding=utf-8&amp;serverTimezone=GMT%2B8&amp;userSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql的映射文件-->
        <!--<mapper resource="com/itheima/Mapper/UserMapper.xml"/>-->
        <!--Mapper代理方式-->
        <package name="com.itheima.Mapper"/>
    </mappers>
</configuration>
复制代码

运行类

复制代码
public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        //Object one = sqlSession.selectOne("test.selectOne");
        //System.out.println(one);
        UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = usermapper.selectAll();
        User user = usermapper.selectOne();
        System.out.println(user);
        System.out.println(users);
        sqlSession.close();
    }
}
复制代码

 

posted @   贝勒爷ma  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示