在实际项目中,我一直在用Hibernate持久层的开发,但是由于Hibernate的紧密封装,虽然ORM使得对数据库的操作非常简单和方便,但是有时候碰到的各种关联关系,又显得比较呆板不灵活。
MyBatis 是支持普通 SQL查询, 存储过程和高级映射的优秀 持久层框架。MyBatis 消除了几乎所有的 JDBC代码和参数的手工设置以及 结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用Sql SessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源
我们先看看mybatis的主要配置文件Configuration.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED"><!--数据库连接内容 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--实体类相关操作配置文件 -->
<mapper resource="orm/Student.xml"/>
</mappers>
</configuration>
有过持久层框架开发的 一看就明白 废话少说 直接进入demo
实体类Student
/**
*
* 这是一个学生类
*
*/
public class Student {
private Integer id;//代理主键
private String name;//姓名
private Integer age;//年龄
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 Integer getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
与实体类相对应的配置文件Student.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="Student">
<!--resultMap用来映射表与类之间的字段关系 id标签代表主键列 column代表表里的字段 property是对应类里面的属性 -->
<resultMap type="orm.Student" id="Student">
<id column="ID" jdbcType="INTEGER" property="id"/>
<result column="NAME" jdbcType="VARCHAR" property="name"/>
<result column="AGE" jdbcType="INTEGER" property="age"/>
</resultMap>
<!--查询 resultMap是上面配置的resultMap的id<span style="font-family: arial, 宋体, sans-serif; text-indent: 2em;">名字用来映射实体类,查询出的结果直接封装 --></span>
<select id="selectID" parameterType="int" resultMap="Student">
<!-- parameterType 是传入到值类型 java代码中传入int型 配置文件接收时候固定值_parameter 详查mybatis ONGL-->
select ID,NAME,AGE from Student where ID=#{_parameter}
</select>
<insert id="save" parameterType="orm.Student">
<!-- 传入值类型为实体类,配置文件接收直接#{实体类对应属性} 详查mybatis ONGL-->
insert into Student(NAME,AGE) values(#{name},#{age})
</insert>
<delete id="deleteID" parameterType="int">
delete from Student where ID = #{_parameter}
</delete>
</mapper>
测试类Test.java
package test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
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 orm.Student;
public class Test {
public static void main(String[] args) throws IOException {
// 通过配置文件获取数据库连接信息
Reader reader = Resources.getResourceAsReader("Configuration.xml");
// 通过配置信息构建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 通过sqlSessionFactory打开一个数据库会话
SqlSession sqlSession = sqlSessionFactory.openSession();
/**
* 保存数据
*/
// Student student = new Student();
// student.setAge(12);
// student.setName("张三");
// insert 第一个参数 是Student.xml 配置文件中namespace . <insert/>标签中的id 第二个参数代表传入的值
// sqlSession.insert("Student.save",student);
// sqlSession.commit();//提交事务
/**
* 查询
*/
// List<Student> list=sqlSession.selectList("Student.selectID", 1);
// for(Student s:list){
// System.out.println(s.getName()+"====="+s.getAge());
// }
/**
* 删除
*/
// sqlSession.delete("Student.deleteID", 1);
// sqlSession.commit();
}
}
具体操作就在代码中的注释,如有疑问可以与我讨论。
以上都是自己学习时候的总结,难免会有错误,如有指出,将不胜感激。
主要jar mybatis-3.2.7.jar