Java SSM学习(二)

之前我们学习了Java SSM的第一部分Spring,如果有需要了解的小伙伴,可以点击:Java SSM学习(一)_不会Java的MING的博客-CSDN博客

现在我们来学习一下第二部分MyBatis

1,概述

        MyBatis是一款ORM持久层框架,它支持定制化 SQL、存储过程以及高级映射。它的学习你首先需要对JDBC有一定的学习,因为MyBatis就是将JDBC需要手动写参数和获取结果集的操作进行简化,只用使用Maven和xml文件就可以实现将接口和Java中的对象映射为数据库之中的数据。

2,写MyBatis项目

        (1)导入依赖      

  我们就不使用jar来导入依赖,我们直接创建项目,然后使用Maven导入依赖,将一下代码复制粘贴进程序就可以(不用去记忆,大概看一下需要的依赖,记不住也没关系,网上一找全都是资源):

 <dependencies>
    <!-- mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.11</version>
    </dependency>

    <!--mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
    </dependency>

    <!--servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <!--jsp-->

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>

    <!--jstl-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

  </dependencies>

        (2)编写Mybatis项目

        完成第一步我们就可以开始动手写一个MyBatis的项目,首先,我们需要编写MyBatis的配置文件,这个需要我们建立一个xml文件,然后复制粘贴官网之中的内容就可以了,中文文档网站:https://mybatis.org/mybatis-3/zh/configuration.html(也可以复制我以下的内容),官网给的MyBatis的教程也是非常的清楚。

<?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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/tsglxt"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper url="file:TestMapper.xml"/>
    </mappers>
</configuration>

        我们只用注意datasource之中的内容就可以,数据源,默认是pooled,数据库连接池,其中的四个property是我们需要修改的地方,第一个‘driver’驱动,我们就将我们MySQL的驱动位置填写在此处;第二个’url‘数据库连接,我们可以先链接数据库,然后直接复制url,第三个第四个就是用户名和密码,设置成功就完成了连接。

        其中,mappers是Mapper映射器,其目的就是为了让根目录下的mapper映射文件可以正常运行,接下来就是mapper映射文件,TestMapper.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="TestMapper">
    <select id="selectStudent" resultType="pojo.Student">
        select * from student
    </select>
</mapper>

        紧接着,我们就可以启动项目了,让配置文件读取一个SqlSessionFactory对象,我们需要写的代码就在MyBatis的官方网站上就有:

    public static void main(String[] args) throws FileNotFoundException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/main/java/mybatis/mybatis-config.xml"));
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){
            List<Student> student = sqlSession.selectList("selectStudent");
            student.forEach(System.out::println);
        }
    }

        其中,build我们使用FileInputStream就可以读取配置文件,在后面放入配置文件的根目录的地址就可以成功的读取mybatis-config.xml文件了。

        然后查看运行结果:

        注意的是:其中,pojo包下的Student类,需要使用toString方法,否则只会返回地址。遇到报红,直接抛出异常即可,可能是还需要写依赖,这些网上一查就知道。 到此为止,MyBatis的基本使用方法就已经操作完成了。

        (3)配置MyBatis

        上面我们已经可以写出一个MyBatis的项目,我们可以注意一下,SqlSessionFactoryBuilder,每一个MyBatis都是以一个SqlSessionFactory的实例为核心,我们是通过SqlSessionFactory来创建多个新的会话,SqlSession对象,这也就是一对多,每一个会话彼此互不影响。这个SqlSessionFactory一般只用创建一次,所以我们可以写一个工具类MyBatisUilt,用来集中创建SqlSessionFactory:


public class MyBatisUile {

    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/main/java/mybatis/mybatis-config.xml"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSession(boolean autoCommit){
        return sqlSessionFactory.openSession(autoCommit);
    }
}

        这样main之中只用写:

      try (SqlSession sqlSession = MyBatisUile.getSession(true)){
            List<Student> student = sqlSession.selectList("selectStudent");
            student.forEach(System.out::println);
        }

        还是可以得到结果。

        我们还可以通过namespace来绑定到一个接口上,利用接口的特性,我们可以直接指明方法的行为,而实际实现则是由Mybatis来完成,创建一个接口 TestMapper,然后我们可以直接通过SqlSession来获取实现类,然后通过接口内的行为来获得结果(后续还可以使用注解):

public interface TestMapper {
    List<Student> selectStudent();
}

        然后,在TestMapper.xml之中,需要将namespace写上testMapper接口的地址,最后将主函数修改,直接通过SqlSession来获取实现类。

    public static void main(String[] args) {
        try (SqlSession sqlSession = MyBatisUile.getSession(true)){
            TestMapper testMapper = sqlSession.getMapper(TestMapper.class);
            List<Student> student = testMapper.selectStudent();
            student.forEach(System.out::println);
        }
    }

         最终得到结果。 、

        (4)命名方式

        我们可以为数据起别名,用来简化mapper的书写,我们可以在mybatis-config.xml内的environments之上写以下代码,现在类型就可以起别名了。

<typeAliases>
    <typeAlias type="com.test.entity.Student" alias="Student"/>
</typeAliases>

        当然,我们而也可以这样:

<settings>
    <setting name="" value=""/>
</settings>

        驼峰命名:

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

         (5)增删改查

<select id="getStudentBySid" parameterType="int" resultType="Student">
    select * from student where sid = #{sid}
</select>
<insert id="addStudent" parameterType="Student">
    insert into student(name, sscore) values(#{name}, #{sscore})
</insert>

         增删改查的大概写法都十分相似,其中的重点就是复杂查询,这个需要大家多去做些相关的题目就可以做到熟能生巧了。

        动态SQL:MyBatis的动态Sql十分强大,对于拼接不同条件的sql语句十分有用。

3,注解开发

        对于MyBatis而言,注解或者使用xml,我觉得差别并没有太大(主要是MyBatis本身要写的东西就很多),但是,注解的方式还是需要学习一下的。

        就接着上面添加语句,我们需要将这个语句绑定在接口中的方法之上

@Insert("insert into student(name, sscore) values(#{name}, #{sscore})")
int addStudent(Student student);

        然后,修改一下配置文件之中的映射器注册,可以直接注册在整个包之上。

<mappers>
     <package name="com.mapper"/>
</mappers>

4,一些额外的

        上面是我认为MyBatis之中比较值得我们去学习的,然后后续如果有精力就可以去多了解一下MyBatis的底层原理和一些缓存机制,动态代理的知识。

        到此为止,MyBatis也就整理到这里了,后续还想了解,可以网上搜一下大佬的作品。如果有用,请点个小心心。

         

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会Java的MING

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值