• 01、MyBatis HelloWorld


    1. MyBatis简介

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

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

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

    2. 使用 MyBatis原因

    1)JDBC

    (1)SQL 夹在 Java 代码块里,耦合度高导致硬编码内伤

    (2)维护不易且实际开发需求中 sql 是有变化,频繁修改的情况多见

    2)Hibernate 和 JPA

    (1)长难复杂 SQL,对于 Hibernate 而言处理也不容易

    (2)内部自动生产的 SQL,不容易做特殊优化

    (3)基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。导致数据库性能下降

    3)MyBatis

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

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

    3. MyBatis下载

    1)下载网址

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

     

     

    4. MyBatis HelloWorld

      · HelloWorld

     – 创建一张测试表

        – 创建对应的javaBean

        – 创建mybatis配置文件,sql映射文件

        – 测试

    1) 开发环境准备

    (1) 导入 MyBatis 框架的 jar 包、Mysql 驱动包、log4j 的 jar 包

    log4j:经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。

    mysql-connector:连接数据库的驱动

    mybatis:使用mybatis框架

    log4j-1.2.17.jar

    mybatis-3.4.1.jar

    mysql-connector-java-5.1.37-bin.jar

    (2)导入log4j的配置文件  

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration
    	xmlns:log4j="http://jakarta.apache.org/log4j/">
    
    	<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) 
    " />
    		</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>
    

    2)创建Mysql测试表

    -- 创建库

    CREATE DATABASE test_mybatis;

    -- 使用库

    USE test_mybatis;

    -- 创建表

    CREATE TABLE tbl_employee(

      id INT(11) PRIMARY KEY AUTO_INCREMENT,

      last_name VARCHAR(50),

      email VARCHAR(50),

      gender CHAR(1)

    );

    3)Employee

      使用Employee接收数据库的记录.  

    public class Employee {
        
        private Integer id;
        private String lastName;
        private String email;
        private String gender;
        
        
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
        @Override
        public String toString() {
            return "Employee [id=" + id + ", lastName=" + lastName + ", email="
                    + email + ", gender=" + gender + "]";
        }
    }
    Employee.java

     4)配置文件

    (1)参考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.jdbc.Driver" />
    				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
    				<property name="username" value="root" />
    				<property name="password" value="root123" />
    			</dataSource>
    		</environment>
    	</environments>
    	
    	<!-- !!!!!!!!!非常重要!!!!!!!!!!!! -->
    	<!-- 将我们写好的sql映射文件<EmployeeMapper.xml>一定要注册到全局配置文件中 -->
    	<mappers>
    		<mapper resource="EmployeeMapper.xml" />
    	</mappers>
    	
    </configuration>
    

    (2)创建MyBatis的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">
    <mapper namespace="com.atguigu.mybatis.EmployeeMapper">
    <!-- 
    	namespace:名称空间;指定为接口的全类名
    	id:唯一标识
    	resultType:返回值类型
    	#{id}:从传递过来的参数中取出id值
    	public Employee getEmpById(Integer id);
     -->
    	<select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
    		select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    	</select>
    </mapper>
    

    5)测试

    (1) 构建 SqlSessionFactory

      根据全局配置文件,利用SqlSessionFactoryBuilder创建SqlSessionFactory 

      String resource = "mybatis-config.xml";

      InputStream inputStream = Resources.getResourceAsStream(resource);

      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    (2)从 SqlSessionFactory 中获取 SqlSession

      使用SqlSessionFactory获取sqlSession对象。一个SqlSession对象代表和数据库的一次会话。

      使用SqlSession根据方法id进行操作。

     ① 最新版的Session获取方式

    try (SqlSession session = sqlSessionFactory.openSession()) {

      Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

    }

    ② 4.1版本获取方式

    // 获取sqlSession实例,能直接执行已经映射的sql语句

    // sql的唯一标识:statement Unique identifier matching the statement to use.

    // 执行sql要用的参数:parameter A parameter object to pass to the statement.

       SqlSession openSession = sqlSessionFactory.openSession();

      try {

        Employee employee = openSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp", 1);

        System.out.println(employee);

      } finally {

        openSession.close();

      }

    (3)NameSpaces说明  

      (4)注入框架说明


    使用接口式编程

    public interface EmployeeMapper {
        public Employee getEmpById(Integer id);
    }
    EmployeeMapper.java
        @Test
        public void test1() 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();
            
            //3.获取接口的实现类对象 接口的类对象会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
            try {
                EmployeeMapper mapper =  openSession.getMapper(EmployeeMapper.class);
                Employee employee = mapper.getEmpById(1);
                System.out.println(mapper.getClass());
                System.out.println(employee);
            } finally {
                openSession.close();
            }
            
        }
    EmployeeTest.java  
        <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
            select id,last_name lastName,email,gender from tbl_employee where id = #{id}
        </select>
    EmployeeMapper.xml

    参考文档:https://mybatis.org/mybatis-3/zh/getting-started.html

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

  • 相关阅读:
    IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); 时,报COMException
    Asp.net MVC 发布到IIS6
    String.Net “System.TypeInitializationException”类型的未经处理的异常在 Spring.NetDemo.exe 中发生
    C#通过外部别名,解决DLL冲突问题
    c# DPI SCale
    c# 技巧
    正则笔记
    php & c# DES
    WPF页面切换
    C# 委托与事件
  • 原文地址:https://www.cnblogs.com/HOsystem/p/13058311.html
Copyright © 2020-2023  润新知