在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配置文件有了一定的了解,所以拿 ...
随机推荐
- 设计模式のChainOfResponsibilityPattern(责任链模式)----行为模式
一.产生背景 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它.避免请求发送者与接 ...
- 关于 chrome canary X64 在 win7 64bit 下面缺少openvr_api.dll的解决方法
在github上下载openvr_api.dll放到chrome的安装目录下就可以. 其实放到系统目录下最好,以后其他程序要使用的时候也能使用的到. https://github.com/ValveS ...
- Maven打包相关插件集合
参考:https://www.cnblogs.com/selier/p/9510326.html
- Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...
- Python:Day54 ORM
Django项目中使用mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'books', # ...
- 【css】css规范
说法一: 属性的书写顺序, 举个例子: .hotel-content { /* 定位 */ display: block; position: absolute; left: 0; top: 0; / ...
- docker 6 docker运行的底层原理
docker是一个client-server结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器,是一个运行时的环境,就 ...
- 自动化测试中依据元素实时截图,比较元素图片是否一致(selenium和appium通用)
1.根据元素的上下左右的坐标进行截图 2.先安装pillow 3.下面是截图 4.下面是比较两张图片的值 5.截取两张图片,然后对两张图片比对,这种场景,可以在测试视频播放.图片显示页面做验证.
- pycharm2018.3版 永久激活
pycharm2018.3版 永久激活 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10258257.html 激活前准备工作 ...
- 支持“xxxContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
将项目的数据库连接用户及密码修改后(切换用户,用户名与原来不一样,用户下对象结构一致),报以下错误: 支持“XXXDBContext”上下文的模型已在数据库创建后发生更改.请考虑使用 Code Fir ...