码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis基本操作(一)

时间:2014-08-27 23:19:48      阅读:418      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   java   使用   io   for   

 之前写过一篇关于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.Driver
2 url=jdbc:mysql://localhost:3306/ibatis
3 username=root
4 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 student
12     </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 zhouxy
14  *
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     @Override
41     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定义的namespace
22                                                                                 //以及自定义的相应操作的id
23         sqlsession.commit();            //提交事务,必须提交
24         sqlsession.close();                //在使用mybatis的过程中每一个操作都是离不开SqlSession的,所以获取SqlSession是相当重要的。
25                                 //此外,SqlSession是不能被共享、线程不安全的,所以在每次需要SqlSession的时候都应该打开一个,然后在用完了之后再把它关上                                        
26     }
27     
28     
29     //insert方法返回插入数据库时改记录对应主键的值.当然需要在Student.xml文件中将useGeneratedKeys设置为true
30     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 }

 结果:

    bubuko.com,布布扣

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

mybatis基本操作(一)

标签:style   blog   http   color   os   java   使用   io   for   

原文地址:http://www.cnblogs.com/zhouxuanyu/p/3940467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!