首页 > 代码库 > 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基本操作(一)