首页 > 其他分享 >MyBatis学习总结1

MyBatis学习总结1

时间:2024-06-06 14:03:58浏览次数:14  
标签:总结 String void public 学习 MyBatis log4j sex id

1.MyBatis介绍

1.1什么是框架

框架(framework)(Framework)是一个框子——指其约束性,也是一个架子——指其支撑性,即已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度。

​ 如果将开发完成的软件比作是一套已经装修完毕的新房,那框架就好比是一套已经修建好的毛坯房。用户直接购买毛坯房,建筑质量和户型合理有保证,还省去了自己建造房屋的时间,一举多得。

1.2.框架要解决的问题

框架要解决的最重要的一个问题是技术整合的问题,在 J2EE 的 框架中,有着各种各样的技术,不同的 软件企业需要从 J2EE 中选择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技 术的风险性将会直接对应用造成冲击。而应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设 计和具体的实现技术解耦。这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应 用的底层支撑,它不应该直接对应用产生影响。
在这里插入图片描述

1.3.传统Jdbc代码问题分析

  • 传统Jdbc程序

    public class JdbcTest {
        public static void main(String[] args) {
            try {
                //1.加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                //2.创建连接对象
                String url = "jdbc:mysql://192.168.10.137:3306/ssm";
                Connection connection = DriverManager.getConnection(url, 
                                                                    "root",
                                                                    "1111");
                String sql = "select * from account";
                //3.准备PreparedStatement对象
                PreparedStatement pst = connection.prepareStatement(sql);
                //4.执行sql语句
                ResultSet rs = pst.executeQuery();
                //5.遍历结果集
                while(rs.next()){
                    Integer id = rs.getInt("id");
                    String name = rs.getString("name");
                    Double money = rs.getDouble("money");
                    System.out.println(id + " " + name + " " + money);
                }
                //6.关闭资源
                rs.close();
                pst.close();
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  • 问题

    1. 手动创建和释放链接

    2. sql语句在代码中硬编码

    3. 对结果的解析

1.4.MyBatis框架概述

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、获取结果集等jdbc繁杂的过程代码。

​ MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。

2.MyBatis入门案例

2.1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.by</groupId>
    <artifactId>01_mybatis_HelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <!-- 项目源码及编译输出的编码 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- 项目编译JDK版本 -->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    <build>
        <!-- 如果不添加此节点src/main/java目录下的所有配置文件都会被漏掉。 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

2.2.log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2.3.pojo

public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2.4.UserDao

public interface UserDao {
    public List<User> findAll();
}

2.5.UserDao.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">
<!--namespace:隔离sql,一般是接口名称的全类名-->
<mapper namespace="com.by.dao.UserDao">
    <!--
      id:和接口方法名保持一致
      resultType:和接口返回类型保持一致
     -->
    <select id="findAll" resultType="com.by.pojo.User">
        select * from user
    </select>
</mapper>

2.6.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>
    <!-- 和spring整合后 environments配置将废除-->
    <environments default="dev">
        <!-- dev环境 -->
        <environment id="dev">
            <!-- 配置事务的类型:type="JDBC | MANAGED" 两种方式
                 JDBC:表示使用JDBC中原生的事务管理方式
                 MANAGED:被管理,例如Spring
			-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置连接数据库的信息:用的是数据源(连接池) -->
            <dataSource type="POOLED">
                 <!-- mysql5 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="1111"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
        <mapper resource="com/by/dao/UserDao.xml"/>
    </mappers>
</configuration>
  • 注意mysql8的driver和url
<!-- mysql8 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai"/>

2.7.测试

public class MyBatisTest {

    private InputStream inputStream;
    private SqlSession sqlSession;

    @Before
    public void createSqlSession() throws IOException {
        // 加载配置文件
        String resource = "mybatis-config.xml";
        inputStream = Resources.getResourceAsStream(resource);

        // 创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = 
            				new SqlSessionFactoryBuilder().build(inputStream);
        //获得数据库会话实例
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void testFindAll(){
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.findAll();
        for(User user : userList) {
            System.out.println(user);
        }
    }

    @After
    public void closeSqlSession() throws IOException {
        sqlSession.close();
        inputStream.close();
    }
}

标签:总结,String,void,public,学习,MyBatis,log4j,sex,id
From: https://blog.csdn.net/qq_53098873/article/details/139481420

相关文章

  • Linux学习—Linux服务和守护进程
    在Linux系统中,服务和守护进程是保持系统运行的关键组件。服务是运行在后台的程序,通常在系统启动时自动启动,而守护进程是持续运行的程序,用于监听特定的事件或执行定期任务。本文将介绍如何在Linux环境下管理服务和守护进程,并展示一些实用的命令和代码示例。服务和守护进程简......
  • 6大部分,20 个机器学习算法全面汇总!!建议收藏!(上篇)
    ..........纯  干  货 ........本次文章分别从下面6个方面,涉及到20个算法知识点:监督学习算法无监督学习算法半监督学习算法强化学习算法集成学习算法深度学习算法监督学习算法监督学习算法是一种通过学习输入数据和相应的标签之间的......
  • 6大部分,20 个机器学习算法全面汇总!!建议收藏!(下篇)
    ...........纯 干 货...目录半监督学习算法1、标签传播基本原理核心公式2、自训练基本原理核心公式强化学习算法1、Q-Learning基本原理核心公式2、深度强化学习基本原理核心公式集成学习算法1、随机森林基本原理核心步骤2、梯度提......
  • 西湖大学赵世钰老师【强化学习的理论基础】02基本概念
    文章目录概念介绍state(状态)Action(动作)Statetransition(状态转移)Policy(策略)reward(奖励)Trajectory(轨迹)andreturnDiscountedreturn(折扣回报)Episode(回合)一般是有终止点的轨迹Markovdecisionprocess(MDP)-一个对应三个单词的过程要素马尔可夫的过程概念介绍例子:网格......
  • 【机器学习300问】108、什么是多项式回归模型?
    一、多项式回归是什么(1)举例说明        假设你经营着一家农场,想要根据土地面积来预测作物的产量。如果你只用线性模型(即),你可能会发现它并不足以描述实际的产量情况,因为实际产量可能会随着土地面积的增加而经历先快速增加然后趋于平缓的过程。线性回归模型......
  • C51学习归纳5 --- 定时器
        个人觉得定时器是一个十分重要的内容,这东西忘简单说其实就是一个计数器,从设定的初始值开始加一操作,每当计数器满了,引发一次计数器中断,芯片的CPU过来进行中断处理,然后一直重复这样的过程。替代长时间的Delay,提高CPU的运行效率和处理速度。    首先,我们来考......
  • Python部分错误总结
    1.couldnotconvertstringtofloat:''由于空字符串不包含任何数字,因此无法确定其浮点数等价物,所以转换失败并抛出ValueError。在没办法处理数据的时候,可以通过设置默认值。some_value=""try:result=float(some_value)exceptValueError:result=0#或......
  • mybatis逆向工程generatorConfiguration配置
      <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEgeneratorConfigurationPUBLIC"-//mybatis.org//DTDMyBatisGeneratorConfiguration1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"&......
  • 【机器学习】朴素贝叶斯分类器
    目录条件概率的定义和公式先验概率和后验概率使用朴素贝叶斯(NaiveBayes)算法检测垃圾邮件源代码文件请点击此处!条件概率的定义和公式条件概率:事件\(B\)已发生条件下事件\(A\)发生的概率,记为\(P(A|B)\),即\[P(A|B)=\frac{P(AB)}{P(B)}\]乘法定理:\[P(AB)=P(A)P(B......
  • 机器学习策略篇:详解如何改善你的模型的表现(Improving your model performance)
    如何改善模型的表现学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以及如何估计可避免偏差和方差。现在把它们全部组合起来写成一套指导方针,如何提高学习算法性能的指导方针。所以想要让一个监督学习算法达到实用,基本上希望或者假设可以完成两件事情。首......