首页 > 代码库 > mybatis基本操作(一)

mybatis基本操作(一)

 之前写过一篇关于ibatis的文章,这两天学习了mybatis.

 Ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis.

 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录.mybatis对数据库的操作有两种方式:配置文件和注解.下面就详细介绍用这两种方式.无论哪种方式,都得首先配置最主要的配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 文档申明 --> 3 <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.1//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> 4 <configuration> 5     <!-- 引入properties文件 --> 6     <properties resource="com/zhouxy/ibatis/DBInfo.properties"/> 7      8     <!-- 类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关,只用来减少类完全限定名的多余部分. --> 9     <!-- 使用这个配置, “Student”可以任意用来替代“com.zhouxy.ibatis.Student”所使用的地方。 -->10     <typeAliases>11         <typeAlias type="com.zhouxy.ibatis.Student" alias="Student"/>12     </typeAliases>13     14   <environments default="development"><!-- 默认的环境ID -->15     <environment id="development">16     <transactionManager type="JDBC"/><!-- 事务管理器的配置 [JDCB或者MANAGED]-->17     <dataSource type="POOLED">         <!-- 数据源的配置 -->18         <property  name="driver" value="${driver}"/>    <!-- 将DBInfo.properties文件中的属性绑定 -->19         <property  name="url" value="${url}"/>20         <property  name="username" value="${username}"/>21         <property  name="password" value="${password}"/>22     </dataSource>23     </environment>24   </environments>25   <!-- mybatis的行为配置以上的就可以,详细的可以参看mybatis的参看文档, -->26   27   <!-- 既然这些都配置好了,现在就要定义SQL的映射语句了,下面语句就是告诉mybatis去哪儿找映射文件 -->28     <mappers>29         <mapper resource="com/zhouxy/ibatis/Student.xml"/>30     </mappers>31     32 </configuration>

 DBInfo.properties文件:

