在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());
}
}
}
在JavaEE中使用Mybatis框架的更多相关文章
- Java Web开发中Spring+MyBatis框架的简单搭建
这里使用的eclipse,首先创建一个动态web项目. 1.导入Spring IOC.AOP.DAO.dbcp.dbdrive.mybatis.jar . mybatis-spring.jar 本人 ...
- 在JavaEE中使用Hibernate框架
我们必须要了解一些Hibernate基础对象,如下: 配置对象 配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造.它代表了 ...
- OSGI企业应用开发(十)整合Spring和Mybatis框架(三)
上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库. 为了方便演示,我们新建一个新的Plug ...
- IDEA中写MyBatis的xml配置文件编译报错的坑
IDEA中写MyBatis的xml配置文件编译报错的坑 说明:用IDEA编译工具在项目中使用Mybatis框架,编写mybatis-config.xml和Mapper.xml配置文件时,编译项目出现错 ...
- MyBatis框架的详解
一.MyBatis的介绍 在使用的时候,需要配置文件的方式告知框架需要的信息,多数会使用XML文件作为框架的配置文件. 框架都是由第三方提供的,提供的都是jar包.因此,使用框架前,必须将框架涉及的j ...
- 在springboot中集成mybatis开发
在springboot中利用mybatis框架进行开发需要集成mybatis才能进行开发,那么如何在springboot中集成mybatis呢?按照以下几个步骤就可以实现springboot集成myb ...
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释(转)
原文:https://blog.csdn.net/yijiemamin/article/details/51156189# 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文 ...
- 0927-转载:SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
这篇文章暂时只对框架中所要用到的配置文件进行解释说明,而且是针对注解形式的,框架运转的具体流程过两天再进行总结. spring+springmvc+mybatis框架中用到了三个XML配置文件:web ...
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文件并没有进行过多的说明,很多人知其然不知其所以然,经过几天的搜索和整理,今天总算对其中的XML配置文件有了一定的了解,所以拿 ...
随机推荐
- BZOJ 4820 [SDOI2017] 硬币游戏
Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了.同学们觉得要加强趣味性,所以要找 ...
- 转://Oracle PL/SQL 优化与调整 -- Bulk 说明
一. Bulk 概述 本来只想测试一下Bulk Collect 和update性能的,但发现Bulk 的东西还是很多的,在OTN上搜了一些,整理如下. 1.1 Bulk Binding 和 Bulk ...
- TFT2.2
https://cdn-learn.adafruit.com/downloads/pdf/2-2-tft-display.pdf
- Spring Security(十一):4. Samples and Guides (Start Here)
If you are looking to get started with Spring Security, the best place to start is our Sample Applic ...
- permute
repmat函数用法 复制和平铺矩阵 函数repmat 格式: B = repmat(A, m, n) %将矩阵A复制m*n块,即B由m*n块A平铺而成 B = repmat(A, [m n]) ...
- Jmeter自定义Java请求,继承AbstractJavaSamplerClient
首先,使用Eclipse新建一个项目,然后从Jmeter的lib/ext目录下中拷贝ApacheJMeter_java.jar和ApacheJMeter_core.jar两个文件,然后引入这两个JAR ...
- linux驱动编写之poll机制
一.概念 1.poll情景描述 以按键驱动为例进行说明,用阻塞的方式打开按键驱动文件/dev/buttons,应用程序使用read()函数来读取按键的键值.这样做的效果是:如果有按键按下了,调用该re ...
- Gym101194J Mr.Panda and TubeMaster 二分图、费用流
传送门 看到这张图,是一个网格图,而且有回路限制,不难想到黑白染色. 一般来说我们对一张图黑白染色之后都是黑色点向白色点连边,但是这道题往这边想似乎就想不出建图方法了,因为"一个格子强制流满 ...
- Docker镜像存储-overlayfs
一.概述 Docker中的镜像采用分层构建设计,每个层可以称之为“layer”,这些layer被存放在了/var/lib/docker/<storage-driver>/目录下,这里的st ...
- A2D JS框架 - loadScript实现
其实这个功能比较小,本着自己造轮子的优良传统....就自己造一个好了 <head> <title></title> <script src="A2D ...