在JavaEE中使用Mybatis框架

MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

使用框架就是引用别人封装好的jar包,按照别人规定好的方式进行配置并调用jar包里的各种方法。那Mybatis需要进行哪些配置呢?我们来看一个例子:

一、创建简单的pojo类

package com.wenji.entity;

public class Employee {
       private int id;
       private String firstName;
       private String lastName;
       private int salary;  

       public Employee() {}
       public Employee(int id,String firstName, String lastName, int salary) {
          this.id = id;
          this.firstName = firstName;
          this.lastName = lastName;
          this.salary = salary;
       }
       //省略getter、setter方法
}

Employee类

二、设置 mybatis 配置文件: Configure.xml(文件名随便起), 在 src/config 目录下建立此文件,内容如下:

<?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 type="com.wenji.entity.Employee" alias="Employee"/>
     </typeAliases>

     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC"/>
             <dataSource type="POOLED">
                 <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
                 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
                 <property name="username" value="system"></property>
                 <property name="password" value="123456"></property>
             </dataSource>
         </environment>
     </environments>
     <mappers>
         <mapper resource="com/wenji/mapping/Employee.xml"></mapper>
    </mappers>
</configuration>

三、设置Mybatis映射文件

<?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.wenji.UserMapper">
    <select id="GetEmployeeByID" parameterType="int" resultType="Employee">
        select id,first_name firstName,last_name lastName,salary from HTCPP.Employee where id = #{id}
    </select>
</mapper>

下面是对这两个配置文件一点解释说明:
1、配置文件 Configure.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias type="com.wenji.entity.Employee" alias="Employee"/> 这个别名非常重要,在具体的类的映射中,比如:Employee.xml中 resultType 就是对应这个。要保持一致,这里的 resultType 还有另外单独的定义方式,后面我们再详细介绍说明。
2、Configure.xml 里面 的<mapper resource="com/wenji/mapping/Employee.xml"></mapper>是包含要映射的类的 xml 配置文件。
3、在Employee.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。

四、测试是否成功

package com.wenji.test;

import java.util.List;
import java.util.Date;
import java.util.Iterator; 

import java.io.Reader;

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 com.wenji.entity.Employee;

public class ManageEmployee {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("configure.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static SqlSessionFactory getSession() {
        return sqlSessionFactory;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SqlSession session = sqlSessionFactory.openSession();
        try {
            Employee employee = (Employee) session.selectOne(
                    "com.wenji.UserMapper.GetEmployeeByID", 2);
            if(employee!=null){
                System.out.println("First Name: " + employee.getFirstName());
                System.out.println("Last Name: " + employee.getLastName());
                System.out.println("Salary: " + employee.getSalary());
            }
        } finally {
            session.close();
        }
    }
}

Mybatis也提供了注解的方式来定义映射,来看下面这个示例

Employee类不变,Employee.xml文件不见了,取而代之的是IEmployee.java接口

package com.wenji.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.wenji.entity.Employee;

public interface IEmployee {
    @Select("select id,first_name firstName,last_name lastName,salary from Employee where id = #{id3}")
    public Employee getEmployeeByID(int id2);

    @Select("select id,first_name firstName,last_name lastName,salary from Employee ")
    public List<Employee> getEmployeeList();

    @Insert(" INSERT INTO Employee(id,first_name, last_name,salary) VALUES(#{id}, #{firstName}, #{lastName}, #{salary})")
    public void insertEmployee(Employee ee);

    @Update("UPDATE Employee SET id=#{id},first_name = #{firstName},last_name = #{lastName},salary = #{salary} WHERE id =#{id}")
    public void updateEmployee(Employee ee);

    @Delete("DELETE FROM Employee WHERE id = #{id}")
    public void  deleteEmployee(int id);
}

因为不存在Employee.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>
    <typeAliases>
         <typeAlias type="com.wenji.entity.Employee" alias="Employee"/>
<!--         <package name="entity"></package> -->
     </typeAliases>

     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC"/>
             <dataSource type="POOLED">
                 <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
                 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
                 <property name="username" value="developer"></property>
                 <property name="password" value="developer"></property>
             </dataSource>
         </environment>
     </environments>
     <mappers>
<!--          <mapper resource="com/wenji/mapping/Employee.xml"></mapper> -->
    </mappers>
</configuration>

测试方法有很大的不同

package com.wenji.test;

import java.util.List;
import java.util.Date;
import java.util.Iterator; 

import java.io.Reader;

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 com.wenji.dao.IEmployee;
import com.wenji.entity.Employee;

