Mybatis简单入门<学习随笔>

来源:互联网 发布:5x兴趣社区淘宝商店 编辑:程序博客网 时间:2024/06/05 19:24
在实际项目中,我一直在用Hibernate持久层的开发,但是由于Hibernate的紧密封装,虽然ORM使得对数据库的操作非常简单和方便,但是有时候碰到的各种关联关系,又显得比较呆板不灵活。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个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

0 0
原创粉丝点击