01 初始MyBatis

mybatis

  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。

  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

  • MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录.

  • myBatis是一个半自动化的持久化层框架。
    JDBC
    – SQL夹在Java代码块里,耦合度高导致硬编码内伤
    – 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见

  • Hibernate和JPA
    – 长难复杂SQL,对于Hibernate而言处理也不容易
    – 内部自动生产的SQL,不容易做特殊优化。
    – 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降。

  • 对开发人员而言,核心sql还是需要自己优化

  • sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。

https://github.com/mybatis/mybatis-3/

试试mybatis

创建一张测试表 Employee
– 创建对应的javaBean
– 创建mybatis配置文件,sql映射文件
– 测试

MyBatis操作数据库

  1. 创建MyBatis全局配置文件
    – MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息、如数据库连接池信息等。指导着MyBatis进行工作。我们可以参照官方文件的配置示例。

  2. 创建SQL映射文件
    – 映射文件的作用就相当于是定义Dao接口的实现类如何工作。这也是我们使用MyBatis时编写的最多的文件。

  3. 导入log4j日志包之后还需要log4.xml和 全局配置文件放在resouces目录下

MyBatis全局配置文件 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/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="EmployeeMapper.xml"/>
    </mappers>
</configuration>

lo4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="true">

 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
   <param name="Encoding" value="UTF-8" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
   </layout>
 </appender>
 <logger name="java.sql">
   <level value="debug" />
 </logger>
 <logger name="org.apache.ibatis">
   <level value="info" />
 </logger>
 <root>
   <level value="debug" />
   <appender-ref ref="STDOUT" />
 </root>
</log4j:configuration>

SQL映射文件 EmployeeMapper.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="com.atgui.mybatis.EmployeeMapper">

    <!--
  		namespace:名称空间;指定为接口的全类名
       id:唯一标识
       resultType:返回值类型
       #{id}:从传递过来的参数中取出id
    -->

    <select id="selectEmp" resultType="com.atgui.mybatis.bean.Employee">
        select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    </select>
</mapper>

测试

    @Test
    public void test() throws IOException {
        //根据全局配置文件,利用SqlSessionFactoryBuilder创建SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2. 获取 SqlSession 实例,能直接执行已经映射的sql语句 一个SqlSession对象代表和数据库的一次会话。
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            //使用SqlSession根据方法id进行操作
            Employee employee = openSession.selectOne("com.atgui.mybatis.EmployeeMapper.selectEmp", 1);
            System.out.println(employee);
        } finally {

            openSession.clearCache();
        }
    }

接口式编程

– 创建一个Dao接口
– 修改Mapper文件
– 测试

public interface EmployeeMapper {

    public Employee getEmpById(Integer id);
}

修改Mapper文件

<?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="com.atgui.mybatis.dao.EmployeeMapper">

    <!--
       namespace:名称空间;指定为接口的全类名
       id:唯一标识
       resultType:返回值类型
       #{id}:从传递过来的参数中取出id

    public Employee getEmpById(Integer id);
    -->

    <select id="getEmpById" resultType="com.atgui.mybatis.bean.Employee">
        select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    </select>
</mapper>
    @Test
    public void test01() throws IOException {
       //1.获取到 SqlSessionFactory 对象
              String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取 sqlSession 对象
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            //3.获取接口的实现类对象
            //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);

            Employee employee = mapper.getEmpById(1);
            System.out.println(employee);
        } finally {
            openSession.close();
        }

     /* 1.根据 xml 配置文件(全局配置文件) 创建一个SqlSession对象
     *  有数据源一些运行环境信息
     * 2.sql 映射文件,配置了每一个sql,以及sql的封装规则等
     * 3.将sql映射文件注册在全配置文件中
     *4.写代码:
     *    1)、根据全局配置文件得到  SqlSessionFactory
     *    2)、使用SqlSession 工厂 ,获取到使用SqlSession对象使用他来执行增删改查
     *    3)、使用sql的唯一标识来告诉MyBatis执行哪个sql,sql都是保存在sql映射文件中的
     *          将接口和xml进行绑定
     *        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
     *5.两个重要的配置文件:
     *     mybatis 的全局配置文件,包含数据库连接池信息,事务管理器信息等。。。系统运行环境信息
        	sql 映射文件,保存了每一个sql语句的映射信息
       */
posted @   flypiggg  阅读(29)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示