zoukankan      html  css  js  c++  java
  • MyBatis入门使用

    MyBatis入门使用

    MyBatis简介

    MyBatis是支持普通SQL查询、存储过程和高级映射的持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs映射成数据库中的记录。

    一般情况下MyBatis是被Spring整合使用的,但是他也可以独立使用。

    独立使用MyBatis步骤:

    1. 建立PO类。用于对数据库中数据的映射,使程序员更关注对Java类的使用而不是数据库的操作。
    2. 建立Mapper。数据库操作的映射文件,也就是我们常常说的DAO,用于映射数据库的操作,可以通过配置文件指定方法对应的SQL语句或者直接使用Java提供饿注解方式进行SQL的指定。
    3. 建立配置文件。配置文件主要用于配置程序中可变性高的设置,MyhBatis中的配置文件主要封装在configuration中。
    4. 建立映射文件。对应于MyBatis全局配置中的mappers的配置属性。主要用于建立对应数据库操作接口的SQL映射。MyBatis会将这里设定的SQL与对应的Java接口相关联,以保证在MyBatis中调用接口的时候会到数据库中执行相应的SQL来简化开发。

    建立测试类。进行测试

    代码实例:

    1)建立PO类。

    package com.wangjun.mybatis.test.mybatis;
    
    public class User {
    private Integer id;
    private String name;
    private Integer age;
    public User(String name, Integer age) {
    super();
    this.name = name;
    this.age = age;
    }
    //必须要有这个无参构造器,不然根据UserMapper.xml中的配置,在查询数据库的时候,将不能呢过反射构造出User实例
    public User() {
    }
    
    public Integer getId() {
    return id;
    }
    
    public void setId(Integer id) {
    this.id = id;
    }
    
    public String getName() {
    return name;
    }
    
    public void setName(String name) {
    this.name = name;
    }
    
    public Integer getAge() {
    return age;
    }
    
    public void setAge(Integer age) {
    this.age = age;
    }
    }
    

    2)建立Mapper。

    package com.wangjun.mybatis.test.mybatis;
    
    public interface UserMapper {
    	public void insertUser(User user);
    	public User getUser(Integer id);
    }
    

    3)建立配置文件。

    <?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>
    	<settings>
    		<setting name="cacheEnabled" value="false"></setting>
    		<setting name="useGeneratedKeys" value="true"></setting>
    		<setting name="defaultExecutorType" value="REUSE"></setting>
    	</settings>
    	<typeAliases>
    		<typeAlias alias="User" type="com.wangjun.mybatis.test.mybatis.User"/>
    	</typeAliases>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <!-- 新版本的jdbc建议使用com.mysql.cj.jdbc.Driver -->
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <!-- 不加 ?serverTimezone=GMT 可能会有数据库时区和系统时区不一致导致的问题 -->
            <property name="url" value="jdbc:mysql://localhost/test?serverTimezone=GMT"/>
            <property name="username" value="root"/>
            <property name="password" value="password"/>
          </dataSource>
        </environment>
      </environments>
      <mappers>
        <mapper resource="UserMapper.xml"/>
      </mappers>
    </configuration>
    

    4)建立映射文件。

    <?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.wangjun.mybatis.test.mybatis.UserMapper">
    	<insert id="insertUser" parameterType="User">
    		insert into user(name,age) values(#{name},#{age})
    	</insert>
    	<select id="getUser" resultType="User" parameterType="java.lang.Integer">
    	  select * from user where id = #{id}
    	</select>
    </mapper>
    

    5)测试类

    package com.wangjun.mybatis.test.mybatis;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class MyBatisUtil 
    {
    	private final static SqlSessionFactory sqlSessionFactory;
    	static {
    		String resource = "configuration.xml";
    		Reader reader = null;
    		try {
    			reader = Resources.getResourceAsReader(resource);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    	}
    	public static SqlSessionFactory getSqlSessionFactory() {
    		return sqlSessionFactory;
    	}
    }
    
    package com.wangjun.mybatis.test.mybatis;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    
    public class TestMapper {
    	static SqlSessionFactory sqlSessionFactory = null;
    	static {
    		System.out.println(111);
    		sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
    	}
    	
    	public void testAdd() {
    		SqlSession sqlSession = sqlSessionFactory.openSession();
    		try {
    			UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    			User user = new User("wangjun", new Integer(25));
    			userMapper.insertUser(user);
    			sqlSession.commit();
    		}finally {
    			sqlSession.close();
    		}
    	}
    	public void getUser() {
    		SqlSession sqlSession = sqlSessionFactory.openSession();
    		try {
    			UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    			User user = userMapper.getUser(1);
    			System.out.println("name:" + user.getName() + "|age:" + user.getAge());
    		}finally {
    			sqlSession.close();
    		}
    	}
    	
    	public static void main(String[] args) {
    		TestMapper tm = new TestMapper();
    		tm.testAdd();
    		tm.getUser();
    	}
    }
    

    运行结果:

    name:wangjun|age:25
    

    补充,POM文件配置:需要依赖jdbc和myBaits

    <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.wangjun.mybatis</groupId>
    	<artifactId>test.mybatis</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>test.mybatis</name>
    	<url>http://maven.apache.org</url>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>6.0.6</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.4.5</version>
    		</dependency>
    	</dependencies>
    </project>
    
    

    Spring整合MyBatis步骤:

    上述步骤的1,2,3步不变。只需要配置Spring文件:

    1. 将MyBatis配置文件的environments配置移动到了Spring的配置文件中。针对MyBstis,注册org.mybatis.Spring.SqlsessionFactoryBean类型的bean,以及用于映射接口的org.mybatis.Spring.mapper.MapperFactoryBean。

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      
      	<!-- 需要maven依赖commons-dbcp包 -->
      	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
      		<property name="url" value="jdbc:mysql://localhost/test?useSSL=false"></property>
      		<property name="username" value="root"></property>
      		<property name="password" value="password"></property>
      		<property name="maxIdle" value="30"></property>
      		<property name="defaultAutoCommit" value="true"></property>
      	</bean>
      	
      	<!-- 需要maven依赖mybatis-spring和spring-jdbc包 -->
      	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      		<property name="configLocation" value="mybatis/configuration.xml"></property>
      		<property name="dataSource" ref="dataSource"></property>
      	</bean>
      	
      	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
      		<property name="mapperInterface" value="com.wangjun.mybatis.test.mybatis.UserMapper"></property>
      		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
      	</bean>
      </beans>
      
      

    2. 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>
      	<typeAliases>
      		<typeAlias alias="User" type="com.wangjun.mybatis.test.mybatis.User"/>
      	</typeAliases>
        <mappers>
          <mapper resource="mybatis/UserMapper.xml"/>
        </mappers>
      </configuration>
      

    测试

    Spring整合MyBatis很简单,我们可以看到除了MyBaits配置文件的更改并没有太大变化。其实Spring整合MyBatis的优势主要在于使用上,我们来看看Spring中使用MyBatis的用法:

    package com.wangjun.mybatis.test.mybatis;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class SpringMyBatisTest {
    
    	public static void main(String[] args) {
    		ApplicationContext context = new ClassPathXmlApplicationContext("mybatis/springMyBatis.xml");
    		UserMapper um = context.getBean("userMapper", UserMapper.class);
    		//查询数据
    		User user = um.getUser(1);
    		System.out.println(user.getName());
    		System.out.println(user.getAge());
    		
    		//插入数据
    		User addUser = new User("lujiashaoye", 24);
    		um.insertUser(addUser);
    	}
    
    }
    
    

    我们可以看到,在Spring中使用MyBatis非常方便,用户甚至无法察觉自己正在使用MyBatis,而这一切相对于独立使用MyBatis时必须要做的冗余操作来说无非是打打简化了我们的工作量。

    《Spring源码深度解析》笔记

  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/scuwangjun/p/8976353.html
Copyright © 2011-2022 走看看