1 driver=com.mysql.jdbc.Driver2 url=jdbc:mysql://localhost:3306/ibatis3 username=root4 password=root

 Student.xml文件:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!--   这个文件是一个关键,映射了所有的DAO操作方法(HIBERNATE是映射实体,IBATIS映射方法) --> 3 <!-- 文档申明 --> 4 <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> 5 <mapper namespace="com.zhouxy.ibatis.StudentDao"> <!-- 这个命名空间非常重要,UserDAO是一个接口 --> 6  7     <sql id="studentColumns">name,age</sql>    <!-- 定义sql语句中要查找的列,之后根据id使用. --> 8      9     <!-- 查找全部学生  -->10     <select id="selectAllStudent" resultType="Student">    <!--这个id非常重要,在DAO中,直接使用命名空间.ID来对应这个SQL语句  -->11         select * from student12     </select>13 14     <!-- 删除指定的学生 -->15     <delete id="deleteStudentById" parameterType="java.lang.Integer">16         delete from student where id = #{id}17     </delete>18     19     <!-- 新增学生 -->20     <insert id="insertStudent" parameterType="Student" keyProperty="id" useGeneratedKeys="true">21         insert into student(name,age) values(#{name},#{age})22     </insert>23     24     <!-- 根据ID查找指定的学生 -->25     <select id="selectStudentById" parameterType="int" resultType="Student">26         select <include refid="studentColumns"/> <!-- 使用了前面定义要查找的列 -->27         from student where id = #{id}28     </select>29     30     <!-- 更新学生信息 -->31     <update id="updateStudentById" parameterType="int">32         update student set name = #{name},age=#{age}33         where id = #{id}34     </update>35     36     <!-- 模糊查询 -->37     <select id="selectStudentByName" parameterType="String" resultType="Student">38         select <include refid="studentColumns"/>39         from student 40         where name like <!-- concat(concat(‘%‘,#{name}),‘%‘) --> "%"#{name}"%"41     </select>42 </mapper>

 每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。SqlSessionFactory本身是由SqlSessionFactoryBuilder创建的,一般而言,在一个应用中,一个数据库只会对应一 个SqlSessionFactory,所以一般我们都把SqlSessionFactory定义成单例模式,或通过Spring等进行注入。下面是我封装的获取SqlSessionFactory对象。

 1 package com.zhouxy.ibatis; 2  3 import java.io.IOException; 4 import java.io.Reader; 5  6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 10 11 /**12  * 该类获取SqlSessionFactory对象.13  * @author zhouxy14  *15  */16 public class SessionFactoryUtils {17     private final static String source = "com/zhouxy/ibatis/SqlMapConfig.xml";    //要解析的总配置文件路径18     private static SqlSessionFactory sqlSessionFactory = null;19     20     public static SqlSessionFactory getSqlSessionFactory(){21         22         Reader reader = null;23         24         try {25             reader = Resources.getResourceAsReader(source);    //mybatis封装的解析文件的方法.更多方法参看mybatis的参考文档26             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);    //获得sqlsessionfactory对象27             28             reader.close();     //关闭读入流.29         } catch (IOException e) {30             e.printStackTrace();31         }32         33         return sqlSessionFactory;34     }35 }

 对应的JavaBean:

 1 package com.zhouxy.ibatis; 2  3 public class Student { 4     private int id; 5     private String name; 6     private int age; 7     public int getId() { 8         return id; 9     }10     public void setId(int id) {11         this.id = id;12     }13     public String getName() {14         return name;15     }16     public void setName(String name) {17         this.name = name;18     }19     public int getAge() {20         return age;21     }22     public void setAge(int age) {23         this.age = age;24     }25     public Student() {26         super();27     }28     29     public Student(String name,int age){30         this.name = name;31         this.age = age;32     }33     34     public Student(int id, String name, int age) {35         super();36         this.id = id;37         this.name = name;38         this.age = age;39     }40     @Override41     public String toString() {42         String string = "id="+id+"\tname="+name+"\tage="+age;43         44         return string;45     }46 }

 封装增删改查等方法:

 1 package com.zhouxy.ibatis; 2  3 import java.util.List; 4  5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7  8 public class StudentDAOIbatis{ 9     10     //获得SqlSession对象11     public static SqlSession getSqlSession(){12         SqlSessionFactory sqlSessionFactory = SessionFactoryUtils.getSqlSessionFactory();13         SqlSession sqlSession = sqlSessionFactory.openSession();14             15         return sqlSession ;16     }17     18     //通过获得的sqlsession对象,进行对数据库的操作:增删改查19     public static void deleteStudentById(int id){20         SqlSession sqlsession = getSqlSession();21         sqlsession.delete("com.zhouxy.ibatis.StudentDao.deleteStudentById", id);//引号里面的内容是student.xml文件中mapper定义的namespace22                                                                                 //以及自定义的相应操作的id23         sqlsession.commit();            //提交事务,必须提交24         sqlsession.close();                //在使用mybatis的过程中每一个操作都是离不开SqlSession的,所以获取SqlSession是相当重要的。25                                 //此外,SqlSession是不能被共享、线程不安全的,所以在每次需要SqlSession的时候都应该打开一个,然后在用完了之后再把它关上                                        26     }27     28     29     //insert方法返回插入数据库时改记录对应主键的值.当然需要在Student.xml文件中将useGeneratedKeys设置为true30     public static int insertStudent(Student student){31         int id = 0;32         SqlSession sqlsession = getSqlSession();33         id = sqlsession.insert("com.zhouxy.ibatis.StudentDao.insertStudent",student);34         sqlsession.commit();35         sqlsession.close();36         37         return id;38     }39     40     public static List<Student> getAllStudent(){41         SqlSession sqlsession = getSqlSession();42         List<Student> studentList = sqlsession.selectList("com.zhouxy.ibatis.StudentDao.selectAllStudent");43         sqlsession.commit();44         sqlsession.close();45         46         return studentList;47     }48     49     public static Student getStudentById(int id){50         SqlSession sqlsession = getSqlSession();51         Student student = sqlsession.selectOne("com.zhouxy.ibatis.StudentDao.selectStudentById",id);52         sqlsession.commit();53         sqlsession.close();54         55         return student;56         57     }58     59     60     //update方法返回受影响的记录数61     public static int updateStudentById(Student student){62         SqlSession sqlsession = getSqlSession();63         int effectrows = sqlsession.update("com.zhouxy.ibatis.StudentDao.updateStudentById", student);64         65         sqlsession.commit();66         sqlsession.close();67         68         return effectrows;69     }70     71     public static List<Student> getStudentByName(String name){72         SqlSession sqlsession = getSqlSession();73         List<Student> studentList = sqlsession.selectList("com.zhouxy.ibatis.StudentDao.selectStudentByName",name);74         sqlsession.commit();75         sqlsession.close();76         77         return studentList;78         79     }80 }

 测试(仅举一例):

 1 package com.zhouxy.ibatis; 2  3 import static java.lang.System.*; 4  5 import java.util.List; 6  7 public class Test { 8     public static void main(String[] args) { 9         List<Student> studentList = StudentDAOIbatis.getStudentByName("张");10         for(Student student : studentList){11             out.println(student.toString());12         }13     }14 }

 结果:

    

 以上介绍了使用配置文件进行对数据库的操作,在《mybatis基本操作(二)》会介绍使用注解对数据库进行相关的操作.希望大家提出不足!

mybatis基本操作(一)