public class ManageEmployee {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;
    static {
        try {
            reader = Resources.getResourceAsReader("configure.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            sqlSessionFactory.getConfiguration().addMapper(IEmployee.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSession() {
        return sqlSessionFactory;
    }

    public static void main(String[] args) {
        getEmployeeByID(1);
//        getEmployeeList();
//        testInsert();
//        testUpdate();
//        testDelete();
    }

    private static void getEmployeeByID(int id){
         SqlSession session = sqlSessionFactory.openSession();
         try {
             IEmployee iEmployee = session.getMapper(IEmployee.class);
             Employee employee = iEmployee.getEmployeeByID(id);
             System.out.print("First Name: " + employee.getFirstName());
             System.out.print("  Last Name: " + employee.getLastName());
             System.out.println("  Salary: " + employee.getSalary());
         } finally {
             session.close();
         }
    }

    private static void  getEmployeeList(){
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IEmployee iEmployee = session.getMapper(IEmployee.class);
            List<Employee> employees = iEmployee.getEmployeeList();
            printEmployees(employees);
        } finally {
            session.close();
        }
    }

    public static void testInsert(){
        try{
            // 获取Session连接
            SqlSession session = sqlSessionFactory.openSession();
            // 获取Mapper
            IEmployee eMapper = session.getMapper(IEmployee.class);
            System.out.println("Test insert start...");
            // 执行插入
            Employee ee = new Employee();
            ee.setId(5);
            ee.setFirstName("zhang");
            ee.setLastName("san");
            ee.setSalary(100);
            eMapper.insertEmployee(ee);
            // 提交事务
            session.commit();

            // 显示插入之后Employee信息
            System.out.println("After insert");
            getEmployeeList();
            System.out.println("Test insert finished...");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static void testUpdate(){
        try{
            SqlSession session = sqlSessionFactory.openSession();
            IEmployee eMapper = session.getMapper(IEmployee.class);
            System.out.println("Test update start...");
            printEmployees(eMapper.getEmployeeList());
            // 执行更新
            Employee ee = eMapper.getEmployeeByID(5);
            ee.setFirstName("New name");
            eMapper.updateEmployee(ee);
            // 提交事务
            session.commit();
            // 显示更新之后Employee信息
            System.out.println("After update");
            getEmployeeList();
            System.out.println("Test update finished...");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    // 删除用户信息
    public static void testDelete(){
        try{
            SqlSession session = sqlSessionFactory.openSession();
            IEmployee eMapper = session.getMapper(IEmployee.class);
            System.out.println("Test delete start...");
            // 显示删除之前Employee信息
            System.out.println("Before delete");
            getEmployeeList();
            // 执行删除
            eMapper.deleteEmployee(5);
            // 提交事务
            session.commit();
            // 显示删除之后User信息
            System.out.println("After delete");
            getEmployeeList();
            System.out.println("Test delete finished...");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     *
     * 打印用户信息到控制台
     *
     * @param users
     */
    private static void printEmployees(final List<Employee> employees) {
        for (Employee employee : employees) {
            System.out.print("id: " + employee.getId());
            System.out.print("First Name: " + employee.getFirstName());
            System.out.print("  Last Name: " + employee.getLastName());
            System.out.println("  Salary: " + employee.getSalary());
        }
    }
}

原文地址:https://www.cnblogs.com/jwen1994/p/10245663.html

时间: 2024-10-17 22:58:35

在JavaEE中使用Mybatis框架的相关文章

Java Web开发中Spring+MyBatis框架的简单搭建

这里使用的eclipse,首先创建一个动态web项目. 1.导入Spring IOC.AOP.DAO.dbcp.dbdrive.mybatis.jar . mybatis-spring.jar  本人使用的jar包和版本如下: aopalliance.jaraspectjweaver.jarcommons-dbcp-1.4.jarcommons-logging.jarcommons-pool-1.5.6.jarmybatis-3.2.5.jarmybatis-spring-1.2.2.jarmy

在JavaEE中使用Hibernate框架

我们必须要了解一些Hibernate基础对象,如下: 配置对象 配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造.它代表了 Hibernate 所需一个配置或属性文件.配置对象提供了两种基础组件. 数据库连接:由 Hibernate 支持的一个或多个配置文件处理.这些文件是 hibernate.properties 和 hibernate.cfg.xml. 类映射设置:这个组件创造了 Java 类和数据库表格之间的联系.

试用MyBatis框架

1.<b>下面以"MyCinema"数据库作为示范来讲解MyBatis的使用</b> 2.在项目中导入MyBatis框架jar包 使用MyBatis开发数据访问层,只需要导入mybatis-3.x.x.jar和对应的JDBC驱动即可.以下使用两种方式导入相关依赖. (1)直接导入 (2)使用Maven <dependencies> <!-- JDBC MySQL 驱动 --> <dependency> <groupId&

MyBatis框架的详解

一.MyBatis的介绍 在使用的时候,需要配置文件的方式告知框架需要的信息,多数会使用XML文件作为框架的配置文件. 框架都是由第三方提供的,提供的都是jar包.因此,使用框架前,必须将框架涉及的jar包导入项目中. MyBatis框架是:ORM框架,用于操作数据库,底层是对jdbc进行了封装. MyBatis 的前身是 iBatis, 是 Apache 下的一个开源项目,现在被迁移到了 GitHub 上. 写配置文件及入门MyBatis的中文网址:http://www.mybatis.org

IDEA中写MyBatis的xml配置文件编译报错的坑

IDEA中写MyBatis的xml配置文件编译报错的坑 说明:用IDEA编译工具在项目中使用Mybatis框架,编写mybatis-config.xml和Mapper.xml配置文件时,编译项目出现错误,错误提示为: xml中1字节的UTF-8序列的字节1无效 The cause of this is a file that is not UTF-8 is being parsed as UTF-8. It is likely that the parser is encountering a

SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释 2016-04-14 23:40 13030人阅读 评论(2) 收藏 举报 分类: SSM(7) 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文件并没有进行过多的说明,很多人知其然不知其所以然,经过几天的搜索和整理,今天总算对其中的XML配置文件有了一定的了解,所以拿出来一起分享一下,希望有不足的地方大家批评指正~~~ 首先   这篇文章暂时只对框架中所要用到的配置文件进行解

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea