zoukankan      html  css  js  c++  java
  • MyBatis(1)-简单入门

    简介

    什么是 MyBatis ?

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

    简单的实例我们开始入门把

    1).首先创建我们需要使用到的数据库(看截图,笔者所写的简单的截图),mysql数据库

    2).创建一个简单的java工程,具体的目录如下

    在lib文件下,导入三个jar包:

    mybatis需要jar包:mybatis-3.4.6.jar

    mysql驱动jar包:mysql-connector-java-5.1.17.-bin.jar

    日志记录jar包:log4j-1.2.17.jar

    3)一些文件的基本配置

    log4j.xml配置文件的内容

    <?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> 

    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="1234" />
    			</dataSource>
    		</environment>
    	</environments>
    	<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
    	<mappers>
    		<mapper resource="EmployeeMapper.xml" />
    	</mappers>
    </configuration>

     Employee.java

    package com.MrChengs.bean;
    
    public class Employee {
    
    	private int id;
    	private String name;
    	private String gender;
    	private String email;
    	@Override
    	public String toString() {
    		return "Employee [id=" + id + ", name=" + name + ", gender=" + gender + ", email=" + email + "]";
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    }
    

     EmployeeMapper.java

    package com.MrChengs.dao;
    
    import com.MrChengs.bean.Employee;
    
    public interface EmployeeMapper {
    	//查数据,封装为其对象
    	//接口和文件进行动态绑定
    	public Employee getEmployee(int id);
    }
    

     MyBatisTest.java

    package com.MrChengs.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import com.MrChengs.bean.Employee;
    import com.MrChengs.dao.EmployeeMapper;
    
    public class MyBatisTest {//原生态的编程方式
        @Test
        public void test() throws IOException {
            //1.根据xml文件的配置(全局文件)创建一个SqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);        
            SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) new 
                    SqlSessionFactoryBuilder().build(inputStream);
            
            //2.获取SqlSession的实例,直接执行已经映射的sql语句
            //SqlSession是和数据库的一次会话
            //都是非线程安全的,每次使用都应该去获取新的对象
            //sql的唯一标识,
            //执行sql要用的参数
            SqlSession session = sqlSessionFactory.openSession();
            try{
                Employee employee =  session.selectOne("com.MrChengs.dao.EmployeeMapper.getId",5);
                System.out.println(employee);
            }finally{
                session.close();
            }
        }
        //定义共有的方法
        public SqlSessionFactory getSqlSessionFactory() throws IOException{
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);    
            return new SqlSessionFactoryBuilder().build(inputStream);
        }
    //接口式的编程  
    @Test
    public void test1() throws IOException{
        
    //1.得到SqlSeesionFactory SqlSessionFactory sessionFactory = getSqlSessionFactory();
        
    //2.得到SqlSession SqlSession sqlSession = sessionFactory.openSession();
        try{
          //3.获取接口的实现类
          //会自动为接口创建一个代理对象,代理对象去增删改除
          //mapper接口没有实现类,但是Mybatishi生成一个代理的对象
          EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
          Employee employee
    = mapper.getEmployee(5);
          System.
    out.println(mapper.getClass());
          //class com.sun.proxy.$Proxy5
          System.out.println(employee);
          }
    finally{
             sqlSession.close();
          }
    } }

    最终两个结果都是一样的:

  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/9721184.html
Copyright © 2011-2022 走看看