开启MyBatis(一)

1. 什么是MyBstis?

    MyBatis是一个开源的框架,它是将我们原先所写的JDBC代码封装到配置有文件模板中,通过与简单的API应用与数据层进行交互。可能我们早先知道的是iBATIS,而MyBatis3就是在iBATIS的基础上重新设计的。提供了注解和映射配置文件。

我之所以会选择MyBatis,最主要有原因还是因为,MyBatis简单的容易使用。在笔者看来,它还有一个原因就是框架较轻量。在Java的应用程序中,持久层包括java对象的数据加载是来自于数据库的SQL语言查询,保持Java对象在数据库中使用。

MyBatis使用的SQL容易抽象底层的JDBC代码,自动地将SQL的查询结果与JAVA的对象对应,和将Java的数据插入到数据库中。这就有我们经常所说的ORM(Object Relational Mapping)的技术,就是对象关系映射了。读者如果不清楚ORM,可以上网查找相关技术。

如果你现在正在 用iBATIS和想转换使用MyBatis,你可以登录:https://code.google.
com/p/mybatis/wiki/DocUpgrade3,了解更多知识。

2. 为什么使用MyBatis?

在市面上有许多的基于Java持久的框架,而为什么MyBatis越来越流行,有以下的几个原因:

1)        它消除了许多JDBC引用的代码

2)        学习Mybatis技术要求不高,只要会java和SQL就行了

3)        在传统的数据库中,它应用良好

4)        它依然拥包SQL

5)        它提供了可支持Spring和Guice的框架

6)        它提供了可使用第三方的缓存的架包

7)        它包含了更好的性能

3. 消除在量JDBC的代码

Java在与数据库进行关系时,是使用JDBC(Java Database Connectivity)的API.但是JDBC是Java底层的API,和我们需要这写在量的代码去操作数据库。

让我们通过操作insert的select的数据库操作,来试验我们是如何在JDBC的API中操作的。

1)        下面呈现的是STUDENTS表,拥有STUD_ID,NAME,和DOB的字段。

 import java.util.Date;
public class Student
{
private Integer studId;
private String name;
private String email;
private Date dob;
// setters and getters
}

2)        下面我们创建StudentService.java的应用程序,来操作STUDENTS这张表的,通过使用SELECT和INSERT的SQL语句。

 public Student findStudentById(int studId)
{
Student student = null;
Connection conn = null;
try{
//obtain connection
conn = getDatabaseConnection();
String sql = "SELECT * FROM STUDENTS WHERE STUD_ID=?";
//create PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, studId);
ResultSet rs = pstmt.executeQuery();
//fetch results from database and populate into Java objects
if(rs.next()) {
student = new Student();
student.setStudId(rs.getInt("stud_id"));
student.setName(rs.getString("name"));
student.setEmail(rs.getString("email"));
student.setDob(rs.getDate("dob"));
}
} catch (SQLException e){
throw new RuntimeException(e);
}finally{
//close connection
if(conn!= null){
try {
conn.close();
} catch (SQLException e){ }
}
}
return student;
}
public void createStudent(Student student)
{
Connection conn = null;
try{
//obtain connection
conn = getDatabaseConnection();
String sql = "INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(?,?,?,?)";
//create a PreparedStatement
PreparedStatement pstmt = conn.prepareStatement(sql);
//set input parameters
pstmt.setInt(1, student.getStudId());
pstmt.setString(2, student.getName());
pstmt.setString(3, student.getEmail());
pstmt.setDate(4, new
java.sql.Date(student.getDob().getTime()));
pstmt.executeUpdate();
} catch (SQLException e){
throw new RuntimeException(e);
}finally{
//close connection
if(conn!= null){
try {
conn.close();
} catch (SQLException e){ }
}
}
}
protected Connection getDatabaseConnection() throws SQLException
{
try{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection
("jdbc:mysql://localhost:3306/test", "root", "admin");
} catch (SQLException e){
throw e;
} catch (Exception e){
throw new RuntimeException(e);
}
}

在前面的方法中,有太多的重复代码,原因就在于在创建连接、创建声明、放入参数和关掉资源,就是连接、声明和结果集。

MyBatis抽象了这些通用的方法,让开发将焦点放到了重要的层面,例如SQL的执行和将输入的数据转换为Java的对象。

除此之外,MyBatis自动设置查询参数的过程以及从输入java对象的属性和填充的java对象的SQL查询结果。下面让我们来看一下MyBtis是如何使用的。

1)        创建SQL 查询的映射文件,我们称之为StudentMapper.xml

 <select id="findStudentById" parameterType="int"
resultType=" Student">
SELECT STUD_ID AS studId, NAME, EMAIL, DOB
FROM STUDENTS WHERE STUD_ID=#{Id}
</select>
<insert id="insertStudent" parameterType="Student">
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(#{studId},#{name},#{email},#{dob})
</insert>

2)        创建StudentMapper接口

public interface StudentMapper
{
Student findStudentById(Integer id);
void insertStudent(Student student);
}

3)        在Java的代码中,你可以用到下面的声明。

 SqlSession session = getSqlSessionFactory().openSession();
StudentMapper mapper =
session.getMapper(StudentMapper.class);
// Select Student by Id
Student student = mapper.selectStudentById(1);
//To insert a Student record
mapper.insertStudent(student)

太棒了,我们不需要去关心Connection、PrepareStatement、extreact和set这些参数了,还有通过自己来关掉第一个数据的操作。我们仅仅只需要配置数据的连接和SQL的声明。Mybatis就会去关心整个运行的过程了。

我们在后面的章节中,将会提到SqlSessionFactory、SqlSession和Mapper XML和文件。除了这些,MyBatis还提供了许多简单的持久的逻辑应用的特性。

1)        它支持复杂的SQL结果集数据映射到嵌套的对象图结构中。

2)        它支持一对一和一对多的java对象映射。

3)        它提供动态的SQL查询。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值