MyBatis实战第一讲

来源:互联网 发布:数据库是按一定的结构 编辑:程序博客网 时间:2024/06/04 19:47

MyBatis实战第一讲

一.MyBatis简介

Hibernate是一个非常流行的全自动的持久层框架,同时它也有它自己框架本身存在的缺点:
(1)全表映射;
(2)无法根据不同的条件组装不同的SQL
(3)多表关联和复杂的SQL查询支持比较差,需要自己写SQL,返回时需要重新分装成自己所需要的实体类
(4)不能有效支持存储
(5)Hibernate虽然支持HQL查询,但是大型系统的复杂查询会需要优化SQL,这点Hibernate是做不到的。
针对以上的缺点,MyBatis一个半自动映射框架就诞生了。MyBatis配置是需要手工配置POJO,SQL和映射关系。
如下图(MyBatis的ORM的映射模型图):
这里写图片描述

二.MyBatis实例创建

1.新建一个Maven项目,总体架构如下图:

这里写图片描述


代码清单1:pom.xml

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

代码清单2: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="mybatis.properties"></properties>    <!-- 环境配置 -->    <environments default="development">        <environment id="development">            <transactionManager type="JDBC" />            <!-- 数据库连接相关配置 ,这里动态获取mybatis.properties文件中的内容 -->            <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>        <mapper resource="com/xfx/dao/mapper/user.xml" />    </mappers></configuration>  

代码清单3:mybatis.properties

driver   = com.mysql.jdbc.Driverurl      = jdbc:mysql://localhost:3306/worldusername = rootpassword = root

代码清单4:User.java

public class User {    private Integer id;//自动增长的ID      private String name;//用户名      private String password;//密码      private String email;//邮箱      private Integer age;//年龄      private Integer gender;//性别,0-男 ; 1-女      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 String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Integer getGender() {        return gender;    }    public void setGender(Integer gender) {        this.gender = gender;    }    public void showMessage(){        System.out.println(this.id+" , "+this.name+" , "+this.password+" , "+this.email+" , "+this.age+" , "+this.gender);     }}

代码清单5:IUserDao.java

import java.util.List;import com.xfx.entity.User;public interface IUserDao {    public List<User> findAllUser();}

代码清单6:user.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 namespace="com.xfx.dao.IUserDao">    <resultMap type="com.xfx.entity.User" id="baseMap">        <id column="id" property="id" jdbcType="INTEGER" />        <result column="name" property="name" jdbcType="VARCHAR" />        <result column="password" property="password" jdbcType="VARCHAR" />        <result column="email" property="email" jdbcType="VARCHAR" />        <result column="gender" property="gender" jdbcType="INTEGER" />        <result column="age" property="age" jdbcType="INTEGER" />    </resultMap>    <select id="findAllUser" resultType="com.xfx.entity.User">        SELECT        id,name,password,email,gender,age FROM `user`    </select></mapper>

为了使用MyBatis,我们还需要创建SqlSessionFactory,具体代码如下:

public class MybatisUtil {    private static SqlSessionFactory sqlSessionFactory = null;    public static SqlSessionFactory getSqlSessionFactory() {        if (sqlSessionFactory == null) {            try {                sqlSessionFactory = new SqlSessionFactoryBuilder()                        .build(Resources.getResourceAsStream("mybatis-config.xml"));            } catch (Exception e) {                e.printStackTrace();            }        }        return sqlSessionFactory;    }}

接下来就是去实现了,代码如下:

SqlSession session = null;        try {            session = MybatisUtil.getSqlSessionFactory().openSession();            IUserDao userDao = session.getMapper(IUserDao.class);            List<User> users = userDao.findAllUser();            for(User user :users){                user.showMessage();            }        } catch (Exception e) {            e.printStackTrace();        }

总结:以上便完成了一个简单的Mybatis的项目的搭建工作,以及相关的代码实现工作。SQL和映射规则都是在XML里面进行了分离,你可以自由的编写SQL代码查询自己项目所需要的字段。此外MyBatis提供的接口编程的映射器需要一个接口和映射文件便可以运行。MyBatis具有高度的灵活性、可优化、易维护,支持动态列、动态表名、存储过程等,同时还提供了缓存、日志、级联。你可以根据自己项目的需求去选择合适的持久层框架。

原创粉丝点击