MyBatis框架(一)

MyBatis框架(一)

MyBatis简介
1)MyBatis是支持定制话SQL、存储过程以及高级映射的优秀的持久化层框架。
2)MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
3)MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和JavaPOJOPlain Ordinary Java Object,普通的Java对象)映射成数据库中的记录。
4)MyBatis是一个半自动的ORMObject Relation Mapping)框架。

一、为什么要使用MyBatis(现有持久化技术的对比)

1.1 JDBC

SQL夹在Java代码块里,耦合度高导致硬编码内伤
②维护不易且实际开发需求中sql有变化,频繁修改的情况多见

1.2 HibernateJPA

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

1.3 MyBatis

①对开发人员而言,核心SQL还是需要自己优化
SQLJava编码分开,功能边界清晰,一个专注业务、一个专注数据。

二、HelloWorld案例

本案例简单搭建一个使用MyBatis框架的实用

2.1 项目整体预览

在这里插入图片描述

2.2 开发环境的准备

2.2.1 导入jar

在这里插入图片描述

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

</mapper>
2.2.3 log4j.xml

此时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>

2.2.4 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">
<!--MyBatis的全局配置文件-->
<configuration>

</configuration>
2.2.5 db.properties
username=root
password=123456
url=jdbc:mysql://localhost:3306/mybatis
driver=com.mysql.jdbc.Driver
2.2.6 数据库文件
CREATE DATABASE `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `departments`;

CREATE TABLE `departments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

insert  into `departments`(`id`,`name`) values 
(1,'教学部'),
(2,'教务部'),
(3,'运营部'),
(4,'咨询部'),
(5,'就业部');

DROP TABLE IF EXISTS `employees`;

CREATE TABLE `employees` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `salary` double(11,2) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `dept_id` (`dept_id`),
  CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `departments` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

insert  into `employees`(`id`,`last_name`,`email`,`salary`,`dept_id`) values 
(1,'HanZong','hybing@atguigu.com',30000.00,1),
(2,'Mayun','mayun@alibaba.com',20000.00,2),
(3,'Mahuateng','mahuateng@qq.com',10000.00,3);

2.3 案例搭建

2.3.1 实体类
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private Double salary;
    private Integer deptId;

	//构造方法...(无参,有参)
	
	//get  set方法

	//toString方法
}
2.3.2 Mapper接口类
public interface EmployeeMapper {
	//根据id获取员工信息
    Employee getEmployeeById(Integer id);
}
2.3.3 mybatis-config.xml配置
<!--MyBatis的全局配置文件-->
<configuration>
	<!--1.properties标签:可以通过引入外部属性文件配置数据源-->
    <properties resource="db.properties"/>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

	<!--mappers标签:用来注册SQL映射文件(Mapper映射文件)-->
    <mappers>
        <mapper resource="com/mybatis/mapper/EmployeeMapper.xml"/>
    </mappers>
</configuration>
2.3.3 EmployeeMapper.xml配置
<!--
    创建接口对应的SQL映射文件(Mapper映射文件)
    namespace属性:指定为接口的全类名
-->
<mapper namespace="com.mybatis.mapper.EmployeeMapper">
    <!--
        id属性:指定为接口中方法的名字
        resultType属性:指定为方法返回值的类型
    -->
    <select id="getEmployeeById" resultType="com.mybatis.entities.Employee">
        select id,last_name lastName,email,salary,dept_Id deptId
        from employees
        where id = #{id}
    </select>
</mapper>
2.3.4 Test 测试类
	//获取SqlSessionFactory
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

	@Test
    public void testGetEmployeeById() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
            Employee employeeById = mapper.getEmployeeById(1);
            System.out.println(employeeById);
        } finally {
            sqlSession.close();
        }
    }

运行结果
在这里插入图片描述

2.4 总结

简单的案例简单运用了一下mybatis在下一篇文章中会更深层次的介绍mybatis的配置
案例代码以有不完整的可以下载源代码,(源代码中有更为完全的注释)
源代码mybatis01_eg.zip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunset、筱虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值