mybatis的HelloWorld实例

http://www.mybatis.org/mybatis-3/zh/index.html Mybatis官方中文文档

本章节主要采取maven项目的方式来演示Mybatis的helloworld,只做入门了解

sql建表语句:

-- ----------------------------
-- Table structure for tbl_employee
-- ----------------------------
DROP TABLE IF EXISTS `tbl_employee`;
CREATE TABLE `tbl_employee` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(255) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tbl_employee
-- ----------------------------
INSERT INTO `tbl_employee` VALUES ('1', 'AA', '1', 'aa@qq.com');
INSERT INTO `tbl_employee` VALUES ('2', 'BB', '0', 'bb@qq.com');

pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<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.wcg</groupId>
  <artifactId>mybatis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>mybatis Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- 测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>

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

    <!-- mysql驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

    <!-- log4j日志 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  

  </dependencies>

</project>

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) \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>

Employee实体类:

package com.wcg.mybatis.entity;

import java.io.Serializable;

/**
 * @author wcg
 * @create 2019-05-06 10:04
 */
public class Employee implements Serializable {
    private static final long serialVersionUID = -6248806586248836314L;
    private Integer id;
    private String lastName;
    private String gender;
    private String email;

    public Employee() {
    }

    // 省略 getting setting...
}

EmployeeMapper接口:

package com.wcg.mybatis.dao;

import com.wcg.mybatis.entity.Employee;

/**
 * @author wcg
 * @create 2019-05-06 17:48
 */
public interface EmployeeMapper {
    // 该方法名必须与sql映射文件中的id一致
    Employee getEmpById(Integer id);
}

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>
	<!--引入外部配置文件-->
	<properties resource="jdbc.properties"></properties>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc_driver}" />
				<property name="url" value="${jdbc_url}" />
				<property name="username" value="${jdbc_username}" />
				<property name="password" value="${jdbc_password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
	<mappers>
		<mapper resource="mapper/EmployeeMapper.xml" />
	</mappers>
</configuration>

jdbc.properties数据库配置文件:

jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/mybatis
jdbc_username=root
jdbc_password=root

EmployeeMapper.xml 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.wcg.mybatis.dao.EmployeeMapper">
<!-- 
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值

public Employee getEmpById(Integer id);
 -->
	<select id="getEmpById" resultType="com.wcg.mybatis.entity.Employee">
		select id,last_name lastName,email,gender from tbl_employee where id = #{id}
	</select>
</mapper>

MybatisTest测试类:

package com.wcg.mybatis.test;

import com.wcg.mybatis.dao.EmployeeMapper;
import com.wcg.mybatis.entity.Employee;
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.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.InputStream;

/**
 * @author wcg
 * @create 2019-05-06 10:05
 */
public class MybatisTest {
    public SqlSessionFactory sessionFactory = null;

    @BeforeEach
    public void init()throws Exception{
    // 根据全局配置文件(xml)创建一个SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    /**
     * 通过名称空间的方式
     * @throws Exception
     */
    @Test
    public void namespaceTest(){

        // 获取 SqlSession 的实例 。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。通过 SqlSession 实例来直接执行已映射的 SQL 语句
        SqlSession sqlSession = null;
        try {
            sqlSession = sessionFactory.openSession();
            // 通过sql映射文件唯一标识(名称空间.sql语句id)和传入的参数来执行相应的sql语句
            Employee employee = (Employee)sqlSession.selectOne("com.wcg.mybatis.dao.EmployeeMapper.getEmpById", 1);
            System.out.println(employee.getLastName()); // AA
        } finally {
            // 资源关闭,放在finally中确保一定会执行
            sqlSession.close();
        }
    }

    @Test
    public void interfaceTest(){
        // 获取 SqlSession 的实例 。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。通过 SqlSession 实例来直接执行已映射的 SQL 语句
        SqlSession sqlSession = null;
        try {
            sqlSession = sessionFactory.openSession();
            // 通过获取接口代理对象来执行sql语句
            EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
            System.out.println(mapper); // org.apache.ibatis.binding.MapperProxy@4690b489  代理对象
            Employee employee = mapper.getEmpById(2);
            System.out.println(employee.getLastName()); // BB
        } finally {
            // 资源关闭,放在finally中确保一定会执行
            sqlSession.close();
        }
    }
}

 

helloworld总结:

  • SqlSessionFactoryBuilder(构造器):它会根据配置文件或者代码来生成SqlSessionFactory,采用的是分部构建的Builder模式(强烈推荐使用配置文件的方式来生成SqlSessionFactory,有更高的可读性和可维护性)。在成功创建了SqlSessionFactory后SqlSessionFactoryBuilder就失去了作用,所以SqlSessionFactoryBuilder只能存在于创建SqlSessionFactory的方法中而不要让其长期存在。
  • SqlSessionFactory(工厂接口):可以被认作一个数据库的连接池,它的作用是创建SqlSession接口对象,SqlSessionFactory的生命周期与mybatis的生命周期一致,所以一旦创建了SqlSessionFactory就需要长期保持它。为了确保对数据库连接的管理,所以一般采取单例SqlSessionFactory的方式,在应用中被共享。
  • SqlSession(会话):相当于数据库的一个连接(Connection对象),为了确保资源的合理利用,每当使用完SqlSession后必须要关闭。而SqlSession是非线程安全的,所以SqlSession不可以作为成员变量或者静态变量,每次使用都应该去获取新的对象。
  • Mapper(映射器):Mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。

 

各个文件的作用:

 

文件作用
pom.xml导入相关的依赖
log4j.xml日志配置文件,让后台日志数据Mybatis运行的过程日志
Employee.javaPOJO对象
EmployeeMapper.java映射器接口
EmployeeMapper.xml映射器接口,描述映射关系、Sql等内容
jdbc.properties连接数据库的相关配置
mybatis-config.xmlMybatis全局哦诶之文件

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值